栈里面还包含一种两栈共享空间的形式:
就是把一个数组,从中间的每个位置分开,分别以两个端点为底(栈1与栈2),用两个指针表示即可。
栈1为空则top1=-1,栈2为空top2=maxsize。和上次那个栈差不多,就不再啰嗦。
下面直接说线性栈:
主类
struct Node
{
int data;
Node *next;
};
class LinkStack
{
Node *top;
public:
LinkStack(){top=NULL;}
~LinkStack();
void pushin(int x);
int poptop();
int gettop();
bool isempty();
};
功能得实现
析构函数:
LinkStack::~LinkStack()
{
while(top)
{
Node *s;
s=top->next;
delete top;
top=s;
}
}
判断是否为空:
bool LinkStack::isempty()
{
if(top==NULL)
{
return true;
}
else
{
return false;
}
}
新加数据
void LinkStack::pushin(int x)
{
Node *s=new Node;
s->data=x;
s->next=top;
top=s;
}
返回栈顶
int LinkStack::gettop()
{
return top->data;
}
出栈
int LinkStack::poptop()
{
if(top==NULL)
{
cout<<"栈为空";
}
else
{
int x=top->data;
Node *p;
p=top;
top=top->next;
delete p;
return x;
}
}
简单的线性栈就是这样了。
栈的经典使用地方就是后缀以及中缀表达式的求法,网上有很多现成的代码,这里就不再给出。