Вміст файлу “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);
}
};
