Двусвязные списки, приложение зависает после создания нескольких элементов - C (СИ)
Формулировка задачи:
После создания 6-7, а когда особо повезет - 8-го, элемента списка программа просто обязана зависнуть и я в упор не вижу, где ошибка
#include <stdio.h> #include <stdlib.h> struct Node { char NameUni[100]; int NumberStud; int NumberFac; struct Node *next, *prev; int key; }; typedef struct Node *PNode; void AddFirst(PNode *Head, PNode *Tail ,PNode NewNode) { NewNode->next = *Head; NewNode->prev = NULL; if ( *Head ) (*Head)->prev = NewNode; *Head = NewNode; if ( !*Tail ) *Tail = *Head; } PNode CreateNode () { PNode NewNode = (PNode)malloc(sizeof(PNode)); printf("\nВведите имя: \n"); scanf("%s",&NewNode->NameUni); printf("\nВведите количество студентов: \n"); scanf("%d",&NewNode->NumberStud); printf("\nВведите количество факультетов: \n"); scanf("%d",&NewNode->NumberFac); NewNode->next = NULL; NewNode->prev = NULL; return NewNode; } void AddLast(PNode *Head, PNode *Tail, PNode NewNode) { if (*Head == NULL) { AddFirst(Head, Tail, NewNode); return; } NewNode->prev =*Tail; NewNode->next = NULL; if ( *Tail ) (*Tail )->next = NewNode; *Tail = NewNode; } void list(PNode Head) { if(!Head) { printf("\nСписок пуст\n\n"); return; } PNode q = Head; int i=1; printf("|---|------|-----------------|----------------|---------------|\n"); printf("| № | Ключ | Название | Количество | Количество |\n"); printf("| | | Университета | Студентов | факультетов |\n"); printf("|---|------|-----------------|----------------|---------------|\n"); while (q!=NULL) { printf("|%3d", i++); printf("| "); printf("|%17s", q->NameUni); printf("|%16d", q->NumberStud); printf("|%15d|\n", q->NumberFac); printf("|---|------|-----------------|----------------|---------------|\n"); q=q->next; } printf("\n"); } int menu_select(void) { char s[100]; int c; printf("1. Создать запись \n"); printf("2. Добавить созданную запись в начало\n"); printf("3. Добавить созданную запись в конец\n"); printf("5. Вывод на экран содержимого списка\n"); printf("11. Выход\n"); do { printf("\nВведите номер нужного пункта: "); scanf("%s", &s); c = atoi(s); printf("\n"); } while(c<0 || c>11); return c; } int main(void){ PNode Head=NULL; PNode Tail=NULL; PNode NewNode=NULL; char choice; for(;;) { choice = menu_select(); switch(choice) { case 1: { NewNode=NULL; NewNode=CreateNode(); break; } case 2: { if(NewNode); AddFirst(&Head, &Tail, NewNode); break; } case 3: { if(NewNode); AddLast( &Head, &Tail, NewNode); break; } case 5: { list(Head); break; } case 11: exit(0); } } return 0; }
Решение задачи: «Двусвязные списки, приложение зависает после создания нескольких элементов»
textual
Листинг программы
case 2: { if(NewNode) { AddFirst(&Head, &Tail, NewNode); NewNode = NULL; } break; } case 3: { if(NewNode) { AddLast(&Head, &Tail, NewNode); NewNode = NULL; } break; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д