一、顺序栈
1 . 栈空 top = -1
2 . 栈满 top = StackSize - 1 (StackSize 为数组长度)
二 、两栈共享空间
原因:为了避免空间的浪费
①. 栈2空 top = StackSize;
②. 栈满 即 栈1的栈顶元素和栈2的栈顶元素位于数组的相邻位置top1=top2-1(或top2 = top1+1)
③ 入栈Push
template<class T>
void Push(int i,T x)
{
if(top1==top2-1)
throw "上溢";
if(i == 1)
data[++top1]=x;
if(i == 2)
data[--top2]=x;
}
④.出栈Pop
template<class T>
void Pop(int i)
{
if(i == 1)
{
if(top1 == -1)
throw "下溢";
return data[top1--];
}
if(i == 2)
{
if(top2 == StackSize)
throw "下溢";
return data[top2++];
}
}
三、链栈
1. 入栈 Push
template<class T>
void Push(T x)
{
s = new Node;
s->data = x;
s->next = top;
top = s;
}
2.出栈Pop
template<class T>
void Pop()
{
if(top == NULL)
throw "下溢";
x = top->data;
p = top;
top=top->next;
delete p;
return x;
}
3 .栈空 top == NULL;