顺序栈与栈链以及其应用

顺序栈

template<class T> class seqstack
{
public:
seqstack(int size)
{
if(size>0)
{  maxsize=size;
stack=new T[maxsize-1];}
top=-1;
}
~seqstack()
{
delete[]stack;}
void push(T x);
void pop(T &x);
bool stackempty(){ return top==-1;}
bool stackfull(){ return top==maxsize;}
T gettopdata();
private:
int maxsize;
int top;
T *stack;
};
template<class T> void seqstack::push(T x)
{
if(stackfull())
return;
stack[++top]=x;
}
template<class T> void seqstack::pop(T &x)
{
if(stackempty())
return;
x=stack[top--];
}
template<class T> T seqstack::gettopdata()
{
if(stackempty())
return -1;
else 
return stack[top];
}

链栈

template<class T> class stacklink;
template<class T> class stacknode
{
public:
friend class stacklink<T>;
private:
T data;
stacknode<T>* next;
};
template<class T> class stacklink
{
public:
stacklink(){top=NULL;}
~stacklink();
bool stackempty(){return top==NULL;}
void push(T x);
void pop(T &x);
T gettop();
private:
stacknode<T>*top;
};
template<class T> void stacklink<T>::push(T x)
{
stacknode<T>*newnode;
newnode=new stacknode<T>;
if(newnode==NULL)
return;
newnode->data=x;
newnode->next=top;
top=newnode;
}
template<class T> void stacklink<T>::pop(T &x)
{
stacknode<T>*p=top;
if(stackempty())
return;
else

x=top->data;
top=p->next;
delete p;
}
}
template<class T> T stacklink<T>::gettop()
{
if(stackempty())
return -1;
else
return top->data;
}
template<class T> stacklink<T>::~stacklink()
{
stacknode<T>*p;
while(top)
{
p=top;
top=p->next;
delete p;
}

顺序栈的应用:圆括号匹配

#include<iostream>
using namespace std;
#include"stacklist.h"
bool expr()
{
seqstack<char>s;
char x,ch=getchar();
while(ch!='/n'){
if(ch=='(')
s.push(ch);
else if(ch==')')
{if(s.stackempty())
return false;}
else 
s.pop(x);
ch=getchar();
}
if(s.stackempty())
return true;
else
return false;
}
void main()
{
cout<<expr();}

链栈的主程序测试:

#include<iostream>
#include"stacklink.h"
using namespace std;
void main()
{
char ch,i;
stacklink<char>s;
for(i='a';i<='d';i++)
s.push(i);
cout<<"栈顶元素为:"<<s.gettop()<<endl;
for(i=0;i<4;i++){
s.pop(ch);
cout<<ch<<" ";
}
cout<<endl;
s.pop(ch);
cout<<ch<<endl;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值