数据结构~栈和队列应用表达式求值Word格式文档下载.doc
- 文档编号:13181470
- 上传时间:2022-10-07
- 格式:DOC
- 页数:7
- 大小:56KB
数据结构~栈和队列应用表达式求值Word格式文档下载.doc
《数据结构~栈和队列应用表达式求值Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《数据结构~栈和队列应用表达式求值Word格式文档下载.doc(7页珍藏版)》请在冰豆网上搜索。
表达式的后缀表达式为:
9247*+5/-3+
3、数据结构及算法思想:
表达式计算是实现程序设计逻辑语言的基本问题之一,也是栈和队列应用的一个典型的例子。
该设计是先通过栈将中缀表达式转换为后缀表达式,在转换过程中又用到了队列的操作。
而在得到后缀表达式之后,又用到队列的操作对生成的后缀表达式进行计算。
在整个设计的实现过程中,用到的都是栈和队列的概念。
4、模块化分:
本程序分为2个模块:
(1)中缀表达式转换为后缀表达式;
(2)求后缀表达式
5、详细设计及运行结果:
(1)中缀表达式转换为后缀表达式
voidCTPostExp(SeqQueue*Q){
SeqStackS;
//运算符栈
charc,t;
InitStack(&
S);
//初始化栈
Push(&
S,'
#'
);
//压入栈底元素‘#’
do{//扫描中缀表达式
c=getchar();
switch(c){
case'
'
:
break;
//去除空格符
0'
1'
2'
3'
4'
5'
6'
7'
8'
9'
EnQueue(Q,c);
('
Push(&
S,c);
)'
do{
t=Pop(&
if(t!
='
&
t!
)EnQueue(Q,t);
}while(t!
S.top!
=-1);
+'
-'
*'
/'
while(Priority(c)<
=Priority(GetTop(S))){
t=Pop(&
EnQueue(Q,t);
}
Push(&
}while(c!
//以'
号结束表达式扫描
}
(2)后缀表达式的计算
DataTypeCPostExp(SeqQueueQ){
SeqStackS;
charch;
intx,y;
InitStack(&
while(!
QueueEmpty(Q)){
ch=DeQueue(&
Q);
if(ch>
&
ch<
)
Push(&
S,ch);
else{
y=Pop(&
S)-'
;
x=Pop(&
switch(ch){
case'
S,(char)(x+y+'
));
case'
S,(char)(x-y+'
S,(char)(x*y+'
S,(char)(x/y+'
}
}
}
returnGetTop(S);
输入9-(2+4*7)/5+3#,并按回车键,
输出:
表达式的后缀表达式为:
9247*+5/-3
6、调试情况,设计技巧及体会:
表达式是由运算对象、运算符、括号组成的有意义的式子。
要写此程序,必须了解到底什么是中缀表达式、后缀表达式并灵活运用栈和队列。
7、源程序清单:
#include<
stdio.h>
#defineStackSize100
#defineQueueSize100
/*队列的相关操作*/
typedefcharDataType;
typedefstruct{
chardata[100];
intfront,rear;
}SeqQueue;
//定义队列类型
voidInitQueue(SeqQueue*Q){//初始化队列
Q->
front=0;
rear=0;
intQueueEmpty(SeqQueueQ){//判空队列
returnQ.rear==Q.front;
voidEnQueue(SeqQueue*Q,DataTypex){//入队列
if((Q->
rear+1)%QueueSize==Q->
front)
printf("
Queueoverflow"
else{
Q->
data[Q->
rear]=x;
Q->
rear=(Q->
rear+1)%QueueSize;
}
DataTypeDeQueue(SeqQueue*Q){
charx;
if(QueueEmpty(*Q))return0;
x=Q->
front];
front=(Q->
front+1)%QueueSize;
returnx;
}/*栈的相关操作*/
DataTypedata[100];
inttop;
}SeqStack;
//栈类型的定义
voidInitStack(SeqStack*S){//初始化栈
S->
top=-1;
voidPush(SeqStack*S,DataTypex){//入栈
if(S->
top==StackSize-1)
Stackouerflow"
S->
top=S->
top+1;
data[S->
top]=x;
DataTypePop(SeqStack*S){//出栈
top==-1){
printf("
stackunderflow"
return0;
else
returnS->
data[S->
top--];
DataTypeGetTop(SeqStackS){
//取栈顶元素
if(S.top==-1){
stackempty"
returnS.data[S.top];
}//求运算符优先级函数
intPriority(DataTypeop){
switch(op){
case'
return0;
case'
return1;
return2;
return-1;
Push(&
do{//扫描中缀表达式
c=getchar();
}//后缀表达式的计算
DataTypeCPostExp(SeqQueueQ){
}
returnGetTop(S);
voidmain(){
SeqQueueQ;
//定义队列,存放后缀表达式
InitQueue(&
//初始化队列
CTPostExp(&
//调用转换函数将中缀表达式转换成后缀表达式
printf("
%c\n"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 队列 应用 表达式 求值
![提示](https://static.bdocx.com/images/bang_tan.gif)