栈应用后缀表达式计算
- 格式:docx
- 大小:39.59 KB
- 文档页数:5
后缀表达式计算
LinkStack.cpp
#include
using namespace std;
//单链表的结点结构体:
template
struct Node
{ DataType data;
Node
};
//带头结点的单链表类的声明
template
class LinkStack
{ public:
LinkStack( ){ top=NULL; } //构造函数
~LinkStack( ); //析构函数
bool IsEmpty( ); //栈空操作
DataType GetTop ( ); //得到栈顶值操作
void Push( DataType x ); //进栈操作
DataType Pop( ); //出栈操作
private:
Node
};
//析构函数,析构函数将单链表中所有结点的存储空间释放。template
LinkStack
{ Node
while (top !=NULL)
{ q = top; //暂存释放结点
top = top->next; //top指向被释放结点的下一个结点 delete q; //释放结点
}
cout<<"链表已经删除。"< } //栈空返回true,否则返回false template bool LinkStack { return (top==NULL)?true:false; }; //进栈操作 template void LinkStack { Node s=new Node s->next=top; top=s; }; //出栈操作 template DataType LinkStack { Node DataType x; if (IsEmpty()) { cout<< "栈空无值弹出" < p=top; top=top->next; delete p; return x; }; //返回栈顶值操作 template DataType LinkStack { if (IsEmpty()) { cout<< "栈空无值" < exit(1); } return top->data; }; PostExp.cpp #include "LinkStack.h" //后缀表达式计算的栈类声明 template class PostExp { public: PostExp( ){ } ; //构造函数 void Run( ); //执行表达式计算 void Clear( ); //清栈操作 private: LinkStack void Enter( DataType num); //进栈操作 bool In(char op); //判断操作数 bool GetTwoOperands(DataType& operand1,DataType& operand2); //从栈中推出两个操作数 void Compute(char op); //形成运算指令,进行计算 }; //进栈操作 template void PostExp { s.Push(num); } //将操作数的值num进操作数栈 //从栈中推出两个操作数 template bool PostExp operand1,DataType& operand2) { if(s.IsEmpty()) //判断栈是否空 { cout<< "缺少右操作数" < operand1=s.Pop(); if(s.IsEmpty()) { cout<< "缺少左操作数" < operand2=s.Pop(); //去左操作数 return true; }