Collections — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Новая: == Вспомогательные модули == === Nodes === <source lang="Delphi"></source> == Collections == <source lang="Delphi"></source>)
 
(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.

Collections