欢迎来到天天文库
浏览记录
ID:11301446
大小:39.59 KB
页数:5页
时间:2018-07-11
《栈应用后缀表达式计算》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、后缀表达式计算LinkStack.cpp#includeusingnamespacestd;//单链表的结点结构体:templatestructNode{DataTypedata;Node*next;};//带头结点的单链表类的声明templateclassLinkStack{public:LinkStack(){top=NULL;}//构造函数~LinkStack();//析构函数boolIsEmpty();//栈空操作DataTypeGetTop();
2、//得到栈顶值操作voidPush(DataTypex);//进栈操作DataTypePop();//出栈操作private:Node*top;};//析构函数,析构函数将单链表中所有结点的存储空间释放。templateLinkStack::~LinkStack(){Node*q;while(top!=NULL){q=top;//暂存释放结点top=top->next;//top指向被释放结点的下一个结点deleteq;//释放结点}cout<<"链表已经删除。"<
3、boolLinkStack::IsEmpty(){return(top==NULL)?true:false;};//进栈操作templatevoidLinkStack::Push(DataTypex){Node*s;s=newNode;//申请一个数据成为x的结点ss->data=x;s->next=top;top=s;};//出栈操作te
4、mplateDataTypeLinkStack::Pop(){Node*p;DataTypex;if(IsEmpty()){cout<<"栈空无值弹出"<data;p=top;top=top->next;deletep;returnx;};//返回栈顶值操作templateDataTypeLinkStack::GetTop(){if(IsEmpty()){cout<<"栈空无值"<5、exit(1);}returntop->data;};栈应用5PostExp.cpp#include"LinkStack.h"//后缀表达式计算的栈类声明templateclassPostExp{public:PostExp(){};//构造函数voidRun();//执行表达式计算voidClear();//清栈操作private:LinkStacks;//栈对象svoidEnter(DataTypenum);//进栈操作boolIn(charop);//判断操作数boolGetTwoOperands(6、DataType&operand1,DataType&operand2);//从栈中推出两个操作数voidCompute(charop);//形成运算指令,进行计算};//进栈操作templatevoidPostExp::Enter(DataTypenum){s.Push(num);}//将操作数的值num进操作数栈//从栈中推出两个操作数templateboolPostExp::GetTwoOperands(DataType&operand1,DataT7、ype&operand2){if(s.IsEmpty())//判断栈是否空{cout<<"缺少右操作数"<voidPostExp::Compute(charop){boolretult;DataTypeoperand8、1,operand2;retult=GetTwoOperands(operand
5、exit(1);}returntop->data;};栈应用5PostExp.cpp#include"LinkStack.h"//后缀表达式计算的栈类声明templateclassPostExp{public:PostExp(){};//构造函数voidRun();//执行表达式计算voidClear();//清栈操作private:LinkStacks;//栈对象svoidEnter(DataTypenum);//进栈操作boolIn(charop);//判断操作数boolGetTwoOperands(
6、DataType&operand1,DataType&operand2);//从栈中推出两个操作数voidCompute(charop);//形成运算指令,进行计算};//进栈操作templatevoidPostExp::Enter(DataTypenum){s.Push(num);}//将操作数的值num进操作数栈//从栈中推出两个操作数templateboolPostExp::GetTwoOperands(DataType&operand1,DataT
7、ype&operand2){if(s.IsEmpty())//判断栈是否空{cout<<"缺少右操作数"<voidPostExp::Compute(charop){boolretult;DataTypeoperand
8、1,operand2;retult=GetTwoOperands(operand
此文档下载收益归作者所有