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

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

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

Необходимо выполнить сортировку уже созданного списка.Я видно напортачила с указателями, так как, честно признаюсь, "плаваю" в них. Программа просто не хочет идти дальше одной строки. Есть список:
{char name [15];
 int god;//год, по этому полю будет выполнятся сортировка по возрастанию
  struct spis *v1;//предыд элемент
  struct spis *v2;//послед элемент
 };
 void swap (struct spis *);
  struct spis * head, * tail;//указатели на голову и хвост
Программа доходит до строки
{while (a->god>b->god);
и дальше ничего не делает. Вот код функции сортировки по возрастанию:
void swap (struct spis *p)
{
 struct spis *a=NULL;
 struct spis *b=NULL;
 a=p;
 b=p->v2;
 if (a==b) return;
 if (b!=tail)
    [COLOR="Red"]{while (a->god>b->god);  [/COLOR]// здесь виснет и все...
      {if (a==head) 
    {b->v1=NULL;
     b->v2=a;
     a->v1=b;
     b=head;
    }
    else if (a==tail)
      {b->v1=tail;
      b->v2=NULL;
      a->v2=b;
      tail=b;
      }
      else
       {b->v1=a->v1;
        b->v2=a;
        a->v1->v2=b;
        a->v1=b;
       }
    a=a->v2;
    }
    }
    else if ((a==head)&&(b==tail))
     {b->v1=NULL;
     b->v2=a;
     a->v1=b;
     a->v2=NULL;
     b=head;
     a=tail;
     }
     else if (b==tail)
        {a->v1=tail;
        a->v2=NULL;
        b->v2=a;
        tail=a;
        }
   printf("\n ‘Отсортированный список\n");
   }
Думаю напортачила в указателях, в наименовании функции.... Хотела объявить переменные в функции: а - соответствует текущему элементу структуры, b - последующему, видно не получилось, не понял меня компилятор .

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

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

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

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

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


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

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

11   голосов , оценка 4.091 из 5
Похожие ответы