Модули для реализации стека

1. Стек на массиве в статической памяти.

Спецификация СД на языке Pascal:

Unit Stack1;

Interface

Const

StackSize = 1000;

StackOk = 0;

StackOver = 1;

StackUnder= 2;

var

StackError:0..2;

Type

Index = 0..StackSize;

BaseType =...; {определить тип элемента стека}

Stack = record

Buf: array[Index]of BaseType;

Uk: Index; {указывает на элемент, являющийся

вершиной стека}

end;

procedure InitStack(var s:Stack); {инициализация стека}

function EmptyStack(var s:Stack):boolean;{стек пуст}

procedure PutStack(var s:Stack;El:BaseType); {поместить

элемент в стек}

procedure GetStack(var s:Stack;var El:BaseType);

{извлечь элемент из стека}

procedure ReadStack(const s:Stack;var El: BaseType;)

{прочитать элемент из вершины стека}

Спецификация СД на языке C:

#if!defined(__STACK1_H)

#define __STACK1_H

const StackSize = 1000;

const StackOk = 0;

const StackOver = 1;

const StackUnder = 2;

int StackError; // Переменная ошибок

typedef... BaseType; // Определить тип элемента стека

typedef struct Stack

{

BaseType Buf[StackSize];

unsigned Uk; /* Указывает на элемент, являющийся

вершиной стека */

};

void InitStack(Stack *s); // Инициализация стека

int EmptyStack(Stack *s); // Проверка: стек пуст?

void PutStack(Stack *s, BaseType E); /* Поместить элемент в стек */

void GetStack(Stack *s, BaseType *E); /* Извлечь элемент из стека */

void ReadStack(Stack *s, BaseType *E); /* Прочитать элемент из вершины стека */

#endif

2. Стек на массиве в динамической памяти.

Спецификация СД на языке Pascal:

Unit Stack2;

Interface

Const

StackOk = 0;

StackOver = 1;

StackUnder= 2;

var StackError:0..2;

Type

Index = 0..StackSize;

BaseType =...; {определить тип элемента стека}

Const

StackSize = 65520 div sizeof(BaseType);

Type

Index = 0..StackSize;

TBuf = array[Index]of BaseType;

Pbuf = ^Tbuf;

Stack = record

Buf: PBuf;

Kbuf: word; {количество элементов в массиве, запол-

няется при инициализации}

Uk: Index; {указывает на элемент, следующий за

вершиной стека}

end;

procedure InitStack(var s:Stack; var SizeBuf:word);

{инициализация стека}

function EmptyStack(var s:Stack):boolean;{стек пуст}

procedure PutStack(var s:Stack;El:BaseType); {поместить

элемент в стек}

procedure GetStack(var s:Stack;var El:BaseType);

{извлечь элемент из стека}

procedure ReadStack(const s:Stack;var El: BaseType;)

{прочитать элемент из вершины стека}

procedure DoneStack(Var S:Stack); {уничтожить стек}

Спецификация СД на языке C:

#if!defined(__STACK2_H)

#define __STACK2_H

const StackOk = 0;

const StackOver = 1;

const StackUnder = 2;

int StackError; // Переменная ошибок

typedef... BaseType; // Oпределить тип элемента стека

typedef struct Stack

{

BaseType *Buf; // Массив элементов базового типа

unsigned Kbuf; /* Количество элементов в массиве, заполняется при инициализации */

unsigned Uk; /* Указывает на элемент, следующий за

вершиной стека */

};

void InitStack(Stack *s, unsigned SizeBuf); /* Инициализация стека */

int EmptyStack(Stack *s); // Проверка: стек пуст?

void PutStack(Stack *s, BaseType E); /* Поместить элемент в стек */

void GetStack(Stack *s, BaseType *E); /* Извлечь элемент из стека */

void ReadStack(Stack *s, BaseType *E); /* Прочитать элемент из вершины стека */

void DoneStack(Stack *s); // Уничтожить стек

#endif

3. Стек на массиве в статической памяти, элементы стека – в

динамической.

Спецификация СД на языке Pascal:

Unit Stack3;

Interface

Const

StackSize = 1000;

StackOk = 0;

StackOver = 1;

StackUnder= 2;

var

StackError:0..2;

Type

Index = 0..StackSize;

BaseType = Pointer;

Stack = record

Buf: array[Index]of BaseType;

SizeEl: word; {размер элемента стека, определяется

при инициализации}

Uk: Index; {указывает на элемент, являющийся

вершиной стека}

end;

procedure InitStack(var s:Stack; size: word);

{инициализация стека}

function EmptyStack(var s:Stack):boolean;{стек пуст}

