Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
moscowprogramer
0 / 0 / 3
Регистрация: 07.12.2011
Сообщений: 23
#1

Удалить из списка элементы с чётными номерами - C (СИ)

14.02.2012, 00:51. Просмотров 719. Ответов 2
Метки нет (Все метки)

Здрасвуйте уважаемые форумчане помогите реализовать следующее!удалить из списка элементы с чётными номерами! вот наработка! Спосибо заранее


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <stdio.h>
 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct _Element{     
 int Val;                    
 struct _Element *Next;
} Element;                   
Element *Head = NULL,  
        *Curr = NULL;   
 
int Add(int val)
{
  Element *tmp = (Element *)malloc(sizeof(Element));
  if(!tmp) return 0;
  if(!Head){
    Head=tmp;
    tmp->Next=NULL;
 }else{
   if(!Curr) Curr=Head;
   while(Curr->Next) Curr=Curr->Next;
   Curr->Next=tmp;
   Curr = Curr->Next;
   tmp->Next=NULL;
 }
 tmp->Val=val; Curr=tmp;
 return 1;
} 
 
 
void Print(void)
{
   while(Head){
     Curr=Head;
     Head=Head->Next;
  printf("%d ",Curr->Val);
   
   }
   
} 
 
 
void Destroy(void)
{
   while(Head){
     Curr=Head;
     Head=Head->Next;
     free(Curr);
   }
   Curr=NULL; Head=NULL;
} 
 
int Del(void)
{
   if(Curr==NULL) return 0;
   Element *tmp=Curr->Next;
   free(Curr);
   Curr = tmp;  
   return 1;
} 
 
 
void MoveHead(void){
    Curr = Head;
}
 
void MoveNext(void) {
        if (Curr->Next != NULL) {
            Curr = Curr->Next;
        }
    }
 
int main()
{ int n,znach;
    printf("Vvedite poj. razmer spiska : ");scanf("%d",&n);
 printf("Teper vvodite poj. elementy spiska : ");
 for (int i=0;i<n;i++){
  scanf("%d",&znach);
  Add(znach);
 }
    Print();
    MoveHead();
    for (int i=0;i<n;i++){
        MoveNext();
        if (i % 2 == 0){ Del(); }
    }
    printf("\n");
    Print();
    return 0;
}
 Комментарий модератора 
Используйте теги форматирования кода!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2012, 00:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удалить из списка элементы с чётными номерами (C (СИ)):

Вывести сначала элементы массива с четными номерами, а затем - элементы с нечетными номерами
Дан массив A размера N. Вывести вначале его элементы с четными номерами (в...

Удалить из файла все элементы, расположенные на позициях с четными номерами
Дан файл целых чисел. Удалить из него все элементы, расположенные на позициях с...

Удалить повторяющиеся элементы из односвязного списка
Я написал программу, которая удаляет дубликаты в списки, оставляя только его...

Удалить из однонаправленного списка отрицательные элементы
Создать список из случайных положительных и отрицательных целых чисел (от –10...

Удалить все четные элементы списка
Написать программу, которая из последовательность целых чисел формирует...

Удалить все элементы списка. Не работает delete
Нужно удалить все элементы односвязанного списка и пришло вот такое решение: ...

2
gustav21
20 / 20 / 4
Регистрация: 23.10.2009
Сообщений: 139
14.02.2012, 10:51 #2
Алгоритм навскидку:
Начиная с первого элемента списка:
1) Запомнить указатель на (текущий + 2) элемент списка
2) Освободить память от следующего элемента списка (если используется malloc, то освобождать при помощи free)
3) Присвоить свойству Next текущего элемента запомненное значение (пункт 1)
4) Перейти на следующий элемент
И так до конца списка
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
14.02.2012, 16:11 #3
Цитата Сообщение от moscowprogramer Посмотреть сообщение
удалить из списка элементы с чётными номерами
В смысле - второй, четвёртый, шестой... или те, у которых значения чётные?

Цитата Сообщение от moscowprogramer Посмотреть сообщение
вот наработка
Глобальные переменные - плохой стиль и прямой путь к ошибкам. К примеру:
Цитата Сообщение от moscowprogramer Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
/*...*/            
Element *Head = NULL,  
        *Curr = NULL;   
/*...*/
void Print(void)
{
   while(Head){
     Curr=Head;
     Head=Head->Next;
  printf("%d ",Curr->Val);
   
   }
   
}
Если и получится создать какой-никакой список (к тому, как там у Вас узлы добавляются, не присматривался, но думаю - и там не комильфо), один раз его вывели, а дальше Head на что указывать будет?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2012, 16:11
Привет! Вот еще темы с решениями:

Удалить из списка все элементы, большие среднего арифметического
Здравствуйте. Задача такая:Написать программу по созданию, просмотру,...

Удалить элементы с одинаковыми соседями из двунаправленного циклического списка
удалить элементы с одинаковыми соседями. 1 и последний считать соседями. ...

Удалить элементы списка, следующие за элементом, определенным пользователем
Добрый Вечер! Прошу помощи по описанной ниже задачи. Требуется дописать...

В списке нужно найти и удалить все четные элементы списка
Нужно написать программу, которая из последовательности целых чисел (длинна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru