Материал из C\C++ эксперт
Dynamically allocated stack.
#include <iostream>
#include <cstdlib>
using namespace std;
class stack {
char *stackData;
int topOfStack;
int size;
public:
stack(int s);
~stack();
void push(char ch);
char pop();
};
stack::stack(int s)
{
cout << "Constructing a stack\n";
topOfStack = 0;
stackData = (char *) malloc(s);
if(!stackData) {
cout << "Allocation error\n";
exit(1);
}
size = s;
}
stack::~stack()
{
free(stackData);
}
void stack::push(char ch)
{
if(topOfStack==size) {
cout << "Stack is full\n";
return;
}
stackData[topOfStack] = ch;
topOfStack++;
}
char stack::pop()
{
if(topOfStack==0) {
cout << "Stack is empty\n";
return 0; // return null on empty stack
}
topOfStack--;
return stackData[topOfStack];
}
int main()
{
stack stackObject1(10), stackObject2(10);
int i;
stackObject1.push("a");
stackObject2.push("x");
stackObject1.push("b");
stackObject2.push("y");
stackObject1.push("c");
stackObject2.push("z");
for(i = 0; i <3; i++)
cout << "Pop stackObject1: " << stackObject1.pop() << endl;
for(i = 0; i <3; i++)
cout << "Pop stackObject2: " << stackObject2.pop() << endl;
return 0;
}