后缀表达式计算

后缀表达式计算:

#include

#include

#include

#include

using namespace std;

templateclass Stack;

templateclass Node{

T info;

Node*link;

public:

Node(T data=0,Node*next=NULL){

info=data;

link=next;

}

friend class Stack;

};

templateclass Stack{

Node*top;

public:

Stack(){top=NULL;}

~Stack();

void Push(const T &data);

T Pop();

T GetTop();

void MakeEmpty();

bool IsEmpty(){return top==NULL;};

};

templateStack::~Stack(){MakeEmpty();} templatevoid Stack::MakeEmpty(){ Node*temp;

while(top!=NULL){

temp=top;

top=top->link;

delete temp;

};

}

templatevoid Stack::Push(const T&data){ top=new Node(data,top);

}

templateT Stack::Pop(){

assert(!IsEmpty());

Node*temp=top;

T data=temp->info;

top=top->link;

delete temp;

return data;

}

templateT Stack::GetTop(){

assert(!IsEmpty());

return top->info;

}

class Calculator{

StackNstack;

public:

Calculator(void){};

void Cal(void);

void GetTwoNum(int &Num1,int &Num2); void Compute(char Opr);

void Clear(void);

};

void Calculator::Clear(){

Nstack.MakeEmpty();

}

void Calculator::GetTwoNum(int &Num1,int &Num2){ Num1=Nstack.Pop();

Num2=Nstack.Pop();

}

