栈的顺序实现方法
template<class T>
class stack
{
public:
void Clear(); //清空栈
bool Push(const T item);//栈的压入操作
bool Pop(T & item);//读取栈顶元素的值并删除
bool Top(T & item);//读取栈顶的元素色值不删除
bool isEmpty();//判断栈是否为空
bool isFull();//判断栈是否已满
};
template <class T>
class ArrayStack:public stack<T>
{
private:
int maxSize;//栈的最大值
int top;//栈顶的位置
T *st;//存放栈的数组
public:
ArrayStack(int size)//创建一个给定长度的栈
{
maxSize=size;
top=-1;
st=new T[maxSize];
}
ArrayStack()//创建一个为给定长度的栈
{
top=-1;
}
~ArrayStack()//析构函数
{
delete[]st;
}
void Clear()//清空栈的内容
{
top=-1;
}
bool Push(const T item)//入栈操作
{
if(top==maxSize-1)
cout<<"栈满溢出"<<endl;
return false;
else
{
st[++top]=item;//入栈,改变栈顶指针
return true;
}
}
bool Pop(T&item)//出栈操作
{
if(top==-1)
{
cout<"栈为空,不能进行删除操作"<<endl;
return false;
}
else
{
item=st[top--];//读取栈顶元素,并修改栈顶指针
return true;
}
}
bool Top(T &item)//读取栈顶元素,但不删除
{
if(top==-1)
{
cout<<"栈为空,无数据"<<endl;
return false;
}
else
{
item=st[top];
return true;
}
}
};
当入栈操作遇到栈满的情况时可用动态数组扩大栈的容量
template <class T>
bool ArrayStack::push(const T item)
{
if(top==maxsize-1)
{
T*newSt=new T [maxsize*2];
for(int i=0;i<maxsize;i++)
newSt[i]=St[i];
delete[]St;
st=newSt;
maxsize*=2;
st[++top]=item;
return true;
}
else
{
st[++top]=item;
return true;
}
}