63 / 63 / 2
Регистрация: 10.03.2014
Сообщений: 73
1

Сортировка двунаправленного списка

26.04.2014, 21:57. Показов 960. Ответов 2
Метки нет (Все метки)

Помогите отсортировать составленный список по определенному полю, я пробовал методом пузырька, но не получается, просьба подсказать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void uploadFileRating(Film **first, Film **close){   
    Film *external = *first; //Внейшний на одно приращение
    Film *tmp; 
    Film *interior; //Внутренний, который будет пробегать по всему списку
    while (external->next)    
    {
        interior = external->next;
        while (interior)
        {
            if(external->rating < interior->rating){
                tmp = external->next->pred; 
                if (external->pred == 0){
                    *first = interior;
                }
                if (interior->next == 0){
                    *close = external;
                }
                    external->next = interior->next;
                    interior->next = external;
                    external->pred = interior;                   
                    interior->next->pred = external;
                    external = tmp;                  
        }
            interior = interior->next;
        }
       external = external->next;
    }     
}
Добавлено через 1 час 27 минут
Удалите тему, разобрался.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2014, 21:57
Ответы с готовыми решениями:

Сортировка двунаправленного списка
Посоветуйте пожалуйста адекватный метод сортировки двунаправленного списка. Я сопсно вычитал на...

Сортировка двунаправленного линейного списка по алгоритму Хоара
ПОМОГИТЕ СРОЧНО!!!! нужно отсортировать двунаправленный линейный список по алгоритму Хоара менять...

Получить указатель на элемент двунаправленного списка, добавить значение в начало списка и очистить его
Нужно создать двунаправленный список //вроде так, но не уверен struct Double_List {//структура...

Удаление из двунаправленного списка
Программа компилируется, добавляет элементы в список, но когда доходит до удаления вылетает. ...

2
Ev[G]eN
27.04.2014, 11:43
  #2
 Комментарий модератора 
Будьте добры, выложите Ваше решение.
Оно может кому-то пригодиться в дальнейшем.
Спасибо
0
63 / 63 / 2
Регистрация: 10.03.2014
Сообщений: 73
27.04.2014, 11:49  [ТС] 3
Без проблем:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void FileRating(Film **first, Film **close){    //функция сортировки списка по рейтингу фильмов
    Film *tmpExternal = *first; //"внешний" указатель - который будет параметром первого цикла
    Film *tmpExternalSave;  //сохраняем tmpExternal     
    Film *tmpInterior; //"внутренний" указатель - парамет вложенного цикла
    while (tmpExternal->next)     
    {
        tmpExternalSave = tmpExternal->next; //сохраняем следующий "внешний" указатель
        tmpInterior = tmpExternal->next; //"внутренний" указатель, т.е. с какого параметра начинается вложенный цикл
        while (tmpInterior)       
        {           
            if (tmpExternal->rating < tmpInterior->rating){  //сравнение поля рейтинг
                
                if(tmpExternal->pred == 0){   //если "взятая" структура первая в списке
                    *first = tmpExternal->next;                                    
                }
                else tmpExternal->pred->next = tmpExternal->next;
 
                if(tmpInterior->next == 0){   //если структура, после которой вставляется "взятая" структура, последняя в списке 
                    *close = tmpExternal;
                }
                else tmpInterior->next->pred = tmpExternal;           
                tmpExternal->next->pred = tmpExternal->pred;     
                tmpExternal->next = tmpInterior->next;     
                tmpInterior->next = tmpExternal;                          
                tmpExternal->pred = tmpInterior;
                tmpInterior = tmpExternal->next;   //берем след. структуру для сравнения
                } 
            else tmpInterior = tmpInterior->next;  //берем след. структуру для сравнения                        
            }
        tmpExternal = tmpExternalSave; //берем след. структуру, которая "пробежит" по списку        
     }
    uploadFileTxt(*first);  //отсортированный список выгружаем в файл
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2014, 11:49

Очередь из двунаправленного списка
Вот мой двусвязный список : struct Num { int number; bool ring; Num *next, *prev; };...

Реализация Двунаправленного списка
Ребят, что он хочет от меня, ошибка компиляции, понять не могу в чем проблема, у меня еще просто...

Шаблон двунаправленного списка
Добрый день! Пишу программу &quot;библиотека&quot;, которая включает в себя типы данных Книга и Читатель...

Swap для двунаправленного списка
Поменять просто значения узлов, не интересно. Я запутываюсь с ссылками. элементы могут быть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.