IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Нужна помощь с очередями, Реализация очереди на базе массива и динам.структур
Черный Менестрель
сообщение 25.10.2009 17:31
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Товарищи, очень нужна ваша помощь!

Необходимо реализовать очередь 2мя способами: на базе массива и на базе динамических структур данных (да-да, массив не труЪ, однако что поделать, такое задание выдали=( ). В каждом случае необходимо реализовать следующие операции:

1. Включить элемент в очередь
2. Исключить элемент из очереди
3. Найти в очереди элемент с заданным значением
4. Соединить 2 очереди в одну
5. Отсортировать очередь

Сказать по правде я в линейных списках нихрена не понимаю, поэтому если кто возьмется помочь, пожалуйста, комментарии в коде оставьте, если не трудно

ЗЫ: в теме "Все о динамических структурах данных" был, модуль качал.

Заранее спасибо всем, кто откликнется!


--------------------
Когда сойдешь с ума в последний раз в апреле,
И когда выпадет карта,
Когда выпадет жребий,
И первый из нас уйдет по тоннелю
Good bye
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 26.10.2009 5:23
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Черный Менестрель @ 25.10.2009 17:31) *
(да-да, массив не труЪ,
Я долго старался понять, но так и не врубился - что тут зашифровано?.. blink.gif "не трудно"?

Если честно, мне совсем не нравится задание. Отсортировать очередь?.. на фига?? Это классно: отстоял полчаса, подходишь к прилавку, бдруг - бац! приходит кто-то умный и сортирует всех по росту - и я снова в конце? "Зачем?" - спрашиваю. "Because I can!" - отвечает..

То же самое по поводу многих остальных пунктов (типа поиска). В реализации очереди должны быть ДВЕ операции: положить и вынуть. Все. Ну, дополнительно можно приделать запрос длины и еще что-то сервисное. Но для обработки информации (коей является сортировка и выборка) очередь НЕ ДОЛЖНА использоваться. Ботинок не следует использовать как миску для супа, хотя принципиально это и возможно.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Черный Менестрель
сообщение 26.10.2009 9:22
Сообщение #3





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Цитата(Lapp @ 26.10.2009 5:23) *

Я долго старался понять, но так и не врубился - что тут зашифровано?.. blink.gif "не трудно"?


Ну что за очередь в массиве? Для добавления/удаления элемента надо или постоянно держать массив максимальной длины в памяти (уже плохо), либо создавать новый, туда все переписывать, удалять старый. Ерунда какая-то

Цитата
сли честно, мне совсем не нравится задание. Отсортировать очередь?.. на фига?? Это классно: отстоял полчаса, подходишь к прилавку, бдруг - бац! приходит кто-то умный и сортирует всех по росту - и я снова в конце? "Зачем?" - спрашиваю. "Because I can!" - отвечает..


А насчет задания - вот такая вот бредовая лаба у нас. Причем без какой-либо дополнительной инфы. Листок в зубы и делайте как хотите =(


--------------------
Когда сойдешь с ума в последний раз в апреле,
И когда выпадет карта,
Когда выпадет жребий,
И первый из нас уйдет по тоннелю
Good bye
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.10.2009 9:32
Сообщение #4


Гость






Цитата
Листок в зубы и делайте как хотите =(
Ну, так делай... Ты ж говорил, что
Цитата
в теме "Все о динамических структурах данных" был, модуль качал.
? Неужели не заметил там же мой пост о сортировке очереди, реализованной динамическим списком? Так одна часть задания у тебя уже должна быть готова полностью: та, что с дин. списком. А там уже (по аналогии) и с массивами доделать - раз плюнуть. Ты хоть начни что-то делать, покажи, что пытаешься, а то смахивает на "сделайте мне задание, а я пойду, сдам и еще семестр делать ничего не буду"...
 К началу страницы 
+ Ответить 
andriano
сообщение 26.10.2009 10:04
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Черный Менестрель @ 26.10.2009 9:22) *

Ну что за очередь в массиве? Для добавления/удаления элемента надо или постоянно держать массив максимальной длины в памяти (уже плохо), либо создавать новый, туда все переписывать, удалять старый. Ерунда какая-то
Не скажи.
Стандартный метод организации очереди - кольцевой буфер.
Имеет целый ряд достоинств: бысто, не нужно каждый раз дергать менеджер памяти, прозрачно, просто...
Есть одно принципиальное ограничение - фиксированная иаксимальная длина. Но это именно ограничение, а не недостаток, т.к. в большинстве практических случаев такое ораничение нужно вводить искусственно, если его нет. Например, в DOS длина очереди в буфере клавиатуры равнялась 16 введенным символам. И этого вполне хватало. Более того, это было полезно: исчерпание буфера могло происходить только в случае, если прикладная программа вовремя не опустошала буфер, а это обычно происходило лишь в случае каких-либо проблем. В этом случае вполне естественным было как можно раньше информировать пользователя об имеющихся проблемах, а не давать ему возможности вводить килобайты текста, если все равно этот текст в дальнейшем будет потерян.

Кстати, на баже массивов вполне успешно и рационально формируются даже такие принципиально динамические структуры как списки.
Так что массив - вещь универсальная.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Черный Менестрель
сообщение 26.10.2009 18:11
Сообщение #6





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Цитата
Ты хоть начни что-то делать, покажи, что пытаешься, а то смахивает на "сделайте мне задание, а я пойду, сдам и еще семестр делать ничего не буду"...

Так я начал =) Перерыл кучу инфы, нашел еще модуль для очереди, в приложении он, однако сортировки там нет.

Цитата
Неужели не заметил там же мой пост о сортировке очереди, реализованной динамическим списком?

Вот за это прошу прощения, действительно просмотрел, сегодня утром когда пересматривал сохраненную информацию обнаружил этот пост.

С массивами я поковыряюсь, благо в них более-менее понимаю, однако с динамическими еще остались загвоздки. Вообще, если честно, я ни черта не понимаю в этих указателях и тд, потому хотелось бы спросить, во-первых по сортировке. В целом я понимаю, что происходит, но некоторые действия мне неясны, в частности
Код
empty := not assigned(head)
   . . . . .. . . . .
while assigned(p) do


Для чего в этих строках служит assigned?


Вернусь к найденному мной модулю (в приложении), очередь там, как и в вашем примере сортировки, как объект рассматривается. Правда я не понимаю смысла некоторых операций, в частности
function Begining : E;
function IsNotEmpty : boolean; (для чего ее добавили, если рядом function IsEmpty : boolean; ?)

function OutBegining : E;
Procedure DelBegining;
Эти функция и процедура судя по результатам одно и то же выполняют, или я не прав.


ЗЫ: а про объединение очередей вообще никакой информации найти не удалось ((





Прикрепленные файлы
Прикрепленный файл  QueeLINT.rar ( 1.95 килобайт ) Кол-во скачиваний: 131


--------------------
Когда сойдешь с ума в последний раз в апреле,
И когда выпадет карта,
Когда выпадет жребий,
И первый из нас уйдет по тоннелю
Good bye
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 27.10.2009 5:22
Сообщение #7


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Черный Менестрель @ 26.10.2009 18:11) *
некоторые действия мне неясны, в частности
 empty := not assigned(head)
. . . . .. . . . .
while assigned(p) do
Для чего в этих строках служит assigned?
Проверка, была ли выделена память под переменные head и p соответственно.

Цитата(Черный Менестрель @ 26.10.2009 18:11) *
function Begining : E;
function IsNotEmpty : boolean; (для чего ее добавили, если рядом function IsEmpty : boolean; ?)
Либо автор не знаком с операцией NOT, либо крепко ее невзлюбил..

Цитата(Черный Менестрель @ 26.10.2009 18:11) *
function OutBegining : E;
Procedure DelBegining;
Эти функция и процедура судя по результатам одно и то же выполняют, или я не прав.
Подобное в некоторых случаях оправдано. Особенно, если нельзя вызвать функцию как процедуру (без присваивания). Но в целом, согласен, лишнее. Вообще, я бы не стал рекомендовать этот найденный тобой модуль в качестве примера для подражания..

Цитата(Черный Менестрель @ 26.10.2009 18:11) *
ЗЫ: а про объединение очередей вообще никакой информации найти не удалось ((
А голова на что? Ты правда надеешься всегда все "находить"?..

Пожалуйста, используй тэг code=pas для паскалевских программ


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.06.2025 12:14
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"