顺序栈类模板的定义

//---------------------------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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章