Collections — различия между версиями
Материал из Вики ИТ мехмата ЮФУ
Juliet (обсуждение | вклад) (→Nodes) |
Juliet (обсуждение | вклад) (→Nodes) |
||
Строка 3: | Строка 3: | ||
<xh4> I </xh4> | <xh4> I </xh4> | ||
<source lang="Delphi"> | <source lang="Delphi"> | ||
+ | /// Модуль содержит шаблоны классов | ||
+ | /// SingleNode — узла с одним полем связи | ||
+ | /// DoubleNode — узла с двумя полями связи | ||
unit Nodes; | unit Nodes; | ||
Строка 13: | Строка 16: | ||
SingleNode<DataType> = class | SingleNode<DataType> = class | ||
− | /// Значение | + | /// Значение узла |
data: DataType; | data: DataType; | ||
/// Ссылка на следующий элемент | /// Ссылка на следующий элемент | ||
Строка 20: | Строка 23: | ||
/// Конструктор | /// Конструктор | ||
− | constructor (pData: DataType; pNext: SingleNode<DataType>); | + | /// <param name="pData">Значение узла</param> |
− | + | /// <param name="pNext">Ссылка на следующий элемент</param> | |
− | + | constructor Create(pData: DataType; pNext: SingleNode<DataType>); | |
− | + | ||
− | |||
end; | end; | ||
− | // | + | //- - - - - - - - - - - - - - - - - - - - - - - - - END of SingleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\ |
Строка 33: | Строка 35: | ||
DoubleNode<DataType> = class | DoubleNode<DataType> = class | ||
− | /// Значение | + | /// Значение узла |
data: DataType; | data: DataType; | ||
/// Ссылка на следующий элемент | /// Ссылка на следующий элемент | ||
Строка 42: | Строка 44: | ||
/// Конструктор | /// Конструктор | ||
− | constructor (pData: DataType; pPrev, pNext: DoubleNode<DataType>); | + | /// <param name="pData">Значение узла</param> |
− | + | /// <param name="pNext">Ссылка на следующий элемент</param> | |
− | + | /// <param name="pPrev">Ссылка на предыдущий элемент</param> | |
− | + | constructor Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>); | |
− | + | ||
− | |||
end; | end; | ||
− | // | + | //- - - - - - - - - - - - - - - - - - - - - - - - - END of DoubleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\ |
implementation | implementation | ||
+ | |||
+ | //-----------------------------------------------------SINGLE_NODE-----------------------------------------------------\\ | ||
+ | {Конструктор | ||
+ | pData — значение узла | ||
+ | pNext — cсылка на следующий элемент} | ||
+ | constructor SingleNode<DataType>.Create(pData: DataType; pNext: SingleNode<DataType>); | ||
+ | begin | ||
+ | data := pData; | ||
+ | next := pNext; | ||
+ | end; | ||
+ | //- - - - - - - - - - - - - - - - - - - - - - - - - END of SingleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\ | ||
+ | |||
+ | |||
+ | // -----------------------------------------------------DOUBLE_NODE----------------------------------------------------\\ | ||
+ | {Конструктор | ||
+ | pData — значение узла | ||
+ | pNext — cсылка на следующий элемент | ||
+ | pPrev — ссылка на предыдущий элемент} | ||
+ | constructor DoubleNode<DataType>.Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>); | ||
+ | begin | ||
+ | data := pData; | ||
+ | next := pNext; | ||
+ | next := pNext; | ||
+ | end; | ||
+ | //- - - - - - - - - - - - - - - - - - - - - - - - - END of DoubleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\ | ||
+ | |||
end. | end. | ||
Строка 58: | Строка 85: | ||
<xh4> II </xh4> | <xh4> II </xh4> | ||
<source lang="Delphi"> | <source lang="Delphi"> | ||
+ | /// Модуль содержит шаблоны классов | ||
+ | /// SingleNode — узла с одним полем связи | ||
+ | /// DoubleNode — узла с двумя полями связи | ||
unit Nodes; | unit Nodes; | ||
Строка 70: | Строка 100: | ||
SingleNode<DataType> = class | SingleNode<DataType> = class | ||
− | /// Значение | + | /// Значение узла |
data: DataType; | data: DataType; | ||
/// Ссылка на следующий элемент | /// Ссылка на следующий элемент | ||
Строка 77: | Строка 107: | ||
/// Конструктор | /// Конструктор | ||
− | constructor (pData: DataType; pNext: SingleNode<DataType>); | + | /// <param name="pData">Значение узла</param> |
− | + | /// <param name="pNext">Ссылка на следующий элемент</param> | |
− | + | constructor Create(pData: DataType; pNext: SingleNode<DataType>); | |
− | + | ||
− | |||
end; | end; | ||
− | // | + | //- - - - - - - - - - - - - - - - - - - - - - - - - END of SingleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\ |
/// Установка узла с одним полем связи sNode на следующий элемент | /// Установка узла с одним полем связи sNode на следующий элемент | ||
procedure SetNext<DataType>(var sNode: SingleNode<DataType>); | procedure SetNext<DataType>(var sNode: SingleNode<DataType>); | ||
+ | |||
// -----------------------------------------------------DOUBLE_NODE----------------------------------------------------\\ | // -----------------------------------------------------DOUBLE_NODE----------------------------------------------------\\ | ||
Строка 93: | Строка 123: | ||
DoubleNode<DataType> = class | DoubleNode<DataType> = class | ||
− | /// Значение | + | /// Значение узла |
data: DataType; | data: DataType; | ||
/// Ссылка на следующий элемент | /// Ссылка на следующий элемент | ||
Строка 102: | Строка 132: | ||
/// Конструктор | /// Конструктор | ||
− | constructor (pData: DataType; pPrev, pNext: DoubleNode<DataType>); | + | /// <param name="pData">Значение узла</param> |
− | + | /// <param name="pNext">Ссылка на следующий элемент</param> | |
− | + | /// <param name="pPrev">Ссылка на предыдущий элемент</param> | |
− | + | constructor Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>); | |
− | + | ||
− | |||
end; | end; | ||
− | // | + | //- - - - - - - - - - - - - - - - - - - - - - - - - END of DoubleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\ |
/// Установка узла с двумя полями связи dNode на следующий элемент | /// Установка узла с двумя полями связи dNode на следующий элемент | ||
Строка 120: | Строка 149: | ||
// ====================================================================================== IMPLEMENTATION ======================================================================================= \\ | // ====================================================================================== IMPLEMENTATION ======================================================================================= \\ | ||
implementation | implementation | ||
+ | |||
+ | //-----------------------------------------------------SINGLE_NODE-----------------------------------------------------\\ | ||
+ | {Конструктор | ||
+ | pData — значение узла | ||
+ | pNext — cсылка на следующий элемент} | ||
+ | constructor SingleNode<DataType>.Create(pData: DataType; pNext: SingleNode<DataType>); | ||
+ | begin | ||
+ | data := pData; | ||
+ | next := pNext; | ||
+ | end; | ||
+ | //- - - - - - - - - - - - - - - - - - - - - - - - - END of SingleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\ | ||
{Установка узла с одним полем связи sNode на следующий элемент} | {Установка узла с одним полем связи sNode на следующий элемент} | ||
Строка 127: | Строка 167: | ||
sNode := sNode.next | sNode := sNode.next | ||
end; | end; | ||
+ | |||
+ | |||
+ | // -----------------------------------------------------DOUBLE_NODE----------------------------------------------------\\ | ||
+ | {Конструктор | ||
+ | pData — значение узла | ||
+ | pNext — cсылка на следующий элемент | ||
+ | pPrev — ссылка на предыдущий элемент} | ||
+ | constructor DoubleNode<DataType>.Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>); | ||
+ | begin | ||
+ | data := pData; | ||
+ | next := pNext; | ||
+ | next := pNext; | ||
+ | end; | ||
+ | //- - - - - - - - - - - - - - - - - - - - - - - - - END of DoubleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\ | ||
{Установка узла с двумя полями связи dNode на следующий элемент} | {Установка узла с двумя полями связи dNode на следующий элемент} | ||
Строка 141: | Строка 195: | ||
dNode := dNode.prev; | dNode := dNode.prev; | ||
end; | end; | ||
+ | |||
end. | end. | ||
Строка 147: | Строка 202: | ||
<xh4> III </xh4> | <xh4> III </xh4> | ||
<source lang="Delphi"> | <source lang="Delphi"> | ||
+ | /// Модуль содержит шаблоны классов | ||
+ | /// SingleNode — узла с одним полем связи | ||
+ | /// DoubleNode — узла с двумя полями связи | ||
unit Nodes; | unit Nodes; | ||
Строка 159: | Строка 217: | ||
SingleNode<DataType> = class | SingleNode<DataType> = class | ||
− | /// Значение | + | /// Значение узла |
data: DataType; | data: DataType; | ||
/// Ссылка на следующий элемент | /// Ссылка на следующий элемент | ||
Строка 166: | Строка 224: | ||
/// Конструктор | /// Конструктор | ||
− | constructor (pData: DataType; pNext: SingleNode<DataType>); | + | /// <param name="pData">Значение узла</param> |
− | + | /// <param name="pNext">Ссылка на следующий элемент</param> | |
− | + | constructor Create(pData: DataType; pNext: SingleNode<DataType>); | |
− | + | ||
− | |||
end; | end; | ||
− | // | + | //- - - - - - - - - - - - - - - - - - - - - - - - - END of SingleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\ |
/// Установка узла с одним полем связи sNode на следующий элемент. | /// Установка узла с одним полем связи sNode на следующий элемент. | ||
Строка 183: | Строка 240: | ||
DoubleNode<DataType> = class | DoubleNode<DataType> = class | ||
− | /// Значение | + | /// Значение узла |
data: DataType; | data: DataType; | ||
/// Ссылка на следующий элемент | /// Ссылка на следующий элемент | ||
Строка 192: | Строка 249: | ||
/// Конструктор | /// Конструктор | ||
− | constructor (pData: DataType; pPrev, pNext: DoubleNode<DataType>); | + | /// <param name="pData">Значение узла</param> |
− | + | /// <param name="pNext">Ссылка на следующий элемент</param> | |
− | + | /// <param name="pPrev">Ссылка на предыдущий элемент</param> | |
− | + | constructor Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>); | |
− | + | ||
− | |||
end; | end; | ||
− | // | + | //- - - - - - - - - - - - - - - - - - - - - - - - - END of DoubleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\ |
/// Установка узла с двумя полями связи dNode на следующий элемент. | /// Установка узла с двумя полями связи dNode на следующий элемент. | ||
Строка 212: | Строка 268: | ||
// ====================================================================================== IMPLEMENTATION ======================================================================================= \\ | // ====================================================================================== IMPLEMENTATION ======================================================================================= \\ | ||
implementation | implementation | ||
+ | |||
+ | //-----------------------------------------------------SINGLE_NODE-----------------------------------------------------\\ | ||
+ | {Конструктор | ||
+ | pData — значение узла | ||
+ | pNext — cсылка на следующий элемент} | ||
+ | constructor SingleNode<DataType>.Create(pData: DataType; pNext: SingleNode<DataType>); | ||
+ | begin | ||
+ | data := pData; | ||
+ | next := pNext; | ||
+ | end; | ||
+ | //- - - - - - - - - - - - - - - - - - - - - - - - - END of SingleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\ | ||
{Установка узла с одним полем связи sNode на следующий элемент. | {Установка узла с одним полем связи sNode на следующий элемент. | ||
Строка 225: | Строка 292: | ||
end; | end; | ||
end; | end; | ||
+ | |||
+ | |||
+ | // -----------------------------------------------------DOUBLE_NODE----------------------------------------------------\\ | ||
+ | {Конструктор | ||
+ | pData — значение узла | ||
+ | pNext — cсылка на следующий элемент | ||
+ | pPrev — ссылка на предыдущий элемент} | ||
+ | constructor DoubleNode<DataType>.Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>); | ||
+ | begin | ||
+ | data := pData; | ||
+ | next := pNext; | ||
+ | next := pNext; | ||
+ | end; | ||
+ | //- - - - - - - - - - - - - - - - - - - - - - - - - END of DoubleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\ | ||
{Установка узла с двумя полями связи dNode на следующий элемент. | {Установка узла с двумя полями связи dNode на следующий элемент. | ||
Строка 251: | Строка 332: | ||
end; | end; | ||
end; | end; | ||
+ | |||
end. | end. |
Версия 13:57, 16 апреля 2009
Вспомогательные модули
Nodes
<xh4> I </xh4>
/// Модуль содержит шаблоны классов
/// SingleNode — узла с одним полем связи
/// DoubleNode — узла с двумя полями связи
unit Nodes;
interface
type
//-----------------------------------------------------SINGLE_NODE-----------------------------------------------------\\
/// Узел с одним полем связи
SingleNode<DataType> = class
/// Значение узла
data: DataType;
/// Ссылка на следующий элемент
next: SingleNode<DataType>;
/// Конструктор
/// <param name="pData">Значение узла</param>
/// <param name="pNext">Ссылка на следующий элемент</param>
constructor Create(pData: DataType; pNext: SingleNode<DataType>);
end;
//- - - - - - - - - - - - - - - - - - - - - - - - - END of SingleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\
// -----------------------------------------------------DOUBLE_NODE----------------------------------------------------\\
/// Узел с двумя полями связи
DoubleNode<DataType> = class
/// Значение узла
data: DataType;
/// Ссылка на следующий элемент
next: DoubleNode<DataType>;
/// Ссылка на предыдущий элемент
prev: DoubleNode<DataType>;
/// Конструктор
/// <param name="pData">Значение узла</param>
/// <param name="pNext">Ссылка на следующий элемент</param>
/// <param name="pPrev">Ссылка на предыдущий элемент</param>
constructor Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>);
end;
//- - - - - - - - - - - - - - - - - - - - - - - - - END of DoubleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\
implementation
//-----------------------------------------------------SINGLE_NODE-----------------------------------------------------\\
{Конструктор
pData — значение узла
pNext — cсылка на следующий элемент}
constructor SingleNode<DataType>.Create(pData: DataType; pNext: SingleNode<DataType>);
begin
data := pData;
next := pNext;
end;
//- - - - - - - - - - - - - - - - - - - - - - - - - END of SingleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\
// -----------------------------------------------------DOUBLE_NODE----------------------------------------------------\\
{Конструктор
pData — значение узла
pNext — cсылка на следующий элемент
pPrev — ссылка на предыдущий элемент}
constructor DoubleNode<DataType>.Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>);
begin
data := pData;
next := pNext;
next := pNext;
end;
//- - - - - - - - - - - - - - - - - - - - - - - - - END of DoubleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\
end.
<xh4> II </xh4>
/// Модуль содержит шаблоны классов
/// SingleNode — узла с одним полем связи
/// DoubleNode — узла с двумя полями связи
unit Nodes;
// ========================================================================================= INTERFACE ========================================================================================= \\
interface
type
//-----------------------------------------------------SINGLE_NODE-----------------------------------------------------\\
/// Узел с одним полем связи
SingleNode<DataType> = class
/// Значение узла
data: DataType;
/// Ссылка на следующий элемент
next: SingleNode<DataType>;
/// Конструктор
/// <param name="pData">Значение узла</param>
/// <param name="pNext">Ссылка на следующий элемент</param>
constructor Create(pData: DataType; pNext: SingleNode<DataType>);
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>;
/// Конструктор
/// <param name="pData">Значение узла</param>
/// <param name="pNext">Ссылка на следующий элемент</param>
/// <param name="pPrev">Ссылка на предыдущий элемент</param>
constructor Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>);
end;
//- - - - - - - - - - - - - - - - - - - - - - - - - END of DoubleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\
/// Установка узла с двумя полями связи dNode на следующий элемент
procedure SetNext<DataType>(var dNode: DoubleNode<DataType>);
/// Установка узла с двумя полями связи dNode на предыдущий элемент
procedure SetPrev<DataType>(var dNode: DoubleNode<DataType>);
// ====================================================================================== IMPLEMENTATION ======================================================================================= \\
implementation
//-----------------------------------------------------SINGLE_NODE-----------------------------------------------------\\
{Конструктор
pData — значение узла
pNext — cсылка на следующий элемент}
constructor SingleNode<DataType>.Create(pData: DataType; pNext: SingleNode<DataType>);
begin
data := pData;
next := pNext;
end;
//- - - - - - - - - - - - - - - - - - - - - - - - - END of SingleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\
{Установка узла с одним полем связи sNode на следующий элемент}
procedure SetNext<DataType>(var sNode: SingleNode<DataType>);
begin
Assert(sNode <> nil);
sNode := sNode.next
end;
// -----------------------------------------------------DOUBLE_NODE----------------------------------------------------\\
{Конструктор
pData — значение узла
pNext — cсылка на следующий элемент
pPrev — ссылка на предыдущий элемент}
constructor DoubleNode<DataType>.Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>);
begin
data := pData;
next := pNext;
next := pNext;
end;
//- - - - - - - - - - - - - - - - - - - - - - - - - END of DoubleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\
{Установка узла с двумя полями связи 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>
/// Модуль содержит шаблоны классов
/// SingleNode — узла с одним полем связи
/// DoubleNode — узла с двумя полями связи
unit Nodes;
// ========================================================================================= INTERFACE ========================================================================================= \\
interface
type
//-----------------------------------------------------SINGLE_NODE-----------------------------------------------------\\
/// Узел с одним полем связи
SingleNode<DataType> = class
/// Значение узла
data: DataType;
/// Ссылка на следующий элемент
next: SingleNode<DataType>;
/// Конструктор
/// <param name="pData">Значение узла</param>
/// <param name="pNext">Ссылка на следующий элемент</param>
constructor Create(pData: DataType; pNext: SingleNode<DataType>);
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>;
/// Конструктор
/// <param name="pData">Значение узла</param>
/// <param name="pNext">Ссылка на следующий элемент</param>
/// <param name="pPrev">Ссылка на предыдущий элемент</param>
constructor Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>);
end;
//- - - - - - - - - - - - - - - - - - - - - - - - - END of DoubleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\
/// Установка узла с двумя полями связи dNode на следующий элемент.
/// Если не удалось, возвращает ложь.
function SetNext<DataType>(var dNode: DoubleNode<DataType>): boolean;
/// Установка узла с двумя полями связи dNode на предыдущий элемент.
/// Если не удалось, возвращает ложь.
function SetPrev<DataType>(var dNode: DoubleNode<DataType>): boolean;
// ====================================================================================== IMPLEMENTATION ======================================================================================= \\
implementation
//-----------------------------------------------------SINGLE_NODE-----------------------------------------------------\\
{Конструктор
pData — значение узла
pNext — cсылка на следующий элемент}
constructor SingleNode<DataType>.Create(pData: DataType; pNext: SingleNode<DataType>);
begin
data := pData;
next := pNext;
end;
//- - - - - - - - - - - - - - - - - - - - - - - - - END of SingleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\
{Установка узла с одним полем связи 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;
// -----------------------------------------------------DOUBLE_NODE----------------------------------------------------\\
{Конструктор
pData — значение узла
pNext — cсылка на следующий элемент
pPrev — ссылка на предыдущий элемент}
constructor DoubleNode<DataType>.Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>);
begin
data := pData;
next := pNext;
next := pNext;
end;
//- - - - - - - - - - - - - - - - - - - - - - - - - END of DoubleNode - - - - - - - - - - - - - - - - - - - - - - - - -\\
{Установка узла с двумя полями связи 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.