Дана задача. Разработать двусвязный список, функцию добавления элемента в начало и ф-ию удаления любого элемента из списка. С удалением, как я понял, нужно рассмотреть 3 случая: элемент в начале, в конце и где-то в списке). Для демонстрации всех 3 случаев решил сделать возможность вводить самому нужную строку для удаления.
| Код |
#include <stdio.h> #include <stdlib.h> struct group { int nacelenie; char punkt[25]; struct group * next; struct group * prev; };
struct group *a; struct group *b; struct group *c; struct group *head = NULL; struct group *tmp; int i, tmp1=0; char tmp2[20];
struct group * insertHead(struct group* head_ptr,struct group* tmp_ptr){ if (head_ptr==NULL && tmp_ptr!=NULL) return tmp_ptr; head_ptr->prev=tmp_ptr; tmp_ptr->next=head_ptr; return tmp_ptr; }
struct group * del (struct group * str) { if (str->prev==NULL) { head=str->next; str->next=NULL; head->prev=NULL; free (str); } else { if (str->next==NULL) { c=str->prev; str->prev=NULL; c->next=NULL; free (str); } else { a=str->prev; b=str->next; b->prev=str->prev; a->next=str->next; str->next=str->prev=NULL; free (str); } } return str; }
int main() { for(i=0;i<5; i++){ tmp = (struct group*) malloc(sizeof(struct group)); scanf("%d %s", &tmp->nacelenie, tmp->punkt); tmp->next=tmp->prev=NULL; head = insertHead(head,tmp); } tmp=head; printf("\n");
while (tmp!=NULL){ printf("%d %s\n", tmp->nacelenie, tmp->punkt); tmp=tmp->next; } tmp=head;
printf ("\n");
scanf ("%d %s", &tmp1, &tmp2); while (tmp!=NULL) { if (tmp1==tmp->nacelenie && tmp2==tmp->punkt) { break; } tmp=tmp->next; } del (tmp);
tmp=head; printf("\n"); printf("\n"); while (tmp!=NULL){ printf("%d %s\n", tmp->nacelenie, tmp->punkt); tmp=tmp->next; } return 0; }
|
Программа вываливается с ошибкой. Проблема где-то тут:
| Код | scanf ("%d %s", &tmp1, &tmp2); while (tmp!=NULL) { if (tmp1==tmp->nacelenie && tmp2==tmp->punkt) { break; } tmp=tmp->next; } del (tmp);
|
ибо сама функция работает нормально. Помогите разобраться  |