
- •Оглавление
- •Комбинированный урок №18
- •Статическое и динамическое распределение оперативной памяти
- •Организация структур данных
- •Структура данных стек. Базовые операции над стеком
- •If Sempty(Vstek) Then
- •Var I,Vstek:integer;
- •If Sempty(Vstek) Then
- •Структура данных очередь. Базовые операции над очередью
- •If Pempty(Poinsv,Poinf) Then
- •Var I,Poinsv,Poinf:integer;
- •If Pempty(Poinsv,Poinf) Then
- •Структура данных список. Базовые операции над списком
- •Var Asmn:integer;
- •Var Asmn:integer;
- •Контрольные вопросы:
If Pempty(Poinsv,Poinf) Then
begin
writeln('Очередь пуста');
exit
end;
el:=Cha[Poinf];
Poinf:=Poinf+1
end;
Создавая очередь с помощью массива, следует, что состояние очереди может не соответствовать состоянию массива ее описывающего, поскольку при удалении элемента из очереди, он не удаляется из массива, а просто меняется значение указателя Poinf.
Рассмотрим процесс моделирования и обработки очереди на конкретном примере.
Пример. Постройте очередь из 5-ти символов - ‘a’, ‘b’, ‘c’, ‘d’, ‘e’. Выведите из очереди два символа ‘a’, ‘b’ и добавьте в конец очереди символ ‘z’.
Const maxs=6;
Type och=array[1..6] of char;
Var I,Poinsv,Poinf:integer;
Cha:och;
el:char;
{процедура добавления элементов в очередь}
Procedure AddCH(s:char; Var Cha:och; Var Poinsv:integer);
Begin
if Poinsv>maxs then
begin
writeln('Переполнение очереди');
exit
end;
Cha[poinsv]:=el;
Poinsv:=Poinsv+1
End;
{функция проверки условия пустой очереди}
Function Pempty(PoinSv,PoinF:integer):boolean;
Begin
if Poinsv=PoinF then Pempty:=true
else Pempty:=false
end;
{процедура вывода элементов из очереди}
Procedure EdelCH (Var CHa:och; Var Poinsv,Poinf:integer; Var el:char);
Begin
If Pempty(Poinsv,Poinf) Then
begin
writeln('Очередь пуста');
exit
end;
el:=Cha[Poinf];
Poinf:=Poinf+1
end;
BEGIN {основная программа}
Poinsv:=1;
Poinf:=1;
{добавление элементов в очередь}
for i:=1 to 5 do
begin
Write('EO='); readln(el);
Addch(el,Cha,Poinsv)
end;
{удаление из очереди двух элементов}
For i:=1 to 2 do
begin
EdelCh(Cha,Poinsv,Poinf,el);
Writeln('el=',el);
end;
writeln('nel=');
readln(el);
{добавление элемента в конец очереди}
Addch(el,Cha,Poinsv)
END.
Рассмотрим порядок выполнения алгоритма задачи:
Построение очереди из 5-ти элементов имеем указатель на элемент очереди Poinf:=1, указатель на свободное место в массиве Poinsv:=6, содержимое массива Cha:
индекс |
1 |
2 |
3 |
4 |
5 |
6 |
элементы массива |
‘a’ |
‘b’ |
‘c’ |
‘d’ |
‘e’ |
|
элементы очереди |
‘a’ |
‘b’ |
‘c’ |
‘d’ |
‘e’ |
|
Удаление из очереди первых двух элементов: Poinf:=3, Poinsv:=6, содержимое массива Cha:
индекс |
1 |
2 |
3 |
4 |
5 |
6 |
Элементы массива |
‘a’ |
‘b’ |
‘c’ |
‘d’ |
‘e’ |
|
Элементы череди |
|
|
‘c’ |
‘d’ |
‘e’ |
|
Добавление одного элемента в конец очереди: Poinf:=3, Poinsv:=7, содержимое массива Cha:
индекс |
1 |
2 |
3 |
4 |
5 |
6 |
элементы массива |
‘a’ |
‘b’ |
‘c’ |
‘d’ |
‘e’ |
‘z’ |
Элементы очереди |
|
|
‘c’ |
‘d’ |
‘e’ |
‘z’ |