If Pempty(Poinsv,Poinf) Then

Begin

End;

Begin

End;

End;

Exit

Begin

Begin

Структура данных очередь. Базовые операции над очередью

END.

Readln(el);

End;

EdelSt(S,Vstek,el);

Begin

End;

AddST(S,Vstek,el)

For i:=1 to 2 do {удалить элементы}

Writeln('yel=',el);

writeln('nel=');

Addst(S,Vstek,el) {добавить элемент}

Рассмотрим порядок выполнения алгоритма решения задачи более подробно.

Добавление пяти элементов в стек. Состояние массива S:

 

индекс
элементы массива ‘kk’ ‘ll’ ‘mm’ ‘nn’ ‘pp’
элементы стека ‘kk’ ‘ll’ ‘mm’ ‘nn’ ‘pp’

Значение указателя Vstek:=5.

Удалить два элемента из вершины стека. Состояние массива S:

 

индекс
Элементы массива ‘kk’ ‘ll’ ‘mm’ ‘nn’ ‘pp’
Элементы стека ‘kk’ ‘ll’ ‘mm’    

Значение указателя Vstek:=3.

Добавить один элемент в стек. Состояние массива S:

 

индекс
Элементы массива ‘kk’ ‘ll’ ‘mm’ ‘rr’ ‘pp’
Элементы стека ‘kk’ ‘ll’ ‘mm’ ‘rr’  

Значение указателя Vstek:=4.

При моделировании реальных процессов и ситуаций, которые описываются с помощью механизмов обслуживания, например, очередь к врачу или в театральную кассу, машин у светофора, очередь заданий пользователя на их выполнение в ОС, используется структура данных очередь.

Очередь– это упорядоченный набор связанных элементов, которые добавляются к ней с одного конца, а удаляются (выбираются) с другого конца.Принцип построения очереди – «первый вошел» и «первый вышел» (first in, first out – англ. яз.) или сокращенноFIFO.

Основываясь на принципах построения очереди, определим основные базовые операции над ней:

- добавить (разместить) новый элемент в конец очереди;

- выбрать и удалить элемент из начала очереди.

При описании очереди может быть использован одномерный массив. Для создания очереди из элементов массива используются дополнительно две переменные. Одна переменная – Poinf – содержит индекс массива первого элемента очереди, а вторая Poinsv – индекс массива со свободным местом в очереди в каждый текущий момент времени. В начале работы с очередью обе переменные принимают значения Poinf:=1 и Poinsv:=1. Если очередь является пустой, то значения этих переменных равны между собой Poinsv=Poinf.

Например, необходимо смоделировать очередь элементов, которая состоит из символов.

Const maxs=6;

Type och=array[1..maxs] of char; {очередь из символов}

Var Cha:och;

{Для добавления элементов в очередь используется процедура пользователя AddCH}

Procedure AddCH(s:char; Var Cha:och; Var Poinsv:integer);

if Poinsv>maxs then

writeln('Переполнение очереди');

Cha[poinsv]:=el;

Poinsv:=Poinsv+1

В этой процедуре выполняется проверка на переполнение очереди, которая может возникнуть в том случае, когда значение переменной Poinsv становится больше размера массива. При добавлении элемента в очередь значение переменной Poinsv увеличивается на единицу, а на свободное место в очереди в ее конец ставится новый элемент el.

Одним из необходимых условий при удалении элементов из очереди является проверка условия полного отсутствия в ней каких-либо элементов – очередь «пуста». Такую проверку выполняет с помощью функция пользователя Pempty.

Function Pempty(PoinSv,PoinF:integer):boolean;

if Poinsv=PoinF then Pempty:=true {очередь пуста}

else Pempty:=false {в очереди есть элементы}

Для удаления элементов из очереди может быть использована процедура EdelCH. Значение удаляемого элемента присваивается переменной el. После удаления элемента из очереди значение переменной Poinf (указатель на первый элемент в очереди) увеличивается на единицу.

Procedure EdelCH (Var CHa:och; Var Poinsv,Poinf:integer; Var el:char);