procedure PutStack(var s:Stack; var El); {поместить

элемент в стек}

procedure GetStack(var s:Stack;var El); {извлечь элемент

из стека}

procedure ReadStack(const s:Stack;var El); {прочитать

элемент из вершины стека}

Спецификация СД на языке C:

#if!defined(__STACK3_H)

#define __STACK3_H

const StackSize = 1000;

const StackOk = 0;

const StackOver = 1;

const StackUnder = 2;

int StackError; // Переменная ошибок

typedef void *BaseType;

typedef struct Stack

{

BaseType Buf[StackSize];

unsigned SizeEl; /* Размер элемента стека, определяющийся при инициализации */

unsigned Uk; /* Указывает на элемент, являющийся вершиной стека */

};

void InitStack(Stack *s, unsigned Size); /* Инициализация стека */

int EmptyStack(Stack *s); // Проверка: стек пуст?

void PutStack(Stack *s, void *E); /* Поместить элемент в стек */

void GetStack(Stack *s, void *E); /* Извлечь элемент из стека */

void ReadStack(Stack *s, void *E); /* Прочитать элемент из вершины стека */

#endif

4. Стек в динамической памяти (связанная схема).

Спецификация СД на языке Pascal:

Unit Stack4;

Interface

Const

StackOk = 0;

StackOver = 1;

StackUnder= 2;

var

StackError:0..2;

Type

BaseType =...; {определить тип элемента стека}

PtrEl = ^Element;

Element = Record

Data: BaseType;

Next: PtrEl;

End;

Stack = PtrEl; {указывает на первый элемент в ОЛС,

являющийся вершиной стека}

procedure InitStack(var s:Stack); {инициализация стека}

function EmptyStack(var s:Stack):boolean;{стек пуст}

procedure PutStack(var s:Stack;El:BaseType); {поместить

элемент в стек}

procedure GetStack(var s:Stack;var El:BaseType);

{извлечь элемент из стека}

procedure ReadStack(const s:Stack;var El: BaseType;)

{прочитать элемент из вершины стека}

procedure DoneStack(Var S:Stack); {уничтожить стек}

Спецификация СД на языке C:

#if!defined(__STACK4_H)

#define __STACK4_H

const StackOk = 0;

const StackOver = 1;

const StackUnder = 2;

int StackError; // Переменная ошибок

typedef... BaseType; // Определить тип элемента стека

typedef struct Element

{

BaseType Data;

unsigned SizeEl; /* Размер элемента стека, определяющийся

при инициализации */

Element *Next;

};

typedef Element *Stack; /* Указывает на первый элемент в ОЛС,

являющийся вершиной стека */

void InitStack(Stack *s); // Инициализация стека

int EmptyStack(Stack s); // Проверка: стек пуст?

void PutStack(Stack *s, BaseType E); /* Поместить элемент в стек */

void GetStack(Stack *s, BaseType *E); /* Извлечь элемент из стека */

void ReadStack(Stack s, BaseType *E); /* Прочитать элемент из вершины стека */

void DoneStack(Stack *s); // Уничтожить стек

#endif

5. Стек на ОЛС. Вершина стека – первый элемент ОЛС.

Спецификация СД на языке Pascal:

unit stack5;

interface

uses list1; {см лаб.раб. №5}

const StackOk=ListOk;

StackUnder=ListUnder;

StackOver=ListNotMem;

type stack=list;

procedure InitStack(var s: stack); {инициализация стека}

procedure PutStack(var s: stack; b: basetype);

{поместить элемент в стек}

procedure GetStack(var s: stack; var b: basetype);

{извлечь элемент из стека }

function EmptyStack(s: stack):boolean; {стек пуст}

procedure ReadStack(s:Stack var b: basetype); {прочитать

элемент из вершины стека}

procedure DoneStack(var s:Stack);{разрушить стек}

var stackerror:byte;

Спецификация СД на языке C:

#if!defined(__STACK5_H)

#define __STACK5_H

#include "list1.h" // Смотреть лаб. раб. №5

const StackOk = ListOk;

const StackUnder = ListUnder;

const StackOver = ListNotMem;

int StackError; // Переменная ошибок

typedef List Stack;

void InitStack(Stack *s); // Инициализация стека

void PutStack(Stack *s, BaseType E); /* Поместить элемент в стек */

void GetStack(Stack *s; BaseType *E); /* Извлечь элемент из стека */

int EmptyStack(Stack s); // Проверка: стек пуст?

void ReadStack(Stack s, BaseType *E); /* Прочитать элемент из вершины стека */

void DoneStack(Stack *s); // Уничтожить стек

