Constructor DList.Init;
var i:word;
begin
L:=0;
R:=SizeList;
Ptr:=0;
N:=0;
for i:=1 to SizeList-1 do
begin
MemList[i].Data.name:='';
MemList[i].Prev:=i-1;
MemList[i].Next:=i+1
end;
MemList[SizeList].Next:=0;
MemList[SizeList].Prev:=Sizelist-1;
MemList[0].Prev:=SizeList;
MemList[0].Next:=1;
DListError:=DListOk
end;
const DListOk = 0;
DlistNotMem = 1;
DListEnd = 2;
DListEmpty =3;
SizeList = 100;
type
Index = 0..SizeList;
ElPtr = Index;
Element = record
Data:BaseType;
Prev,Next:ElPtr;
end;
DList = Object
private MemList:array[index] of Element;
private L,R,Ptr : Elptr;
private N:word;
private DListError:0..3;
public
function ErrStr:string;
Constructor Init;
procedure PutPrev (E:Basetype); Virtual;
procedure PutFollow (E:Basetype); Virtual;
procedure GetPrev (var E:Basetype); Virtual;
procedure GetFollow (var E:Basetype); Virtual;
procedure ReadDList (var E:Basetype);
procedure BeginPtr;
procedure EndPtr;
procedure MovePtrPrev;
procedure MovePtrNext;
procedure MoveTo ( M:integer );
function FullDlist:boolean;
function Count:integer;
procedure EmptyDList;
Destructor Kill;
end;
"Дек" - это двунаправленный список. Реализуется в виде записи, в которой имеется информация, хранящаяся в ней, и 2 ссылки - одна на предыдущий элемент, другая на следующий. То есть по этому списку можно двигаться как вперед, так и назад. Объект DList состоит из этого списка и дополнительной информации.
В процедуре Init просто в данные записывается пустая строка, в ссылках номера предыдущего и следующего элемента.
Однако в этом коде список реализован примитивно, с использованием массива, и все эти ссылки практически не нужны.
Полиморфизм и виртуальные методы - проще говоря, это когда один и тот же метод реализован для родительского и дочерних классов. Вызывается нужный метод в зависимости, к объекту какого класса он вызывается.
У меня есть готовая программа на Дельфи "Построение дерева почти оптимального поиска "
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.