IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Стек.
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Женский

Репутация: -  0  +


Дан стек из чисел, упорядочить по убыванию.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Сам модуль выглядит так:

Код

Unit StackUnit;

Interface

Const
 stackOk = 0;
 stackOverflow = 1;
 stackUnderflow = 2;

Var
 StackError : Byte;

Type
 NodePtr = ^Node;
 Node =
   Record
     Info : Pointer;
     Next : NodePtr;
   End;

 Stack =
   Record
     Head : NodePtr;
     Size : Word;
   End;


Procedure InitStack( Var S : Stack; size : Word );
Procedure ClearStack( Var S : Stack );

Procedure Push( Var S : Stack; Var E );
Procedure Pop( Var S : Stack; Var E );

Function Empty( Var S : Stack ) : Boolean;


Implementation

Var
 SaveHeapError : Pointer;

{$F+}
Function HeapFunc( Size : Word ) : Integer;
 Begin
   HeapFunc := 1;
 End;
{$F-}

Procedure InitStack( Var S : Stack; size : Word );
 Begin
   SaveHeapError := HeapError;
   S.Head := nil;
   S.Size := size;
   StackError := stackOk;
 End;

Procedure ClearStack( Var S : Stack );
 Var T : NodePtr;
 Begin
   StackError := stackOk;
   While S.Head <> nil Do
     Begin
       T := S.Head;
       S.Head := T^.Next;
       FreeMem( T^.Info, S.Size );
       Dispose( T )
     End
 End;

Procedure Push( Var S : Stack; Var E );
 Label Quit;
 Var T : NodePtr;
 Begin
   HeapError := @HeapFunc;
   StackError := stackOverflow;
   T := New( NodePtr );
   If T = nil Then Goto Quit;

   T^.Next := S.Head;
   S.Head := T;
   GetMem( T^.Info, S.Size );
   If T^.Info = nil Then Goto Quit;

   Move( E, T^.Info^, S.Size );
   StackError := stackOk;

 Quit:
   HeapError := SaveHeapError

 End;

Procedure Pop( Var S : Stack; Var E );
 Var T : NodePtr;
 Begin
   StackError := stackUnderflow;
   If S.Head = nil Then Exit;

   T := S.Head;
   S.Head := T^.Next;
   Move( T^.Info^, E, S.Size );
   FreeMem( T^.Info, S.Size );
   Dispose( T );
   StackError := stackOk
 End;


Procedure Top( Var S : Stack; Var E );
 Begin
   StackError := stackUnderflow;
   If S.Head = nil Then Exit;
   Move( S.Head^.Info^, E, S.Size );
   StackError := stackOk
 End;

Function Empty( Var S : Stack ) : Boolean;
 Begin
   Empty := (S.Head = nil)
 End;

END.


А вот пример использования:
Код

uses stackunit;

var
 si: stack;
 i, x: integer;

begin
 initstack(si, sizeof(integer));
 for i := 1 to 20 do
   push(si, i);

 while not empty(si) do
   begin
     pop(si, x);
     write(x:3);
   end;

 writeln;
end.


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 11.09.2025 18:02
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name