Сортировка односвязного списка - C (СИ) (73918)

Узнай цену своей работы

Формулировка задачи:

Добрый день. Проблема, не знаю, с чем связана, сортирует нормально, все работает, но иногда программа вылетает, а в других функциях постоянно вылетает.
Листинг программы
  1. void sortnumbermag()
  2. /*Сортировка по номеру магазина*/
  3. {
  4. struct magazin *first;
  5. struct magazin *last;
  6. char famzaved[20], adress[20];
  7. int nummag, numbermag;
  8. int i=0;
  9. while(1)
  10. {
  11. i=0;
  12. first=ptr;
  13. last=first->ptr_next;
  14. for(;last!=NULL;last=last->ptr_next, first=first->ptr_next){
  15. if(first->nummag > last->nummag) {
  16. strcpy(famzaved,first->famzaved);
  17. strcpy(first->famzaved,last->famzaved);
  18. strcpy(last->famzaved,famzaved);
  19. nummag = first->nummag;
  20. first->nummag=last->nummag;
  21. last->nummag=nummag;
  22. strcpy(adress,first->adress);
  23. strcpy(first->adress,last->adress);
  24. strcpy(last->adress,adress);
  25. numbermag = first->numbermag;
  26. first->numbermag=last->numbermag;
  27. last->numbermag=numbermag;
  28. i|=1;
  29. }
  30. }
  31. if(! i)
  32. break;
  33. };
  34. }
Может в указателях дело? Но сортирует нормально. Критует на этой команде(в других функциях, которые ее (sortnumbermag) вызывает) Функция, в которой происходит крах и пух программы:
Листинг программы
  1. void newelementssort()
  2. {
  3. ptr = (struct magazin*) malloc(sizeof(struct magazin));
  4. vvod();
  5. printf("\n\n");
  6. printf("\nВы ввели такие данные: \n");
  7. printf("Фамилия: %s\n Номер магазина: %d\n Адрес магазина: %s\n Номер телефона: %d\n",ptr->famzaved,ptr->nummag,ptr->adress,ptr->numbermag);
  8. ptr->ptr_next=NULL;
  9. int answer;
  10. do
  11. {
  12. printf_white();
  13. puts("Куда хотите записать данные?(1-В Начало списка;2-В Конец списка)");
  14. printf_normal();
  15. scanf("%d",&answer);
  16. if (answer==1)
  17. {
  18. addfirst();
  19. showthelist();
  20. sortnumbermag();
  21. showthelist();
  22. menu();
  23. }
  24. else if (answer==2)
  25. {
  26. addlast();
  27. showthelist();
  28. sortnumbermag();
  29. showthelist();
  30. menu();
  31. }
  32. }while(answer!=0);
  33. }
Функция addfirst:
Листинг программы
  1. ptr->ptr_next = head_ptr;
  2. head_ptr = ptr;
Функция addlast:
Листинг программы
  1. struct magazin *p = head_ptr;
  2. if (head_ptr == NULL)
  3. { // если список пуст,
  4. addfirst(); // вставляем первый элемент
  5. }
  6. else
  7. {
  8. while (p->ptr_next) p = p->ptr_next; // ищем последний елемент
  9. ptr->ptr_next = p->ptr_next; //(addafter)
  10. p->ptr_next = ptr;

Решение задачи: «Сортировка односвязного списка»

textual
Листинг программы
  1. last=first->ptr_next

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы