#include<iostream>
using namespace std;
class Stack
{
int top;//栈顶位置(下标)
int* elements; //动态建立的栈
int maxSize; //栈最大容纳的元素个数
public:
Stack(int = 20); //形参为栈能够容纳的元素个数
~Stack();
Stack(const Stack&);
void Push(const int& data); //将data压栈
int Pop(); //弹出栈顶元素
void MakeEmpty(); //清空栈,数据重新从0下标存放
bool IsEmpty() const; //栈是否为空
bool IsFull() const; //栈是否已满
};
Stack::Stack(int size)
{
maxSize = size;
elements = new int[maxSize];
top = -1;
}
Stack::Stack(const Stack& t)
{
top = t.top;
maxSize = t.maxSize;
elements = new int[maxSize];
int i;
for (i = 0; i < maxSize; i++)elements[i] = t.elements[i];
}
Stack::~Stack()
{
delete[]elements;
}
void Stack::Push(const int& data)
{
top = top + 1;
elements[top] = data;
}
int Stack::Pop()
{
if (top == -1) { elements = NULL; return 0; }
return elements[top--];
}
void Stack::MakeEmpty()
{
top = -1;
}
bool Stack::IsEmpty() const
{
if (top == -1)return 1;
else return 0;
}
bool Stack::IsFull() const
{
if (top + 1 == maxSize) return 1;
else return 0;
}
int main()
{
int num, data;
cin >> num;//栈中欲存储的元素个数
Stack stack1(num);
for (int i = 0; i < num; i++)
{
cin >> data;
stack1.Push(data);
}
Stack stack2(stack1);
if (stack2.IsFull()) cout << "Stack Full" << endl;
while (!stack2.IsEmpty())//栈非空
cout << stack2.Pop() << ' ';
cout << endl;
stack1.MakeEmpty();
cout << stack1.IsEmpty() << endl;
return 0;
}