Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab10.doc
Скачиваний:
4
Добавлен:
06.11.2019
Размер:
118.27 Кб
Скачать

Вміст файлу “static_stack.H”

#pragma once

const unsigned stack_size = 5;

class static_stack {

private:

int arr[stack_size]; //Масив стеку

int tos; //Вершина стеку

public:

//Конструктор стеку

static_stack() {

tos = 0; //ініціалізація tos

}

//Втілити число до стеку

void push(int x) {

if (tos == stack_size) printf("Помилка: стек заповнений\n");

else {

arr[tos] = x;

tos++;

}

}

//Вилучити число із стеку

void pop() {

if (empty()) printf("Помилка: стек порожній\n");

else tos--;

}

//Повернути вершину стеку

int top() {

if (empty()) {

printf("Помилка: стек порожній\n");

return -1;

}

return arr[tos - 1];

}

//Повернути true якщо стек був порожнім

bool empty() {

if (tos == 0) return true;

return false;

}

//Надрукувати стек

void print() {

printf("Вміст стеку: ");

if (empty()) {

printf("порожній\n");

return;

}

for (int i = 0; i < tos; ++i) printf("%d ", arr[i]);

printf("\n");

}

};

Вміст файлу “dynamic_stack.H”

#pragma once

class dynamic_stack {

private:

int* arr; //Динамічний масив

int tos; //Вершина стеку

int size; //Розмір стеку

public:

//Конструктор стеку

dynamic_stack(int n) {

arr = new int[n];

if (arr == 0)

printf("Помилка: не можливо виділити пам'ять для стеку.\n");

else size = n;

tos = 0; //ініціалізація tos

}

//Конструктор копіювання

dynamic_stack(const dynamic_stack& stack) {

size = stack.size;

tos = stack.tos;

arr = new int [size];

for (int i = 0; i < tos; ++i)

arr[i] = stack.arr[i];

}

~dynamic_stack() {

if (arr != NULL)

delete [] arr;

}

//Залучити число до стеку

void push(int x) {

if (tos == size) {

int* tarr = new int[size + size / 2];

if (tarr == NULL) {

printf("Помилка: пам'ять стеку переповнена.\n");

return;

} else {

for (int i = 0; i < size; ++i)

tarr[i] = arr[i];

delete [] arr;

arr = tarr;

size += size / 2;

}

}

arr[tos] = x;

tos++;

}

//Вибрати число із стеку.

void pop() {

if (empty())

printf("Помилка: стек порожній\n");

else tos--;

}

//Повернути вершину стеку

int top() {

if (empty()) {

printf("Помилка: стек порожній\n");

return -1;

}

return arr[tos - 1];

}

//Повернути true якщо стек був порожній

bool empty() {

if (tos == 0)

return true;

return false;

}

//надрукувати стек

void print() {

printf("Вміст стеку: ");

if (empty()) {

printf("порожній\n");

return;

}

for (int i = 0; i < tos; ++i)

printf("%d ", arr[i]);

printf("\n");

printf("Вміст стеку %d\n", size);

}

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]