#endif

6. Стек на ОЛС. Вершина стека – последний элемент ОЛС.

Спецификация СД на языке Pascal:

unit stack6;

interface

uses list3; {см лаб.раб. №5}

const StackOk=ListOk;

StackUnder=ListUnder;

StackOver=ListNotMem;

type stack=list;

procedure InitStack(var s: stack); {инициализация стека}

procedure PutStack(var s: stack;var b);

{поместить элемент в стек}

procedure GetStack(var s: stack; var b);

{извлечь элемент из стека }

function EmptyStack(s: stack):boolean; {стек пуст}

procedure ReadStack(s:Stack; var b); {прочитать

элемент из вершины стека}

procedure DoneStack(var s:Stack);{разрушить стек}

var stackerror:byte;

Спецификация СД на языке C:

#if!defined(__STACK6_H)

#define __STACK6_H

#include "list3.h" // Смотреть лаб. раб. №5

const StackOk = ListOk;

const StackUnder = ListUnder;

const StackOver = ListNotMem;

int StackError; // Переменная ошибок

typedef List Stack;

void InitStack(Stack *s); // Инициализация стека

void PutStack(Stack *s, void *E); /* Поместить элемент в стек */

void GetStack(Stack *s, void *E); /* Извлечь элемент из стека */

int EmptyStack(Stack s); // Проверка: стек пуст?

void ReadStack(Stack s, void *E); /* Прочитать элемент из вершины стека */

void DoneStack(Stack *s); // Разрушить стек

#endif

7. Стек на ОЛС. Вершина стека – первый элемент ОЛС.

Спецификация СД на языке Pascal:

unit stack7;

interface

uses list3; {см лаб.раб. №5}

const StackOk=ListOk;

StackUnder=ListUnder;

StackOver=ListNotMem;

type stack=list;

procedure InitStack(var s: stack; size: word);

{инициализация стека}

procedure PutStack(var s: stack; var b);

{поместить элемент в стек}

procedure GetStack(var s: stack; var b);

{извлечь элемент из стека }

function EmptyStack(s: stack):boolean; {стек пуст}

procedure ReadStack(s:Stack; var b); {прочитать

элемент из вершины стека}

procedure DoneStack(var s:Stack);{разрушить стек}

var stackerror:byte;

Спецификация СД на языке C:

#if!defined(__STACK7_H)

#define __STACK7_H

#include "list3.h" // Смотреть лаб. раб. №5

const StackOk = ListOk;

const StackUnder = ListUnder;

const StackOver = ListNotMem;

int StackError; // Переменная ошибок

typedef List Stack;

void InitStack(Stack *s, unsigned Size); /* Инициализация стека */

void PutStack(Stack *s, void *E); // Поместить элемент в стек

void GetStack(Stack *s; void *E); // Извлечь элемент из стека

int EmptyStack(Stack s); // Проверка: стек пуст?

void ReadStack(Stack s, void *E); /* Прочитать элемент из вершины стека */

void DoneStack(Stack *s); // Уничтожить стек

#endif

8. Стек на ОЛС. Вершина стека – первый элемент ОЛС.

Спецификация СД на языке Pascal:

unit stack8;

interface

uses list4; {см лаб.раб. №5}

const StackOk=ListOk;

StackUnder=ListUnder;

StackOver=ListNotMem;

type stack=list;

procedure InitStack(var s: stack); {инициализация стека}

procedure PutStack(var s: stack; b: basetype);

{поместить элемент в стек}

procedure GetStack(var s: stack; var b: basetype);

{извлечь элемент из стека }

function EmptyStack(s: stack):boolean; {стек пуст}

procedure ReadStack(s:Stack;var b: basetype); {прочитать

элемент из вершины стека}

procedure DoneStack(var s:Stack);{разрушить стек}

var stackerror:byte;

Спецификация СД на языке C:

#if!defined(__STACK8_H)

#define __STACK8_H

#include "list4.h" // Смотреть лаб. раб. №5

const StackOk = ListOk;

const StackUnder = ListUnder;

const StackOver = ListNotMem;

int StackError; // Переменная ошибок

typedef List Stack;

void InitStack(Stack *s); /* Инициализация стека */

void PutStack(Stack *s, BaseType E); /* Поместить элемент в стек */

void GetStack(Stack *s, BaseType *E); /* Извлечь элемент из стека */

int EmptyStack(Stack s); // Проверка: стек пуст?

void ReadStack(Stack s, BaseType *E); /* Прочитать элемент из вершины стека */

void DoneStack(Stack *s); // Уничтожить стек

#endif

