Collections — различия между версиями
Материал из Вики ИТ мехмата ЮФУ
Juliet (обсуждение | вклад) (→Nodes) |
Juliet (обсуждение | вклад) (→Nodes) |
||
Строка 88: | Строка 88: | ||
procedure SetNext<DataType>(var sNode: SingleNode<DataType>); | procedure SetNext<DataType>(var sNode: SingleNode<DataType>); | ||
− | // -----------------------------------------------------DOUBLE_NODE | + | // -----------------------------------------------------DOUBLE_NODE----------------------------------------------------\\ |
type | type | ||
/// Узел с двумя полями связи | /// Узел с двумя полями связи | ||
Строка 172: | Строка 172: | ||
end; | end; | ||
end; | end; | ||
− | //--------------------------------------------------END of SingleNode----------------------------------------------- | + | //--------------------------------------------------END of SingleNode-----------------------------------------------=--\\ |
/// Установка узла с одним полем связи sNode на следующий элемент. | /// Установка узла с одним полем связи sNode на следующий элемент. | ||
Строка 178: | Строка 178: | ||
function SetNext<DataType>(var sNode: SingleNode<DataType>): boolean; | function SetNext<DataType>(var sNode: SingleNode<DataType>): boolean; | ||
− | // -----------------------------------------------------DOUBLE_NODE | + | // -----------------------------------------------------DOUBLE_NODE----------------------------------------------------\\ |
type | type | ||
/// Узел с двумя полями связи | /// Узел с двумя полями связи |
Версия 20:41, 15 апреля 2009
Вспомогательные модули
Nodes
<xh4> I </xh4>
unit Nodes;
interface
type
//-----------------------------------------------------SINGLE_NODE-----------------------------------------------------\\
/// Узел с одним полем связи
SingleNode<DataType> = class
/// Значение
data: DataType;
/// Ссылка на следующий элемент
next: SingleNode<DataType>;
/// Конструктор
constructor (pData: DataType; pNext: SingleNode<DataType>);
begin
data := pData;
next := pNext;
end;
end;
//--------------------------------------------------END of SingleNode--------------------------------------------------\\
// -----------------------------------------------------DOUBLE_NODE----------------------------------------------------\\
/// Узел с двумя полями связи
DoubleNode<DataType> = class
/// Значение
data: DataType;
/// Ссылка на следующий элемент
next: DoubleNode<DataType>;
/// Ссылка на предыдущий элемент
prev: DoubleNode<DataType>;
/// Конструктор
constructor (pData: DataType; pPrev, pNext: DoubleNode<DataType>);
begin
data := pData;
prev := pPrev;
next := pNext;
end;
end;
//--------------------------------------------------END of DoubleNode--------------------------------------------------\\
implementation
end.
<xh4> II </xh4>
unit Nodes;
// ========================================================================================= INTERFACE ========================================================================================= \\
interface
type
//-----------------------------------------------------SINGLE_NODE-----------------------------------------------------\\
/// Узел с одним полем связи
SingleNode<DataType> = class
/// Значение
data: DataType;
/// Ссылка на следующий элемент
next: SingleNode<DataType>;
/// Конструктор
constructor (pData: DataType; pNext: SingleNode<DataType>);
begin
data := pData;
next := pNext;
end;
end;
//--------------------------------------------------END of SingleNode--------------------------------------------------\\
/// Установка узла с одним полем связи sNode на следующий элемент
procedure SetNext<DataType>(var sNode: SingleNode<DataType>);
// -----------------------------------------------------DOUBLE_NODE----------------------------------------------------\\
type
/// Узел с двумя полями связи
DoubleNode<DataType> = class
/// Значение
data: DataType;
/// Ссылка на следующий элемент
next: DoubleNode<DataType>;
/// Ссылка на предыдущий элемент
prev: DoubleNode<DataType>;
/// Конструктор
constructor (pData: DataType; pPrev, pNext: DoubleNode<DataType>);
begin
data := pData;
prev := pPrev;
next := pNext;
end;
end;
//--------------------------------------------------END of DoubleNode--------------------------------------------------\\
/// Установка узла с двумя полями связи dNode на следующий элемент
procedure SetNext<DataType>(var dNode: DoubleNode<DataType>);
/// Установка узла с двумя полями связи dNode на предыдущий элемент
procedure SetPrev<DataType>(var dNode: DoubleNode<DataType>);
// ====================================================================================== IMPLEMENTATION ======================================================================================= \\
implementation
{Установка узла с одним полем связи sNode на следующий элемент}
procedure SetNext<DataType>(var sNode: SingleNode<DataType>);
begin
Assert(sNode <> nil);
sNode := sNode.next
end;
{Установка узла с двумя полями связи dNode на следующий элемент}
procedure SetNext<DataType>(var dNode: DoubleNode<DataType>);
begin
Assert(dNode <> nil);
dNode := dNode.next;
end;
{Установка узла с двумя полями связи dNode на предыдущий элемент}
procedure SetPrev<DataType>(var dNode: DoubleNode<DataType>);
begin
Assert(dNode <> nil);
dNode := dNode.prev;
end;
end.
<xh4> III </xh4>
unit Nodes;
// ========================================================================================= INTERFACE ========================================================================================= \\
interface
type
//-----------------------------------------------------SINGLE_NODE-----------------------------------------------------\\
/// Узел с одним полем связи
SingleNode<DataType> = class
/// Значение
data: DataType;
/// Ссылка на следующий элемент
next: SingleNode<DataType>;
/// Конструктор
constructor (pData: DataType; pNext: SingleNode<DataType>);
begin
data := pData;
next := pNext;
end;
end;
//--------------------------------------------------END of SingleNode-----------------------------------------------=--\\
/// Установка узла с одним полем связи sNode на следующий элемент.
/// Если не удалось, возвращает ложь.
function SetNext<DataType>(var sNode: SingleNode<DataType>): boolean;
// -----------------------------------------------------DOUBLE_NODE----------------------------------------------------\\
type
/// Узел с двумя полями связи
DoubleNode<DataType> = class
/// Значение
data: DataType;
/// Ссылка на следующий элемент
next: DoubleNode<DataType>;
/// Ссылка на предыдущий элемент
prev: DoubleNode<DataType>;
/// Конструктор
constructor (pData: DataType; pPrev, pNext: DoubleNode<DataType>);
begin
data := pData;
prev := pPrev;
next := pNext;
end;
end;
//--------------------------------------------------END of DoubleNode--------------------------------------------------\\
/// Установка узла с двумя полями связи dNode на следующий элемент.
/// Если не удалось, возвращает ложь.
function SetNext<DataType>(var dNode: DoubleNode<DataType>): boolean;
/// Установка узла с двумя полями связи dNode на предыдущий элемент.
/// Если не удалось, возвращает ложь.
function SetPrev<DataType>(var dNode: DoubleNode<DataType>): boolean;
// ====================================================================================== IMPLEMENTATION ======================================================================================= \\
implementation
{Установка узла с одним полем связи sNode на следующий элемент.
Если не удалось, возвращает ложь.}
function SetNext<DataType>(var sNode: SingleNode<DataType>): boolean;
begin
if sNode = nil then
result := false
else
begin
sNode := sNode.next;
result := true;
end;
end;
{Установка узла с двумя полями связи dNode на следующий элемент.
Если не удалось, возвращает ложь.}
function SetNext<DataType>(var dNode: DoubleNode<DataType>): boolean;
begin
if dNode = nil then
result := false
else
begin
dNode := dNode.next;
result := true;
end;
end;
{Установка узла с двумя полями связи dNode на предыдущий элемент.
Если не удалось, возвращает ложь.}
function SetPrev<DataType>(var dNode: DoubleNode<DataType>): boolean;
begin
if dNode = nil then
result := false
else
begin
dNode := dNode.prev;
result := true;
end;
end;
end.