КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
О ч е р е д и
Очередью называется динамическая структура данных, добавление ком- поненты в которую производится в один конец, а выборка осуществляется с другого конца. Очередь работает по принципу:
FIFO (First-In, First-Out) -
поступивший первым, обслуживается первым. Для формирования очереди и работы с ней необходимо иметь три пере- менные типа указатель, первая из которых определяет начало очереди, вторая - конец очереди, третья - вспомогательная. Описание компоненты очереди и переменных типа указатель дадим сле- дующим образом:
type PComp=^Comp; Comp=record D:T; pNext:PComp end; var pBegin, pEnd, pAux: PComp;
где pBegin - указатель начала очереди, pEnd - указатель конца очере- ди, pAux - вспомогательный указатель. Тип Т определяет тип данных компоненты очереди. Начальное формирование очереди выполняется следующими операторами:
г=====¬ г=====¬ г=====¬ New(pBegin); ¦ *--¦---¬ ¦ ¦ ¦ ¦ L=====- ¦ ¦=====¦ L=====- pBegin L-->¦ ¦ pEnd L=====-
г=====¬ г=====¬ г=====¬ pBegin^.pNext:=NIL; ¦ *--¦---¬ ¦ ¦ ¦ ¦ L=====- ¦ ¦=====¦ L=====- pBegin L-->¦ NIL ¦ pEnd L=====-
г=====¬ г=====¬ г=====¬ pBegin^.D:=D1; ¦ *--¦---¬ ¦ D1 ¦ ¦ ¦ L=====- ¦ ¦=====¦ L=====- pBegin L-->¦ NIL ¦ pEnd L=====-
г=====¬ г=====¬ г=====¬ pEnd:=pBegin; ¦ *--¦---¬ ¦ D1 ¦ ----¦--* ¦ L=====- ¦ ¦=====¦ ¦ L=====- pBegin L-->¦ NIL ¦<--- pEnd L=====-
Добавление компоненты в очередь производится в конец очереди:
New(pAux);
г=====¬ г=====¬ г=====¬ г=====¬ г=====¬ ¦ *--¦---¬ ¦ D1 ¦ ----¦--* ¦ ¦ ¦ ----¦--* ¦ L=====- ¦ ¦=====¦ ¦ L=====- ¦=====¦ ¦ L=====- pBegin L-->¦ NIL ¦<--- pEnd ¦ ¦<--- pAux L=====- L=====-
pAux^.pNext:=NIL;
г=====¬ г=====¬ г=====¬ г=====¬ г=====¬ ¦ *--¦---¬ ¦ D1 ¦ ----¦--* ¦ ¦ ¦ ----¦--* ¦ L=====- ¦ ¦=====¦ ¦ L=====- ¦=====¦ ¦ L=====- pBegin L-->¦ NIL ¦<--- pEnd ¦ NIL ¦<--- pAux L=====- L=====- pBegin^.pNext:=pAux;
г=====¬ г=====¬ г=====¬ г=====¬ г=====¬ ¦ *--¦---¬ ¦ D1 ¦ ----¦--* ¦ ¦ ¦ ----¦--* ¦ L=====- ¦ ¦=====¦ ¦ L=====- ¦=====¦ ¦ L=====- pBegin L-->¦ * ¦<--- pEnd ¦ NIL ¦<--- pAux L=====- L=====- ¦ ^ ¦ ¦ L---------------------------- pEnd:=pAux;
г=====¬ г=====¬ г=====¬ г=====¬ г=====¬ ¦ *--¦---¬ ¦ D1 ¦ ¦ *--¦---¬ ¦ ¦ ----¦--* ¦ L=====- ¦ ¦=====¦ L=====- ¦ ¦=====¦ ¦ L=====- pBegin L-->¦ * ¦ pEnd L-->¦ NIL ¦<--- pAux L=====- L=====- ¦ ^ ¦ ¦ L----------------------------
pEnd^.D:=D2;
г=====¬ г=====¬ г=====¬ г=====¬ ¦ *--¦---¬ ¦ D1 ¦ ¦ D2 ¦ ----¦--* ¦ L=====- ¦ ¦=====¦ ¦=====¦ ¦ L=====- pBegin L-->¦ *--¦-------------------->¦ NIL ¦<--- pEnd L=====- L=====-
Добавление последующих компонент производится аналогично.
Выборка компоненты из очереди осуществляется из начала очереди, одновременно компонента исключается из очереди. Пусть в памяти ЭВМ сформирована очередь, состоящая из трех элементов:
г=====¬ г=====¬ г=====¬ г=====¬ г=====¬ ¦ *--¦---¬ ¦ D1 ¦ ¦ D2 ¦ ¦ D3 ¦ ----¦--* ¦ L=====- ¦ ¦=====¦ ¦=====¦ ¦=====¦ ¦ L=====- pBegin L-->¦ *--¦------>¦ *--¦------>¦ NIL ¦<--- pEnd L=====- L=====- L=====-
Выборка компоненты выполняется следующими операторами:
D1:=pBegin^.D; pBegin:=pBegin^.pNext;
г=====¬ г=====¬ г=====¬ г=====¬ г=====¬ ¦ *--¦---¬ ¦ D1 ¦ ¦ D2 ¦ ¦ D3 ¦ ----¦--* ¦ L=====- ¦ ¦=====¦ ¦=====¦ ¦=====¦ ¦ L=====- pBegin ¦ ¦ ¦ --->¦ *--¦------>¦ NIL ¦<--- pEnd ¦ L=====- ¦ L=====- L=====- ¦ ¦ L--------------
Пример. Составить программу, которая формирует очередь, добавляет в нее произвольное количество компонент, а затем читает все компонен- ты и выводит их на экран дисплея. В качестве данных взять строку сим- волов. Ввод данных - с клавиатуры дисплея, признак конца ввода - строка символов END.
Program QUEUE; uses Crt; type Alfa= String[10]; PComp= ^Comp; Comp= record sD:Alfa; pNext:PComp end; var pBegin, pEnd: PComp; sC: Alfa; Procedure CreateQueue(var pBegin,pEnd: PComp; var sC: Alfa); begin New(pBegin); pBegin^.pNext:=NIL; pBegin^.sD:=sC; pEnd:=pBegin end; Procedure AddQueue(var pEnd:PComp; var sC:Alfa); var pAux: PComp; begin New(pAux); pAux^.pNext:=NIL; pEnd^.pNext:=pAux; pEnd:=pAux; pEnd^.sD:=sC end; Procedure DelQueue(var pBegin: PComp; var sC: Alfa); begin sC:=pBegin^.sD; pBegin:=pBegin^.pNext end; begin Clrscr; writeln(' ВВЕДИ СТРОКУ '); readln(sC); CreateQueue(pBegin,pEnd,sC); repeat writeln(' ВВЕДИ СТРОКУ '); readln(sC); AddQueue(pEnd,sC) until sC='END'; writeln(' ***** ВЫВОД РЕЗУЛЬТАТОВ *****'); repeat DelQueue(pBegin,sC); writeln(sC); until pBegin=NIL end.
Дата добавления: 2014-01-07; Просмотров: 237; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |