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

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

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

Всем доброго времени суток! Пишу курсавик по программированию, всё написал, осталась только одна функция уже голову всю сломал, никак не придумаю как же её реализовать , может вы чем сможите мне помочь, буду очень благодарен! Нужно всего лишь отсортировать односвязный список:
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;
   }
Правда необходимо выполнить две сортировки: 1) По фамилии и имени(можно просто по фамилии) в алфавитном порядке. 2) По дате рождения. Записей около 45...

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

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);
 
}

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

  1. void swap(struct account** plist, int pos_a, int pos_b) - функция для обмена элементов в односвязном списке.
  2. int length(const struct account* plist) - функция для определения длины списка.
  3. void main(void) - точка входа в программу. Вычисляется размер списка, и выполняется обмен элементов в списке.

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


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

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

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