Collections

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск

Вспомогательные модули

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