Сортировка односвязного списка - C (СИ) (73918)
Формулировка задачи:
Добрый день. Проблема, не знаю, с чем связана, сортирует нормально, все работает, но иногда программа вылетает, а в других функциях постоянно вылетает.
Может в указателях дело?
Но сортирует нормально.
Критует на этой команде(в других функциях, которые ее (sortnumbermag) вызывает)
Функция, в которой происходит крах и пух программы:
Функция addfirst:
Функция addlast:
void sortnumbermag() /*Сортировка по номеру магазина*/ { struct magazin *first; struct magazin *last; char famzaved[20], adress[20]; int nummag, numbermag; int i=0; while(1) { i=0; first=ptr; last=first->ptr_next; for(;last!=NULL;last=last->ptr_next, first=first->ptr_next){ if(first->nummag > last->nummag) { strcpy(famzaved,first->famzaved); strcpy(first->famzaved,last->famzaved); strcpy(last->famzaved,famzaved); nummag = first->nummag; first->nummag=last->nummag; last->nummag=nummag; strcpy(adress,first->adress); strcpy(first->adress,last->adress); strcpy(last->adress,adress); numbermag = first->numbermag; first->numbermag=last->numbermag; last->numbermag=numbermag; i|=1; } } if(! i) break; }; }
void newelementssort() { ptr = (struct magazin*) malloc(sizeof(struct magazin)); vvod(); printf("\n\n"); printf("\nВы ввели такие данные: \n"); printf("Фамилия: %s\n Номер магазина: %d\n Адрес магазина: %s\n Номер телефона: %d\n",ptr->famzaved,ptr->nummag,ptr->adress,ptr->numbermag); ptr->ptr_next=NULL; int answer; do { printf_white(); puts("Куда хотите записать данные?(1-В Начало списка;2-В Конец списка)"); printf_normal(); scanf("%d",&answer); if (answer==1) { addfirst(); showthelist(); sortnumbermag(); showthelist(); menu(); } else if (answer==2) { addlast(); showthelist(); sortnumbermag(); showthelist(); menu(); } }while(answer!=0); }
ptr->ptr_next = head_ptr; head_ptr = ptr;
struct magazin *p = head_ptr; if (head_ptr == NULL) { // если список пуст, addfirst(); // вставляем первый элемент } else { while (p->ptr_next) p = p->ptr_next; // ищем последний елемент ptr->ptr_next = p->ptr_next; //(addafter) p->ptr_next = ptr;
Решение задачи: «Сортировка односвязного списка»
textual
Листинг программы
last=first->ptr_next
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д