用一个模板类来写数组栈:
#include <iostream>
using namespace std;
template <class T>
class Stack
{
protected:
int top; //栈顶指针
int Max_size; //栈的大小
T *stackptr; //模板指针
public:
Stack(int s); //构造函数
~Stack(); //析构函数
bool isEmpty(); //判断是否为空
bool isFull(); //判断是否为满
bool push(const T &t); //入栈操作,const保证了入栈的值不变
bool pop(T & t); //出栈操作
};
template<class T>
Stack<T>::Stack(int s)
{
top = -1;
Max_size = s>0?s:10;
stackptr = new T[Max_size]; //分配内存空间
}
template<class T>
Stack<T>::~Stack() //释放内存
{
delete [] stackptr;
top = 0;
Max_size = 0;
stackptr = NULL;
}
template <class T>
bool Stack<T>::isEmpty()
{
return top == -1; //栈顶指针在栈底时 所以为空
}
template<class T>
bool Stack<T>::isFull()
{
return top == Max_size-1; //因为是数组所以要减一
}
template<class T>
bool Stack<T>::push(const T&t)
{
if(!isFull())
{
stackptr[++top] = t; //入栈时先++,在入栈
return true;
}
return false;
}
template<class T>
bool Stack<T>::pop(T &t)
{
if(!isEmpty())
{
t = stackptr[top--]; //出栈时先把值传出来,在--
return true;
}
return false;
}
int main()
{
Stack<int> s(6);
int i = 1;
while(s.push(i))
{
cout << i << endl; //输出压入栈的值
i+=i;
}
cout << "-----------------" << endl;
while(s.pop(i))
{
cout << i << endl; //输出 出栈的值
}
return 0;
}