顺序栈
顺序栈继承了虚拟栈类,并用数组存储栈的元素。顺序栈的实现,本质上是顺序表实现的简化。顺序栈以线性表的表尾作为栈顶,即当栈中有n个元素时把位置n-1作为栈顶,这样每次push或者pop操作的时间代价仅为θ(1)。
下面是顺序栈的实现:
template <class Elem>
class AStack : public Stack<Elem>
{
private:
int size; //栈的最大范围
int top; //栈顶元素 以及栈当前的大小
int *listArray; //存放栈的元素
enum { DefaultListSize = 50 }; //栈的默认最大范围
public:
AStack(int sz = DefaultListSize)
{
size = sz;
top = 0;
listArray = new Elem[sz];
}
~AStack() { delete [] listArray; }
// 清空栈内元素,把top设为0即可
void clear() { top = 0; }
// 入栈
bool push(const Elem& elem)
{
if (top == size) return false;
listArray[top++] = elem;
return true;
}
// 出栈
bool pop(Elem& elem)
{
if (top == 0) return false;