Выполнить сортировку уже созданного списка - C (СИ)

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

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

Необходимо выполнить сортировку уже созданного списка.Я видно напортачила с указателями, так как, честно признаюсь, "плаваю" в них. Программа просто не хочет идти дальше одной строки. Есть список:
Листинг программы
  1. {char name [15];
  2. int god;//год, по этому полю будет выполнятся сортировка по возрастанию
  3. struct spis *v1;//предыд элемент
  4. struct spis *v2;//послед элемент
  5. };
  6. void swap (struct spis *);
  7. struct spis * head, * tail;//указатели на голову и хвост
Программа доходит до строки
Листинг программы
  1. {while (a->god>b->god);
и дальше ничего не делает. Вот код функции сортировки по возрастанию:
Листинг программы
  1. void swap (struct spis *p)
  2. {
  3. struct spis *a=NULL;
  4. struct spis *b=NULL;
  5. a=p;
  6. b=p->v2;
  7. if (a==b) return;
  8. if (b!=tail)
  9. [COLOR="Red"]{while (a->god>b->god); [/COLOR]// здесь виснет и все...
  10. {if (a==head)
  11. {b->v1=NULL;
  12. b->v2=a;
  13. a->v1=b;
  14. b=head;
  15. }
  16. else if (a==tail)
  17. {b->v1=tail;
  18. b->v2=NULL;
  19. a->v2=b;
  20. tail=b;
  21. }
  22. else
  23. {b->v1=a->v1;
  24. b->v2=a;
  25. a->v1->v2=b;
  26. a->v1=b;
  27. }
  28. a=a->v2;
  29. }
  30. }
  31. else if ((a==head)&&(b==tail))
  32. {b->v1=NULL;
  33. b->v2=a;
  34. a->v1=b;
  35. a->v2=NULL;
  36. b=head;
  37. a=tail;
  38. }
  39. else if (b==tail)
  40. {a->v1=tail;
  41. a->v2=NULL;
  42. b->v2=a;
  43. tail=a;
  44. }
  45. printf("\n ‘Отсортированный список\n");
  46. }
Думаю напортачила в указателях, в наименовании функции.... Хотела объявить переменные в функции: а - соответствует текущему элементу структуры, b - последующему, видно не получилось, не понял меня компилятор .

Решение задачи: «Выполнить сортировку уже созданного списка»

textual
Листинг программы
  1. /* Этот стиль практически не используется, но всё же его описание мне встречалось.
  2. Напоминает твой.
  3. В любом случае, его не стоит использовать, поскольку легко можно получиться, что визуально структура кода будет отличаться от реальной - тут сложно добавлять новые операторы в блоки и сложно искать ошибки. */
  4. void doit(int x)
  5. {
  6.   if(x>123)
  7.     {dosmth1();
  8.     dosmth2();
  9.     dosmth3();}
  10.   else
  11.     {dosmth4();
  12.     dosmth5();
  13.     dosmth6();}
  14. }

Объяснение кода листинга программы

В данном коде выполняется условная операция с использованием оператора if. Если значение переменной x больше 123, то выполняются функции dosmth1(), dosmth2() и dosmth3(). В противном случае, когда значение переменной x меньше или равно 123, выполняются функции dosmth4(), dosmth5() и dosmth6(). Предполагается, что эти функции уже определены в другом месте программы. Стили кодирования могут отличаться в зависимости от предпочтений программиста, но в данном случае использован стиль, который редко используется и который может вызвать сложности при добавлении новых операторов или поиске ошибок.

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


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

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

11   голосов , оценка 4.091 из 5

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

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

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