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

Не работают функции для списка - вставить по индексу и удалить по индексу

25.05.2015, 23:15. Просмотров 376. Ответов 0
Метки нет (Все метки)

Доброго времени суток. Создал список не корректно работают некоторые функции, такие как вставить по индексу и удалить по индексу. Подскажите пожалуйста где ошибки в коде :

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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <malloc.h>
#include <conio.h>
 
typedef struct node{
    int data;
    struct node *next;
}node;
 
void vstav_n(node **head, int inf) //vstavit v na4alo
{ node *tmp;
  tmp = (node*)malloc(sizeof(node));
  tmp->data = inf;
  tmp->next = (*head);
  (*head) = tmp;
}
 
node* getlast(node *head)//polu4nie poslednego elementa spiska
{ if(head == NULL)
   return NULL;
  
  while(head->next)
   head = head->next;
   
  return head;
}
 
void vstav_k(node *head, int inf)//zanesenie v konec spiska
{ node *last = getlast(head);
  node *tmp = (node*)malloc(sizeof(node));
  tmp->data = inf;
  tmp->next = NULL;
  last->next = tmp;
}
 
void vivvod(node *head) //vivod spiska na ekran
{while(head)
  {printf(" %d", head->data);
   head = head->next;}
 printf("\n");
}
 
void insert(node *head, int n, int inf)//zanesenie po indexu
{int i=0;
 node *tmp = NULL;
 
 while(i<n && head->next)
 {head = head->next;
  i++;}
 
 tmp=(node*)malloc(sizeof(node));
 tmp->data = inf;
 
 if(head->next) tmp->next = head->next;
 else tmp->next = NULL;
 
 head->next = tmp;
}
 
int delN(node **head)//udalenie 1ogo elementa
{
 (*head) = (*head)->next;
}
 
int delK(node **head)//udalenie poslednigo spiska
{node *cur = NULL;//ninewniy
 node *pred = NULL;//prediduwiy
 
 if(!head) return 0;
 if(!(*head)) return 0;
 
 cur = *head;
 while(cur->next)
 {pred = cur;
  cur = cur->next;
 }
 
 if(pred == NULL)
 {free(*head);
  *head = NULL;}
 else
 {free(cur->next);
  pred->next = NULL;
 }
}
 
node* poisk(node *head, int n)//poisk elementa.
{int counter = 0;
 while(counter < n && head)
 {head = head->next;
  counter++;
 }
 return head;
}
 
int del_pos(node **head, int n)//udalenie po pozicii
{if(n == NULL) return delN(head);
 else
 {node *prev = poisk(*head, n);
  node *elm = prev->next;
  prev->next = elm->next; 
 }
}
 
 
int main()
{int exit = 1, op, inf, n;
 node *head = NULL;
 
 printf("\nOperacii zanesenie v na4alo spiska = 1, zanesenie v konec spiska = 2,");
 printf(" vivvod spiska = 3, Zanesenie po indexu = 4, zaverwenie programmi = 0");
 printf(" udalenie iz na4ala spiska = 5, udalenie iz konca spiska = 6, udolenie s pozicii = 7");
 
do
{printf("\nvvedite operaciyu : ");
 scanf("%d", &op); 
 
 switch (op)
 {case 1 : printf("\nVvedite cislo dlia zanesenia v na4alo spiska : ");
           scanf("%d", &inf);
           vstav_n(&head, inf);
           break;
 
  case 2 : printf("\nVvedite cislo dlia zanesenia v konec spiska : ");
           scanf("%d", &inf);
           vstav_k(head, inf);
           break;
 
  case 3 : printf("\nspisok : ");
           vivvod(head);
           break;
  
  case 4 : printf("\nVvedite poziciyu : ");  
           scanf("%d", &n);
           printf("\nVvedite cislo dlia zaneseniia : ");
           scanf("%d", &inf);
           insert(head, n, inf);
           break;
 
  case 5 : delN(&head);
           break;
  
  case 6 : delK(&head);
           break;
 
  case 7 : printf("\nVvedite posiciyu elementa dlia udalenia : ");
           scanf("%d", &n);
           del_pos(&head, n);
           break;
 
  case 0 : exit = 0;
           break;
 }
 
}while(exit);
 
 getchar();
 getchar();
 return 0;
}
Еще есть просьба если кому не сложно не могу придумать как реализовать функцию по нахождению и удалению чисел в середине списка.
К примеру введен список 1 2 3 4 5 нужно удалить 3 а если введен список 1 2 3 4 5 6 нужно удалить 3 и 4.
За ранее премного благодарен за помощь.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2015, 23:15
Ответы с готовыми решениями:

Вставить после каждого четного элемента сумму его с ближайшим (по индексу) нечетным
Дан массив А. Вставить после каждого четного элемента сумму его с ближайшим (по индексу) нечетным...

Расчет по индексу массы тела
Помогите пожалуйста! Начал делать программу по расчету по индексу массы тела, в основе лежит...

Заменить четные по значению (не по индексу) элементы на 0
Здравствуйте, нужно написать код. Задача: Заменить четные по значению (не по индексу) элементы на...

Как получить адрес указателя по индексу массива?
Нужно в BWImageArray сохранить адреса каждого n-ого елемента из массива BWImageArrayLine, ниже код,...

Найти элементы массива, сумма цифр которых кратна индексу
Найти индексы элементов массива и сами элементы, сумма цифр которых кратна индексу. ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2015, 23:15

[Двусвязные списки] Добавление по индексу. Взятие адреса по индексу
По заданию требуется: 1) Создать функцию void Insert(Person&amp; person, int index), помещающую...

Используя перегруженные функции и шаблон функции удалить из массива элемент по индексу
Стоит следующая задача: Используя перегруженные функции и шаблон функции удалить из массива...

Реализовать методы add и remove по индексу для самодельного списка
Есть самописный список, нужно реализовать функции add(value, index) и remove(index). Добавление и...


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

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

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