表达式求值

作者: Rememberautumn 分类: 未分类 发布时间: 2015-03-31 15:29 阅读: 1,980

实验5 表达式求值

实验5 表达式求值

实验目的

  • 会定义顺序栈和链栈的结点类型。
  • 掌握栈的插入和删除结点在操作上的特点。
  • 熟悉对栈的一些基本操作和具体的函数定义。

实验内容

程序1

该程序的功能是实现顺序栈的定义和操作。该程序包括定义的栈结构类型以及对每一种栈操作的具体的函数定义和主函数。

/* 定义DataType为int类型 */

typedef int DataType;

 

/* 栈的结点类型 */

#define MAXSIZE   1024

typedef struct

{DataType data[MAXSIZE];

int top;

}SeqStack;

 

/* 初始化顺序栈 */

SeqStack SeqStackInit()

 

/* 检查顺序栈是否为空 */

int SeqStackEmpty(SeqStack S)

 

/* 把S置为空栈 */

void ClearStack(SeqStack   S)

 

/* 把元素x压入栈,使其成为新的栈顶元素 */

void SeqStackPush(SeqStack S,DataType x)

 

/* 把栈顶元素弹出 */

DataType SeqStackPop(SeqStack S)

 

/* 取栈顶元素 */

DataType SeqStackGetTop(SeqStack S)

 

/*输出顺序栈中的元素*/

void SeqStackPrint(SeqStack S)

 

程序2 用顺序栈实现算术表达式求值。

将表达式看成字符串序列,输入语法正确、不含有变量的整数表达式(表达式中的数字限为单位数),利用算符的优先关系,把中序表达式转换为后序表达式后输出,然后求出该后序表达式的值。

例如:输入的表达式为2*(6-4)+8/4

转换后得到的后序表达式为264-*84/+

设计要求:在程序中构造六个子程序分别为

int empty(SeqStack stack); /*检查栈是否为空*/

int operation(char op); /*判断是否为运算符*/

int priority(char op); /*判断运算符的优先权*/

SeqStack push(SeqStack stack,char value); /*入栈*/

SeqStack pop(SeqStack stack,char *value); /*出栈*/

double count(char *backorder); /*计算逆波兰表达式的值*/

 

程序3 用链栈实现算术表达式求值。(与程序2的基本要求相同)

链栈结点的类型描述如下:

typedef int DataType;

typedef struct StackNode

{DataType data;

struct StackNode *next;

}StackNode,*LinkedStack;

 

 

 

 

 

#include<iostream>
using namespace std;
int main(){

int i,n,m,a[1000];
m=0;
char ch;
i=0;
cin>>n;
a[i]=n;
i++;
while(1){

cin>>ch;

if(ch==’-‘){

cin>>a[i];
a[i]=-a[i];
i++;
}else if(ch==’*’){
cin>>n;
a[i-1]*=n;
}else if(ch==’/’){
cin>>n;
a[i-1]/=n;

}else if(ch==’+’){
cin>>a[i];
i++;
}else if(ch==’=’){
while(i){
m+=a[i-1];
i–;
}
cout<<m<<endl;
break;
}else {
cout<<“您输入 的指令有误”<<endl;
}
}
return 0;
}

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注