Сортировка односвязного списка - C (СИ) (78410)
Формулировка задачи:
Всем доброго времени суток!
Пишу курсавик по программированию, всё написал, осталась только одна функция уже голову всю сломал, никак не придумаю как же её реализовать , может вы чем сможите мне помочь, буду очень благодарен!
Нужно всего лишь отсортировать односвязный список:
Правда необходимо выполнить две сортировки:
1) По фамилии и имени(можно просто по фамилии) в алфавитном порядке.
2) По дате рождения.
Записей около 45...
struct account { int visual; int number; char name[9]; char surname[12]; char nickname[9]; char hometown[11]; char residence[12]; int birthday; int month; int year; char phone[12]; struct account *nextPtr; }
Решение задачи: «Сортировка односвязного списка»
textual
Листинг программы
void swap(struct account** plist, int pos_a, int pos_b) { int tmp; struct account* first = *plist; struct account* last = *plist; while( pos_a-- ) first = first->nextPtr; if(first == NULL) return; while( pos_b-- ) last = last->nextPtr; if(last == NULL) return; tmp = first->visual; first->visual = last->visual; last->visual = tmp; // здесь перестановку делай также как в сортировке // для каждого элемента структуры // дело в том что указатель это адрес а память физически выделяется для того чтобы // сменить данные под этот указатель нужно данные переместить в тот указатель с копировать // без манипуляции стека не обойтись } int length(const struct account* plist) { int len = 0; for(; plist != NULL ;len++, plist = plist->nextPtr); return len; } void main(void) { size = length(list); // получить размер списка // обменять последнее значение с серединным swap(&list, size - 1, size >> 1); }
Объяснение кода листинга программы
void swap(struct account** plist, int pos_a, int pos_b)
- функция для обмена элементов в односвязном списке.int length(const struct account* plist)
- функция для определения длины списка.void main(void)
- точка входа в программу. Вычисляется размер списка, и выполняется обмен элементов в списке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д