Выполнить сортировку уже созданного списка - C (СИ)
Формулировка задачи:
Необходимо выполнить сортировку уже созданного списка.Я видно напортачила с указателями, так как, честно признаюсь, "плаваю" в них. Программа просто не хочет идти дальше одной строки.
Есть список:
Программа доходит до строки
и дальше ничего не делает.
Вот код функции сортировки по возрастанию:
Думаю напортачила в указателях, в наименовании функции....
Хотела объявить переменные в функции: а - соответствует текущему элементу структуры, b - последующему, видно не получилось, не понял меня компилятор .
{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");
}Решение задачи: «Выполнить сортировку уже созданного списка»
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(). Предполагается, что эти функции уже определены в другом месте программы. Стили кодирования могут отличаться в зависимости от предпочтений программиста, но в данном случае использован стиль, который редко используется и который может вызвать сложности при добавлении новых операторов или поиске ошибок.