没有合适的资源?快使用搜索试试~ 我知道了~
首页将中缀表达式转换为后缀表达式并求值实验报告
资源详情
资源评论
资源推荐

《数据结构》实验报告
◎实验题目: 使用键盘输入表达式,计算表达式的值并输出;将表达式转化成后
缀表达式输出,利用后缀表达式求表达式的值并输出。
◎实验目的:使用栈的操作编写关于数据结构的程序。
◎实验内容:写出程序并上机调试、通过。
一、需求分析
1、演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“请输入
表达式”时输入中缀表达式。然后计算机终端输出转换后的后缀表达式及计算后
的结果。
2、程序执行的命令包括:
(1)构造链栈;(2)输入数据;(3)判断输入的表达式是否为非法表达式;
(4)将中缀表达式转换为后缀表达式;(5)计算表达式的值;(6)输出。
(7)结束
4、本程序能将中缀表达式转换为后缀表达式,并且能计算表达式的值。
5、输入及输出示例:
例 1:
请输入表达式
6+3*(6+5)
后缀表达式:6 3 6 5 + * +
计算结果为:39
Press any key to continue
例 2:
请输入表达式
6-3*(7+1
ERROR:表达式错误
Press any key to continue
二 概要设计
1.基本操作
(1)、struct node
操作结果:创建结构体
(2)、int Searchexpression(char string1[])
初始条件:表达式 string1 已经存在。
操作结果:判断表达式是否非法
(3)、struct node *Initialization()
操作结果:创建栈链。
(4)、struct node *assort(struct node *s)
初始条件:string1、string2 已存在。
操作结果:将中缀表达式转换为后缀表达式并存在 string2 中。
1

(5)、struct node *calcolate(struct node *s)
操作结果:求出表达式的值
2、模块调用图
主程序模块
创建结构体
判断表达式是否非法
将中缀表达式转换为后缀表达式
表达式求值
三 详细设计
1、每个模块:
(1) 定义结构体
struct node
{
char data;
int num;
struct node *next;
};
(2) 判断表达式是否非法
int Searchexpression(char string1[])
{
int i1,b1,b2;
int m;
m=strlen(string1);
if(string1[0]<'0'||string1[0]>'9')
{
printf("ERROR:表达式缺操作数!\n");return(WRONG);
}
for(i1=0;i1<=m;i1++)
{
if(string1[i1]=='(')
b1++;
else
if(string1[i1]==')')
b2++;
}
if(b1!=b2)
{printf("ERROR:缺少括号\n");return(WRONG);}
for(i1=0;i1<m;i1++)
2

if('0'<=string1[i1]&&string1[i1]<='9'&&'0'<=string1[i1+1]&&st
ring1[i1+1]<='9')
{ printf("ERROR:表达式缺操作符!\n");return(WRONG);}
for(i1=0;i1<=m;i1++)
if(string1[i1]=='+'&&(string1[i1+1]=='+'||
string1[i1+1]=='-'||string1[i1+1]=='*'||string1[i1+1]=='/'))
{ printf("ERROR:表达式缺操作数!\n");return(WRONG);}
else
if(string1[i1]=='-'&&(string1[i1+1]=='+'||
string1[i1+1]=='-'||string1[i1+1]=='*'||string1[i1+1]=='/'))
{ printf("ERROR: 表 达 式 缺 操 作 数 ! \
n");return(WRONG);}
else
if(string1[i1]=='*'&&(string1[i1+1]=='+'||
string1[i1+1]=='-'||string1[i1+1]=='*'||string1[i1+1]=='/'))
{printf("ERROR: 表 达 式 缺 操 作 数 ! \
n");return(WRONG);}
else
if(string1[i1]=='/'&&(string1[i1+1]=='+'||
string1[i1+1]=='-'||string1[i1+1]=='*'||string1[i1+1]=='/'))
{printf("ERROR: 表 达 式 缺 操 作 数 ! \
n");return(WRONG);}
return(RIGHT);
}
(3)、将中缀表达式转换为后缀表达式
struct node *assort(struct node *s)//输入字符串
{
struct node *p,*top;
int i;
top=s;
int m;
char a;
m=strlen(string1);
for(i=0;i<=m;i++)
{
a=string1[i];
if('0'<=string1[i]&&string1[i]<='9')
{
string2[j]=string1[i];j++;
3
剩余12页未读,继续阅读

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论3