//---------------------------arrStack.h-----------------------------------
template <class T>
class arrStack
{
private: // 栈的顺序存储
int mSize; // 栈中最多可存放的元素个数
int top; // 栈顶位置,应小于mSize
T *data; // 存放栈元素的数组
public: // 栈的运算的顺序实现
arrStack();
~arrStack();
arrStack(int size)
{ // 创建一个给定长度的顺序栈实例
mSize = size; top = -1;
data = new T[mSize];
}
void clear(); // 变为空栈
bool push(T const item); // item入栈,成功则返回真,否则返回假
bool pop(T & item); // 返回栈顶内容并弹出,成功返回真,否则返回假
bool getTop(T& item); // 返回栈顶内容但不弹出,成功返回真,否则返回假
bool isEmpty(); // 若栈已空返回真
bool isFull(); // 若栈已满返回真
void print();
};
template <class T>
arrStack<T>::arrStack()
{ // 创建一个顺序栈的实例
top = -1;
}
template <class T>
arrStack<T>::~arrStack()
{ // 析构函数
delete [] data;
//cout<<"调用析构函数!"<<endl;
}
template <class T>
void arrStack<T>::clear()
{ // 清空栈内容
top = -1;
}
template <class T>
bool arrStack<T>::push(T item)
{ // item入栈,成功则返回真,否则返回假
if(isFull())
{
cout<<"栈已满!"<<endl;
return false;
}
else
{
data[++top]=item;
return true;
}
}
template <class T>
bool arrStack<T>::pop(T & item) // 返回栈顶内容并弹出,成功返回真,否则返回假
{
if(isEmpty())
{
cout<<"栈为空!"<<endl;
return false;
}
else
{
item=data[top--];
return true;
}
}
template <class T>
bool arrStack<T>::getTop(T& item) // 返回栈顶内容但不弹出,成功返回真,否则返回假
{
if(isEmpty())
{
cout<<"栈为空!"<<endl;
return false;
}
else
{
item=data[top];
return true;
}
}
template <class T>
bool arrStack<T>::isEmpty() // 若栈已空返回真
{
return (top==-1);
}
template <class T>
bool arrStack<T>::isFull() // 若栈已满返回真
{
return (top==mSize-1);
}
template <class T>
void arrStack<T>::print() //输出栈内容
{
for(int i=0;i<=top;i++)
cout<<data[i]<<" ";
cout<<endl;
}
*************************************arrStackMain.cpp**************************************************
#include "iostream"
#include "arrStack.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"-----------------------初始化栈------------------------"<<endl;
arrStack<int> obj(7);
int i;
int num;
int contant;
cout<<"请输入需要初始化栈中的元素个数(小于等于7):";
cin>>num;
for(i=0;i<num;i++)
{
cout<<"请输入第"<<i+1<<"个元素的值(以回车结束):";
cin>>contant;
obj.push(contant);
}
obj.print();
cout<<"------------------向栈中压入元素13--------------------"<<endl;
obj.push(13);
obj.print();
cout<<"---------------------出栈操作-------------------------"<<endl;
obj.pop(contant);
cout<<"出栈的元素为:"<<contant<<endl;
cout<<"-------------------返回栈顶元素-----------------------"<<endl;
obj.getTop(contant);
cout<<"栈顶元素为:"<<contant<<endl;
cout<<"----------------------清空栈--------------------------"<<endl;
obj.clear();
if(obj.isEmpty())
cout<<"清空成功,栈为空!"<<endl;
else
cout<<"清空失败,栈不为空!"<<endl;
cout<<"-------------------调用析构函数-----------------------"<<endl;
return 0;
}