Используя функцию add,добавляю данные,и после нее появляется пустая "строка" , когда использую функцию list
| Код | #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> struct spis {char data[20]; struct spis *v1; struct spis *v2; }; void create(void); //создание списка void list(spis *); //просмотр списка void del(void); //отсеивание ненужных данных void add(void); //добавление списка struct spis *head,*tail; main() { int nom; while(1) { printf("\n 0.Заполнение списка с начала \n"); printf(" 1. Вывод списка с начала \n"); printf(" 2. Вывод списка с конца \n"); printf(" 3. Удаление строки \n"); printf(" 4. Дополнить список\n"); printf(" 5. Выход \n"); scanf("%d",&nom); switch(nom) { case 0: create(); break; case 1: list(head);break; case 2: list(tail); break; case 3: del();break; case 4: add();break; case 5:return 0; default:printf("Неверный режимм"); } } getch(); } void create(void) {spis *p,*pred; pred=NULL; do { p=(spis *)malloc(sizeof(spis)); printf(":Данные "); gets(p->data); p->v1=pred; if (pred != NULL) pred->v2=p; else head=p; pred=p; puts(" Закончить - <esc>"); } while (getch()!=27); tail=p; tail->v2=NULL; } void add(void) { do{ spis *p,*pn; //clrscr(); pn=(spis *)malloc(sizeof(spis)); / printf("Введите данные: "); gets(pn->data); p=tail; pn->v1=tail; pn->v2=NULL; p->v2=pn; tail=pn; puts(" Закончить - <esc>"); }while(getch()!=27); } void list(spis *p) {if (p==head) while (p != NULL) {puts(p->data); p=p->v2; } else if (p==tail) while ( p!= NULL) { printf("\n%s",p->data); p=p->v1; } else puts("Неверный адрес "); getch(); } void del(void) {spis *p,*temp;char f[20]; char *ach; p=head; while (p!=NULL) {ach=strrchr(p->data,'2'); puts(ach); if (ach!=NULL) { if (p==head) {head=p->v2; head->v1=NULL; free(p); p=head; } else if (p==tail) {tail=p->v1; tail->v2=NULL; free(p); p=tail; } else {p->v2->v1=p->v1; p->v1->v2=p->v2; temp=p; p=p->v2; free(temp); } } else p=p->v2; } getch(); } |
Модератор: не забываем пользоваться кнопочкой "Код" |