Сортировка односвязного списка - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д