Меню

Главная

Статистика

 

 


Механизм 1 - список.

Этот способ можно считать "родным" для стека как линейной динамической структуры. Приводим тексты соответствующих процедур на языке Pascal.

{-------------------------------------------------}
{ Линейный однонаправленный список                }
{-------------------------------------------------}
type PElem = ^TElem;
  TElem = record
    Data : <item>;
    Next : PElem;
  end;
var
  Head : PElem;  {Указатель на голову стека}
{-------------------------------------------------}
{ LIFO  Добавление элемента в стек                }
{-------------------------------------------------}
procedure Push (TheData : <item>);
var
  NewElem : PElem;
begin
  New(NewElem);
  NewElem^.Data := TheData;
  NewElem^.Next := Head;
Head := NewElem;
end;
{--------------------------------------------------}
{ LIFO  Извлечение элемента из стека               }
{--------------------------------------------------}
function Pop (var TheData : <item>) : boolean;
{true - верхний элемент извлечен; false - стек пуст}
var
  TempElem : PElem;
begin
  TempElem := Head;
  if TempElem = nil then begin
    Pop := false;
    exit;
  end;
  Head := Head ^.Next;
  TheData := TempElem^.Data;
  Dispose (TempElem);
  Pop := true;
end;
{-------------------------------------------------}
{ LIFO  Выборка верхнего элемента без удаления    }
{-------------------------------------------------}
function StackTop (var TheData : <item>) : boolean;
{true - верхний элемент прочтен; false - стек пуст}
begin
  if Head = nil then begin
    StackTop := false;
    exit;
  end;
  TheData := Head^.Data;
  StackTop := true;
end;
{-------------------------------------------------}
            

Если в приведенном выше описании в качестве типа item указать char, то процедура размещения в новом пустом стеке символьной строки (входного выражения) выглядит так:

{-------------------------------------------------}
{ LIFO  Формирование стека из входной строки      }
{-------------------------------------------------}
procedure MakeStack (var Head : PElem);
var
  TempElem  : PElem;
  InputData : string;
  i         : 0..255;
begin {исходный стек пуст}
  Head := nil;
  <ввод строки InputData>
  if Length(InputData) = 0 then exit;
  for i:=1 to Length (InputData) do begin
    TempElem := Head;
    New (Head);
    Head^.Data := InputData[i];
    Head^.Next := TempElem;
  end;
end;
            

Заметьте, что при таком размещении "бывшая" строка будет доступна с конца.

Назад

ekocity.ru. Онлайн игра: онлайн игра. gps garmin nuvi 215. очень выгодно. Не пропустите: кабель асб или светильник лпо 2х36 по старым ценам! Предложение лета.