Реализация ДЕКА на базе ссылок.
5.1 Реализация.
1) Сделать дек пустым.(Процедура)
2) Проверить наличие элементов в деке.(Функция)
3) Добавить элемент в начало или конец дека.(Процедура)
4) Взять элемент из начала или конца дека.(Процедура)
5) Удалить элемент из начала очереди.(Процедура)
6) Удалить дек.(Процедура)
5.2 Процедуры и функции.
5.2.1 Основные типы и переменные :
Пусть Type InformType=byte;{Информационная часть}
DPtr=^dekT;
DecT=record
inf:InformType;
next:DPtr;
end;
var a:DPtr;
5.2.2 Алгоритмы :
{Дек пуст или нет}
function NilExist(a:DPtr):boolean;
begin
NilExist:=a.next=nil;
end;
{Устанавливает указатель на предпоследний элемент дека}
procedure GetPred(a:DPtr;var p:DPtr);
var k:DPtr;
begin
p:=nil;
if(a<>nil)and(a^.next<>nil)then begin
k:=a;
while k^.next^.next<>nil do k:=k^.next;
p:=k;
end;
end;
{Добавить элемент в начало дека.}
procedure AddElemToHome(var a:DPtr;inf:InformType);
var n:DPtr;
begin
new(n);
n^.inf:=inf;
n^.next:=a;
a:=n;
end;
{Добавить элемент в конец дека.}
procedure AddElemToEnd(var a:DPtr;inf:InformType);
var m,n:DPtr; begin if a<>nil then begin
m:=a;
while m^.next<>nil do m:=m^.next;
new(n);
n^.inf:=inf;
n^.next:=nil;
m^.next:=nil;
end;
end;
{Взять элемент из начала дека.}
procedure GetElemHome(a:DPtr;var inf:InformType);
begin
if a<>nil then inf:=a^.inf;
end;
{Взять элемент из kонца дека.}
procedure GetElemEnd(a:DPtr;var inf:InformType);
var p:DPtr;
begin
if a<>nil then begin
p:=a;
while p^.next<>nil do p:=p^.next;
inf:=p^.inf;
end;
end;
{Удалить элемент из начала дека.}
procedure DelElemHome(Var a:DPtr);
var l:DPtr;
begin
if a<>nil then begin
l:=a;
a:=a^.next;
dispose(l)
end
end;
{Удалить элемент из конца дека.}
procedure DelElemEnd(Var a:DPtr);
var l,k:DPtr;
begin
if a<>nil then
begin
if a^.next=nil then
DelElemHome(a)
else begin
GetPred(a,l);
dispose(l^.next);
l^.next:=nil
end;
end;
end;
{Чистит дек.}
procedure DelQueue(var a:DPtr);
begin
while a<>nil then DelElemHome(a)
end;