Информационный портал Media Systems & Bear Corp.

Главная Новости Delphi C&C++ Tеория Графов Web-Design Математика Исходники и Проекты Лисп и Пролог Ссылки

Портал :: Динамическая память :: Дек
 
DINAMIC MEMORY
 
 

  • Динамическая память под DOS реализация для языка Borlad Pascal
Rambler's Top100 Rambler's Top100  
 


Реализация ДЕКА на базе ссылок.

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;

 
     
  Гостевая книга . Связь с разработчиками: Bear Corporation, Media Studio.  
  Это место для вашей рекламы  

Дизайн: Bear Corner, Inc. & Media Sudio.
Последнее обновление: 24.03.2001.

 

Hosted by uCoz