Очередь

advertisement
Очередь
DynQueue.doc
Стр.1 из 3
Очередь и дек.
Условие задачи (см также 5.2.2)
Создать С1 на основе С2-связногоного списка. Данные взять из файла. Создать еще две(а) С1,
в первую(ый) поместить данные удовлетворяющие условию, во вторую(ой) – не удовлетворяющие.
Вывести заданный и созданные С1. Для деков – все данные выводить дважды: в прямом и
обратном порядке. Предусмотреть возможность сохранения отчета (что было дано, и что
получилось) в текстовый файл.
Условие отбора и структуру информационной части смотрите в задаче 5.2.2
Варианты заданий
№
Нечетные
1,3,5,7,9,…
Четные
2,4,6,8,10,…
С1
С2
Дек
Дву-
Очередь
Одно-
Пример
Процедуры создания двух новых очередей
С созданием дополнительной очереди
var
ListDN, ListDK: PElem;
ball: byte;
chel: Tinfo;
begin
ListDN:=nil; ListDK:=nil;
FreeList(Res1Nachalo, Res1Konec);
FreeList(Res2Nachalo, Res2Konec);
Гречкина П.В. http://grechkinapv.narod.ru
DynQueue.doc
Очередь
ball:=UpDown2.Position;
while NachaloQueue<>nil do
begin
chel:=NachaloQueue^.info;
if chel.b > ball then
Dobavit(Res1Nachalo, Res1Konec, chel)
else
Dobavit(Res2Nachalo, Res2Konec, chel);
DelFirst(NachaloQueue, KonecQueue);
Dobavit(ListDN, ListDK, chel);
end;
NachaloQueue:=ListDN;
KonecQueue:=ListDK;
End;
Без создания дополнительной очереди – перекладываем
рассмотренный элемент в конец той же очереди
var
ListCN, ListCK: PElem;
ball: byte;
begin
ball:=UpDown2.Position;
ListCN:=NachaloQueue; ListCK:=KonecQueue;
if NachaloQueue<> nil then
repeat
if ListCN^.info.b > ball then
Dobavit(Res1Nachalo, Res1Konec, ListCN^.info)
else
Dobavit(Res2Nachalo, Res2Konec, ListCN^.info);
Perestavit(ListCN, ListCK);
until ListCN=NachaloQueue;
end;
procedure Perestavit(var ListCN, ListCK: PElem);
begin
if ListCN <> ListCK then
begin
ListCK^.next:=ListCN;
ListCN:=ListCN^.next;
ListCK:=ListCK^.next;
ListCK^.next:=nil;
end;
end;
Гречкина П.В. http://grechkinapv.narod.ru
Стр.2 из 3
DynQueue.doc
Очередь
Информационно-логические структуры:
Стр.3 из 3
Очередь
(FIFO - First In First Out)
Данные:
Адрес головы очереди,
Адрес хвоста очереди.
Допустимые операции:
Создать очередь из 1 элемента;
Добавить элемент в хвост очереди;
Удалить элемент из головы очереди;
Проверка на отсутствие элементов (пустая очередь);
Узнать/Взять значение информационной части первого элемента.
Для работы с элементами очереди используется перемещение элементов из головы в хвост, с
запоминанием адреса прежнего конца/начала очереди, чтобы не зациклиться, или использование
дополнительной очереди.
Дек (двухконечная очередь)
DEQ (Double Ended Queue)
Данные:
Адрес головы дека,
Адрес хвоста дека.
Допустимые операции:
Создать дек из 1 элемента;
Добавить элемент в голову/хвост дека;
Удалить элемент из головы/хвоста дека;
Проверка на отсутствие элементов.
Очистить дек (удалить все элементы)
Узнать/Взять значение информационной части первого или последнего элемента.
Для работы с элементами дека используется перемещение элементов из головы в хвост, с
запоминанием прежнего конца дека, чтобы не зациклиться; или при просмотр элементов с конца –
наоборот, перемещение элементов из хвоста в голову, с запоминанием прежней головы дека, чтобы
не зациклиться. А также можно использовать дополнительный дек.
Гречкина П.В. http://grechkinapv.narod.ru
Download