void Calculator::Compute(char Opr){

int Num1,Num2;

if(Opr!='=')GetTwoNum(Num1,Num2);

switch(Opr){

case'+':Nstack.Push(Num2+Num1);break;

case'-':Nstack.Push(Num2-Num1);break;

case'*':Nstack.Push(Num2*Num1);break;

case'/':Nstack.Push(Num2/Num1);break;

case'=':cout

}

void Calculator::Cal(){

bool b1=true,b2=true;

char ch1,str[10];

while(b2){

cin>>ch1;

if(ch1>='0'&&ch1

str[0]=ch1;

str[1]='\0';

Nstack.Push(atoi(str));

}

else {

switch(ch1){

case'c':Clear();break;

case'+':

case'-':

case'*':

case'/':

Compute(ch1);

break;

case'=':

Compute(ch1);

b2=false;

Clear();

break;

};

};

};

}

int main(){

Calculator Calcul;

cout

return 0;

}

后缀表达式计算:

#include

#include

#include

#include

using namespace std;

templateclass Stack;

templateclass Node{

T info;

Node*link;

public:

Node(T data=0,Node*next=NULL){

info=data;

link=next;

}

friend class Stack;

};

templateclass Stack{

Node*top;

public:

Stack(){top=NULL;}

~Stack();

void Push(const T &data);

T Pop();

T GetTop();

void MakeEmpty();

bool IsEmpty(){return top==NULL;};

};

templateStack::~Stack(){MakeEmpty();} templatevoid Stack::MakeEmpty(){ Node*temp;

while(top!=NULL){

temp=top;

top=top->link;

delete temp;

};

}

templatevoid Stack::Push(const T&data){ top=new Node(data,top);

}

templateT Stack::Pop(){

assert(!IsEmpty());

Node*temp=top;

T data=temp->info;

top=top->link;

delete temp;

return data;

}

templateT Stack::GetTop(){

assert(!IsEmpty());

return top->info;

}

class Calculator{

StackNstack;

public:

Calculator(void){};

void Cal(void);

void GetTwoNum(int &Num1,int &Num2); void Compute(char Opr);

void Clear(void);

};

void Calculator::Clear(){

Nstack.MakeEmpty();

}

void Calculator::GetTwoNum(int &Num1,int &Num2){ Num1=Nstack.Pop();

Num2=Nstack.Pop();

}

void Calculator::Compute(char Opr){

int Num1,Num2;

if(Opr!='=')GetTwoNum(Num1,Num2);

switch(Opr){

case'+':Nstack.Push(Num2+Num1);break;

case'-':Nstack.Push(Num2-Num1);break;

case'*':Nstack.Push(Num2*Num1);break;

case'/':Nstack.Push(Num2/Num1);break;

case'=':cout

}

void Calculator::Cal(){

bool b1=true,b2=true;

char ch1,str[10];

while(b2){

cin>>ch1;

if(ch1>='0'&&ch1

str[0]=ch1;

str[1]='\0';

Nstack.Push(atoi(str));

}

else {

switch(ch1){

case'c':Clear();break;

case'+':

case'-':

case'*':

case'/':

Compute(ch1);

break;

case'=':

Compute(ch1);

b2=false;

Clear();

break;

};

};

};

}

int main(){

Calculator Calcul;

cout

return 0;

}


相关内容

  • 数据结构 后缀表达式的计算
  • 深 圳 大 学 实 验 报 告 课程名称: 数据结构 实验名称: 后缀表达式的计算 班 级: 1 姓 名: 同 组 人: 无 实验日期: 2011 年 10 月 11 日 教师签字:一.实验目的 熟悉栈的使用. 掌握如何使用C 语言实现栈的说明.创建以及进栈和出栈等操作. 二.实验要求 熟悉C 语言 ...

  • 算术表达式与二叉树
  • 目录 一.系统开发的背景 ................................................................................................................ 1 二.系统分析与设计 ............ ...

  • 张瑞编译原理实验报告
  • 黑龙江大学 "编译原理课程设计"读书报告 学院 年级 专业 学号 姓名 报告日期 成绩 软件学院 2012级 软件工程 20122515 张瑞 2014年6月28日 黑龙江大学计算机科学技术学院 黑龙江大学软件学院 概述 "编译原理"课程是计算机专业中一门重要 ...

  • 四则运算c++实现
  • 一.需求分析 1. 利用二叉树后序遍历来实现表达式的转换,同时可以使用实验3的结果来求解后缀表达式的值. 2. 输入输出格式: 输入:在字符界面上输入一个中缀表达式,回车表示结束. 输出:如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开:如果不正确 ...

  • 基于二叉树的算术表达式计算与实现
  • 科技教育创新 Education DOI:10.3969/j.issn.1001-8972.2012.13.135 中国科技信息2012年第13期 CHINA SCIENCE AND TECHNOLOGY INFORMATION Jul.2012 基金项目:高职高专计算机类专业2012年度规划课题( ...

  • 计算机系统第三章答案
  • 习 题 3. 参考答案: (1)后缀:w , 源:基址+比例变址+偏移, 目:寄存器 (2)后缀:b , 源:寄存器, 目:基址+偏移 (3)后缀:l , 源:比例变址, 目:寄存器 (4)后缀:b , 源:基址, 目:寄存器 (5)后缀:l , 源:立即数, 目:栈 (6)后缀:l , 源:立即数 ...

  • 高中英语常见构词法单词一览表
  • 附二.英语常见构词法 一.常见前缀 1. 前缀 anti- "反,抗,阻,排斥" anti-bacterial 抗菌的 anti-body 抗体 anti-fascist 反法西斯主义者 anti-gas 防毒气的 anti-imperialist 反帝的 anti-Japane ...

  • 计算机导论第3章 程序设计语言(答案)
  • 第3章 程序设计语言 习 题 一.选择题 1. A 2. A 3. D 4. A 5. AB 6. C 7.D 8.C 9.D 10. D 11.ABCD 12.B 13.A 14.ABD 二.简答题 1.简述程序的概念. 答:一个程序就是能够实现特定功能的一组指令序列的集合.或者程序=算法+数据结 ...

  • 2013年广州市中小学电脑制作活动方案
  • 2013年广州市中小学电脑制作活动方案 各公办中小学.民办及企事业办学校: 2013年广州市中小学电脑制作活动"电脑作品评选项目" 的作品收评工作即将开始,请各校安排专业人员,认真组织学生开展制作活动.现将有关事项通知如下: 一.参赛对象 广州市普通高中.初中.小学的在校学生(包 ...