9. Стек на ОЛС. Вершина стека – последний элемент ОЛС.

Спецификация СД на языке Pascal:

unit stack9;

interface

uses list5; {см лаб.раб. №5}

const StackOk=ListOk;

StackUnder=ListUnder;

StackOver=ListNotMem;

type stack=list;

procedure InitStack(var s: stack); {инициализация стека}

procedure PutStack(var s: stack; b: basetype);

{поместить элемент в стек}

procedure GetStack(var s: stack; var b: basetype);

{извлечь элемент из стека }

function EmptyStack(s: stack):boolean; {стек пуст}

procedure ReadStack(s:Stack;var b: basetype); {прочитать

элемент из вершины стека}

procedure DoneStack(var s:Stack);{разрушить стек}

var stackerror:byte;

Спецификация СД на языке C:

#if!defined(__STACK9_H)

#define __STACK9_H

#include "list5.h" // Смотреть лаб. раб. №5

const StackOk = ListOk;

const StackUnder = ListUnder;

const StackOver = ListNotMem;

int StackError; // Переменная ошибок

typedef List Stack;

void InitStack(Stack *s); /* Инициализация стека */

void PutStack(Stack *s, BaseType E); /* Поместить элемент в стек */

void GetStack(Stack *s, BaseType *E); /* Извлечь элемент из стека */

int EmptyStack(Stack s); // Проверка: стек пуст?

void ReadStack(Stack s, BaseType *E); /* Прочитать элемент из вершины стека */

void DoneStack(Stack *s); // Уничтожить стек

#endif

10. Стек на ПЛС. Вершина стека – первый элемент ПЛС.

Спецификация СД на языке Pascal:

unit stack10;

interface

uses list6; {см лаб.раб. №5}

const StackOk=ListOk;

StackUnder=ListUnder;

StackOver=ListNotMem;

type stack=list;

procedure InitStack(var s: stack; size: word);

{инициализация стека}

procedure PutStack(var s: stack; var b);

{поместить элемент в стек}

procedure GetStack(var s: stack; var b);

{извлечь элемент из стека }

function EmptyStack(s: stack):boolean; {стек пуст}

procedure ReadStack(s:Stack; var b); {прочитать

элемент из вершины стека}

procedure DoneStack(var s:Stack);{разрушить стек}

var stackerror:byte;

Спецификация СД на языке C:

#if!defined(__STACK10_H)

#define __STACK10_H

#include "list6.h" // Смотреть лаб. раб. №5

const StackOk = ListOk;

const StackUnder = ListUnder;

const StackOver = ListNotMem;

int StackError; // Переменная ошибок

typedef List Stack;

void InitStack(Stack *s, unsigned Size); /* Инициализация стека */

void PutStack(Stack *s, void *E); // Поместить элемент в стек

void GetStack(Stack *s, void *E); // Извлечь элемент из стека

int EmptyStack(Stack s); // Проверка: стек пуст?

void ReadStack(Stack s, void *E); /* Прочитать элемент из вершины стека */

void DoneStack(Stack *s); // Уничтожить стек

#endif

11. Стек на ПЛС. Вершина стека – последний элемент ПЛС.

Спецификация СД на языке Pascal:

unit stack11;

interface

uses list8; {см лаб.раб. №5}

const StackOk=ListOk;

StackUnder=ListUnder;

StackOver=ListNotMem;

type stack=list;

procedure InitStack(var s: stack; SizeMem, SizeEl:Word);

{инициализация стека}

procedure PutStack(var s: stack; var b);

{поместить элемент в стек}

procedure GetStack(var s: stack; var b);

{извлечь элемент из стека }

function EmptyStack(s: stack):boolean; {стек пуст}

procedure ReadStack(s:Stack; var b); {прочитать

элемент из вершины стека}

procedure DoneStack(var s:Stack);{разрушить стек}

var stackerror:byte;

Спецификация СД на языке C:

#if!defined(__STACK11_H)

#define __STACK11_H

#include "list8.h" // Смотреть лаб. раб. №5

const StackOk = ListOk;

const StackUnder = ListUnder;

const StackOver = ListNotMem;

int StackError; // Переменная ошибок

typedef List Stack;

void InitStack(Stack *s, unsigned SizeMem, unsigned SizeEl);

/* Инициализация стека */

void PutStack(Stack *s, void *E); // Поместить элемент в стек

void GetStack(Stack *s, void *E); // Извлечь элемент из стека

int EmptyStack(Stack s); // Проверка: стек пуст?

void ReadStack(Stack s, void *E); /* Прочитать элемент из вершины стека */

void DoneStack(Stack *s); // Уничтожить стек

#endif


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: