Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2011, 20:59   #1
Jigarkhwar
Пользователь
 
Регистрация: 07.12.2010
Сообщений: 15
По умолчанию Сортировка очереди. [c++]

Общая задача. Имеется самая простая обыкновенная очередь(с одной головой), и её нужно с помощью heapSort отсортировать. У меня имеется код АТД очередь но суть вопроса пока что не в самом коде, а в логике. Чтобы отсортировать очередь нужно просеять элемент через неё. В общем вопрос как просеять элемент через очередь. Грубо говоря составить в этой очереди бинарное дерево. Чтобы отсеять сомнения - я прекрасно понимаю что внутри самой очереди это сделать нельзя. Следовательно нужны другие методы, там перестановки в несколько очередей как внешние карманы или работа с адресами. есть предложения какие ?

Последний раз редактировалось Jigarkhwar; 27.09.2011 в 21:03.
Jigarkhwar вне форума Ответить с цитированием
Старый 27.09.2011, 21:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
я прекрасно понимаю что внутри самой очереди это сделать нельзя.
Тоесть? Очередь в твоем понимании список? Тогда сортировка пузырьком (как и любай другая) подойдет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.09.2011, 21:24   #3
Jigarkhwar
Пользователь
 
Регистрация: 07.12.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Тоесть? Очередь в твоем понимании список? Тогда сортировка пузырьком (как и любай другая) подойдет.
Очередь - линейный связанный список с принципом FIFO. А по поводу сортировки - нужно именно пирамидальной примерно за время O(n*log n)
Jigarkhwar вне форума Ответить с цитированием
Старый 27.09.2011, 21:49   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
нужно именно пирамидальной
А-а-а если задача так поставлена...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.09.2011, 23:02   #5
Jigarkhwar
Пользователь
 
Регистрация: 07.12.2010
Сообщений: 15
По умолчанию

ну впринципе какая разница какая сортировка. Проблема заключается в том, как вытащить данные и обработать их грубо говоря как массивные. (но очередь построена на указателях). Допустим у нас 10 элементов. как вытащить i-ый элемент 2i и 2i+1 и куда деть остальные данные. Потом если нужно поменять местами их и составить последовательность с этими же данным и послать её опять в очередь.
1) 2 3 5 1 10 6 9 4 7 8
2) выбираем элементы 3 5 1
3) 3(родитель) меняем местами с большим сыном - 5
4) выстраиваем новую последовательность 2 5 3 1 10 6 9 4 7 8
что то вроде этого

Последний раз редактировалось Jigarkhwar; 27.09.2011 в 23:09.
Jigarkhwar вне форума Ответить с цитированием
Старый 27.09.2011, 23:14   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как вытащить данные
А как ты их вытаскиваешь? У тебя же есть голова - от нее и иди в цикле до конца очереди.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.09.2011, 23:32   #7
Jigarkhwar
Пользователь
 
Регистрация: 07.12.2010
Сообщений: 15
По умолчанию

а по какому параметру цикл то запускать ? в масивах по индексам а в указателях как ? или добавить инкремент при добавлении в очередь ?
Jigarkhwar вне форума Ответить с цитированием
Старый 28.09.2011, 15:11   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а по какому параметру цикл то запускать ?
А ты посмотри примеры вывода на экран списков. Цикл начинается с указателя на голову. Потом этому указателю присваивается следующий, значение которого содержится в элементе.
Поройся по форуму в поисках тем про динамические списки.
Вот например здесь: http://www.programmersforum.ru/showt...279#post713279
Пример проходя по списку в виде функции printlist()

P.S. Я надеюсь что под словом "очередь " имелась ввиду списочная структура а не просто динмассив?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.09.2011, 23:12   #9
Jigarkhwar
Пользователь
 
Регистрация: 07.12.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
P.S. Я надеюсь что под словом "очередь " имелась ввиду списочная структура а не просто динмассив?
Да, Верно.
Jigarkhwar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очереди Ame Помощь студентам 0 30.06.2011 22:15
Очереди в С++ Radzhab Общие вопросы C/C++ 4 31.03.2011 00:02
Очереди Lucefer2007 Общие вопросы C/C++ 1 13.03.2011 16:58
Очереди anuta90 Помощь студентам 3 09.10.2010 22:07
очереди Nostalgia Помощь студентам 2 22.03.2010 17:48