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

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Nodes)
(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>
    begin
+
    /// <param name="pNext">Ссылка на следующий элемент</param>
      data := pData;
+
     constructor Create(pData: DataType; pNext: SingleNode<DataType>);
      next := pNext;
+
 
    end;
 
 
   end;
 
   end;
//--------------------------------------------------END of SingleNode--------------------------------------------------\\
+
//- - - - - - - - - - - - - - - - - - - - - - - - - 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>
    begin
+
    /// <param name="pNext">Ссылка на следующий элемент</param>
      data := pData;
+
    /// <param name="pPrev">Ссылка на предыдущий элемент</param>
      prev := pPrev;
+
     constructor Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>);
      next := pNext;
+
 
    end;
 
 
   end;
 
   end;
//--------------------------------------------------END of DoubleNode--------------------------------------------------\\
+
//- - - - - - - - - - - - - - - - - - - - - - - - - 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>
     begin
+
    /// <param name="pNext">Ссылка на следующий элемент</param>
      data := pData;
+
     constructor Create(pData: DataType; pNext: SingleNode<DataType>);
      next := pNext;
+
      
    end;
 
 
   end;
 
   end;
//--------------------------------------------------END of SingleNode--------------------------------------------------\\
+
//- - - - - - - - - - - - - - - - - - - - - - - - - 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>
     begin
+
    /// <param name="pNext">Ссылка на следующий элемент</param>
      data := pData;
+
    /// <param name="pPrev">Ссылка на предыдущий элемент</param>
      prev := pPrev;
+
     constructor Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>);
      next := pNext;
+
      
    end;
 
 
   end;
 
   end;
//--------------------------------------------------END of DoubleNode--------------------------------------------------\\
+
//- - - - - - - - - - - - - - - - - - - - - - - - - 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>
    begin
+
    /// <param name="pNext">Ссылка на следующий элемент</param>
      data := pData;
+
     constructor Create(pData: DataType; pNext: SingleNode<DataType>);
      next := pNext;
+
 
    end;
 
 
   end;
 
   end;
//--------------------------------------------------END of SingleNode-----------------------------------------------=--\\
+
//- - - - - - - - - - - - - - - - - - - - - - - - - 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>
    begin
+
    /// <param name="pNext">Ссылка на следующий элемент</param>
      data := pData;
+
    /// <param name="pPrev">Ссылка на предыдущий элемент</param>
      prev := pPrev;
+
     constructor Create(pData: DataType; pPrev, pNext: DoubleNode<DataType>);
      next := pNext;
+
 
    end;
 
 
   end;
 
   end;
//--------------------------------------------------END of DoubleNode--------------------------------------------------\\
+
//- - - - - - - - - - - - - - - - - - - - - - - - - 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.

Collections