Collections — различия между версиями
Материал из Вики ИТ мехмата ЮФУ
(Новая: == Вспомогательные модули == === Nodes === <source lang="Delphi"></source> == Collections == <source lang="Delphi"></source>) |
Juliet (обсуждение | вклад) (→Nodes) |
||
Строка 1: | Строка 1: | ||
== Вспомогательные модули == | == Вспомогательные модули == | ||
=== Nodes === | === Nodes === | ||
− | <source lang="Delphi"></source> | + | <xh4> I </xh4> |
+ | <source lang="Delphi"> | ||
+ | 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. | ||
+ | </source> | ||
+ | |||
+ | <xh4> II </xh4> | ||
+ | <source lang="Delphi"> | ||
+ | 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. | ||
+ | </source> | ||
+ | |||
+ | <xh4> III </xh4> | ||
+ | <source lang="Delphi"> | ||
+ | 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. | ||
+ | </source> | ||
== Collections == | == Collections == | ||
<source lang="Delphi"></source> | <source lang="Delphi"></source> |
Версия 20:36, 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.