Удаление элемента в списке - C (СИ) (79393)
Формулировка задачи:
Проблема: нужно удалить элемент, но я не понимаю как связать то, что я введу для удаления с функцией pop();
Т.е. если бы у меня были данные символьные, а не строки, я бы написал так:
ВОТ ВЕСТЬ КОД:
void pop(char value); ... p->aa=value; ... case 'D': printf("input for delete:"); value=getch(); pop(value);
struct list{ char aa[22]; list *next; struct list2 *p2,*cur2,*prev2,*top2; }*p,*top,*prev,*cur; struct list2{ char xx[22]; list2 *next; }; void push() { top=0; int n,i,k=0; printf("\n size:\n"); scanf("%i",&n); printf("\n Input:\n"); for(;n;n--) { p=new list; scanf("%s",&p->aa); p->next=NULL; while(cur && p->aa >cur->aa) { prev=cur; cur=cur->next; } if(prev==NULL) { p->next=top; top=p; } else { p->next=cur; prev->next=p; } } p=top; while(p) { printf("%s",p->aa); printf("\n size (inside):\n"); scanf("%i",&i); printf("\n input: ( push into inside\n"); for(;i;i--) { p->p2=new list2; scanf("%s",&p->p2->xx); if(!k){ p->top2=NULL; p->cur2=NULL; p->prev2=NULL; k++; } p->p2->next=NULL; while(p->cur2 && p->p2->xx > p->cur2->xx) { p->prev2=p->cur2; p->cur2=p->cur2->next; } if(p->prev2==NULL) { p->p2->next=p->top2; p->top2=p->p2; } else { p->p2->next=p->cur2; p->prev2=new list2; p->prev2->next=p->p2; } } k=0; p=p->next; } } void pop() { prev=top; cur=top->next; if(p->aa==top->aa) { p=top; top=top->next; free (p); } else { while( cur!=NULL && p->aa!=cur->aa) { prev=cur; cur=cur->next; } if(cur!=NULL) { p=cur; prev->next=cur->next; free (p); } } } void show() { p=top; if(p==NULL) printf("\n list is empty\n"); while(p) { printf(" %s",p->aa); p->p2=p->top2; while(p->p2) { printf("\n %s\n",p->p2->xx); p->p2=p->p2->next; } p=p->next; } system("PAUSE"); } int main() { int done=false; char key; while(!done) { system("cls"); printf("\nA)dd\nD)elete\nQ)uit\nS)how\n"); key=getchar(); switch(toupper(key)) { case 'A': push(); break; case 'S': show(); break; case 'D': char value[44]; printf("\n input for del:\n"); gets(value); if(strcmp(value,p->aa)==0) pop(); break; case 'Q': done=true; break; } } return 0; }
Решение задачи: «Удаление элемента в списке»
textual
Листинг программы
struct node1 { char aa[22]; struct node1 *next; }; struct node2 { char bb[22]; struct node2 *next; };
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д