Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРАКТИКУМ_4.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
292.35 Кб
Скачать

42. Работа со стеком динамическое распределение памяти

(автор Лебедев С.Н.)

#include "stdafx.h"

#include <math.h>

#include <iostream>

using namespace std;

/***

*

* КЛАСС: item

*

* НАЗНАЧЕНИЕ: Контейнер для элементов структуры

*

****/

class item

{

char info; // информация в узле(ячейке)

item *prev; // ссылка на предидущий узел(ячейку)

public:

item(char, item *); // конструктор

~item(); // дестуктор

char get_info();

item* get_prev();

void set_info(char);

void set_prev(item*);

};

item::item(char ch, item * previous)

{

info = ch;

prev = previous;

}

item::~item()

{

}

char item::get_info()

{

return info;

}

item* item::get_prev()

{

return prev;

}

void item::set_info(char ch)

{

info=ch;

}

void item::set_prev(item* previous)

{

prev=previous;

}

/***

*

* КЛАСС: stack

*

* НАЗНАЧЕНИЕ: Организация структуры типа стек

*

****/

class stack

{

item *top; // указатель на вершину стека

public:

stack(); // конструктор стека

~stack(); // дестуктор стека

void push(char ch); // добавление в стек элемента

char pop(); // удаление из стека элемента

};

// КОНСТРУКТОР

stack::stack()

{

top=NULL;

}

// ДЕСТРУКТОР

stack::~stack()

{

while(top != NULL)

{ item* temp=top;

top=temp->get_prev();

delete temp;

}

}

// ДОБАВЛЕНИЕ

void stack::push(char ch)

{

item *temp = new item(ch, top);

top=temp;

}

// УДАЛЕНИЕ

char stack::pop()

{

char ch;

item* temp;

if (top == NULL)

{

cout << "stack is empty ";

return NULL;

}

ch=top->get_info();

temp=top;

top=temp->get_prev();

delete temp;

return ch;

}

int main()

{

stack *s = new stack; // создание объекта стек

int i,n;

char ch;

cout<< "Enter size of stack\n";

cin>>n;

cout<<" Enter items of stack\n";

for(i=1;i<=n;i++)

{

cin>>ch;

s->push(ch);

}

cout <<"\n Enter for pop Y Enter for not pop N \n";

cin>>ch;

while(ch!='N')

{

cout << s->pop()<< "\n";

cout <<"\n Enter for pop Y Enter for not pop N \n";

cin>>ch;

}

delete s; // удаление объекта стек

return 0;

}

55