Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Turbo Pascal] Переместить элементы стека


Автор: deimond 3.4.2011, 11:53
Помогите с задачкой.

Даны указатели P1 и P2 на вершины двух непустых стеков. Переместить все элементы из первого стека во второй (в результате элементы первого стека будут располагаться во втором стеке в порядке, обратном исходному) и вывести адрес новой вершины второго стека. Операции выделения и освобождения памяти не использовать.

Автор: t_gran 4.4.2011, 07:06
Код

type
   TMyType = integer;

   TStack = ^TNode;
   TNode = record
      value: TMyType;
      next: TStack;
   end;
{-----------------------------------------------}
{Занесение элемента в стек}
procedure Push(var theStack: TStack; theValue: TMyType);
var
   node: TStack;
begin
   new(node);
   node^.value := theValue;
   node^.next := theStack;

   theStack := node;
end;
{-----------------------------------------------}
{Вывод наэкран всех элементов стека}
procedure Print(theStack: TStack);
var
   node: TStack;
begin
   node := theStack;
   
   while (node <> nil) do
   begin
      write(node^.value:3);
      node := node^.next;
   end;
   
   writeln;
end;
{-----------------------------------------------}
{Формирование стека заданной длинны. Формируется случайным образом}
procedure PushRandomValue(var theStack: TStack; theCount: word);
var
   i: word;
begin
   theStack := nil;
   
   for i := 1 to theCount do
   begin
      Push(theStack, random(2*theCount) + 1);
   end;

end;
{-----------------------------------------------}
{Перемещение элементов одного стека в другой}
procedure Move(var theStackTo, theStackFrom: TStack);
var
   node: TStack;
begin
   while (theStackFrom <> nil) do
   begin
      node := theStackFrom;
      theStackFrom := theStackFrom^.next;
      node^.next := theStackTo;
      theStackTo := node;
   end;
end;
{-----------------------------------------------}

var
  stack1, stack2: TStack;

begin
   randomize;

   PushRandomValue(stack1, random(7) + 3);
   PushRandomValue(stack2, random(7) + 3);
   
   write('[1] : ');
   Print(stack1);
   write('[2] : ');
   Print(stack2);
   writeln;
   
   Move(stack2, stack1);
   
   write('[1] : ');
   Print(stack1);
   write('[2] : ');
   Print(stack2);
end.


Бинарник с исходником ниже

Автор: deimond 4.4.2011, 11:21
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)