数据结构课程设计算术表达式实验参考代码
更新时间:2023-08-18 00:18:01 阅读量: 资格考试认证 文档下载
#include<stdio.h>
#define StackSize 100
#define QueueSize 100
typedef char DataType;
typedef struct {
char data[100];
int front,rear;
}SeqQueue;//队列的定义
typedef struct{
DataType data[100];
int top;
}SeqStack;//栈类型的定义
int DeQueue(SeqQueue * Q);
void InitQueue(SeqQueue * Q);
int QueueEmpty(SeqQueue * Q);
void EnQueue(SeqQueue * Q,DataType x);
void InitStack(SeqStack * S);
void Push(SeqStack * S,DataType x);
DataType Pop(SeqStack * S);
DataType GetTop(SeqStack * S);
int Priority(DataType op);
void CTPostExp(SeqQueue *Q);
void InitQueue(SeqQueue * Q)//初始化队列
{
Q->front=0;Q->rear=0;
}
int QueueEmpty(SeqQueue * Q)//判断队列是否为空
{
return Q->front==Q->rear;
}
void EnQueue(SeqQueue * Q,DataType x)//把输入的数字进队列
{
if((Q->rear+1)%QueueSize==Q->front) //判断队列是否满了
printf("Queue overflow");
else
{
Q->data[Q->rear]=x;
Q->rear=Q->rear+1;
}
}
int DeQueue(SeqQueue * Q)//队列输出
{
char x;
x=Q->data[Q->front];
Q->front=Q->front+1;
return x;
}
void InitStack(SeqStack * S)//初始化栈
{
S->top=-1;
}
void Push(SeqStack * S,DataType x)//对输入的元素进行进栈
{
if(S->top==StackSize-1)//判断是否栈满
printf("stack overflow");
else
{
S->top=S->top+1;//不能进行交换
S->data[S->top]=x;
}
}
DataType Pop(SeqStack * S)//出栈
{
if(S->top==-1)
printf("stack underflow");
else
return S->data[S->top--];
}
DataType GetTop(SeqStack * S)//取栈顶元素
{
if(S->top==-1)
printf("stack empty");
else
return S->data[S->top];
}
int Priority(DataType op)//优先级的比较
{
switch(op)
{
case '(':
case '#':return (0);
case '+':
case '-':return (1);
case '*':
case '/':return (2);
}
}
void CTPostExp(SeqQueue * Q)//对输入的字符进行处理
{
SeqStack OS;//运算栈符
char c,t;
SeqStack *S;
S=&OS;
InitStack(S);//初始化栈
Push(S,'#');//将#号压入栈底
do
{
c=getchar();
switch(c)
{
case ' ':break;//将空格去除
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
EnQueue(Q,c);break;//把数字压入队列
case '(':Push(S,c);break;//将"("进栈
case ')':
case '#':
do{//如果输入的字符是#号和)就开始压入栈的符号拿给t
t=Pop(S);
if(t!='('&& t!='#')
EnQueue(Q,t);
}while(t!='('&& S->top!=-1);break;
case '+':
case '-':
case '*':
case '/':
while(Priority(c)<=Priority(GetTop(S)))
{
t=Pop(S);EnQueue(Q,t);
}
Push(S,c);break;
}
}while(c!='#');
}
void CPostExp(SeqQueue *Q)
{
SeqStack VS,*S;
char ch;
int x,y;
S=&
VS;
InitStack(S);
while(Q->front!=Q->rear)
{
ch=DeQueue(Q);
if(ch>='0'&&ch<='9')
Push(S,ch-'0');
else
{
y=Pop(S);
x=Pop(S);
switch(ch)
{
case '+':Push(S,x+y);break;
case '-':Push(S,x-y);break;
case '*':Push(S,x*y);break;
case '/':Push(S,x/y);break;
}
}
}
printf("\n最后的答案是:\n");
printf("%d ",GetTop(S));
//return GetTop(S);
}
void main()
{
SeqQueue *Q;
SeqQueue PostQ;
Q=&PostQ;
InitQueue(Q);
CTPostExp(Q);
//while(!QueueEmpty(Q))
//printf("%c",DeQueue(Q));
CPostExp(Q);
printf("\n");
}
正在阅读:
数据结构课程设计算术表达式实验参考代码08-18
关于小学语文教研活动工作总结2022年04-03
常用培养基的配制09-18
民族关系定义研究10-09
教师的教学行为对学生的影响——今天,我们怎样当老师04-22
八年级数学整式的乘法测试题04-23
第2单元 电路的基本规律 课时作业11-10
万科企业股份有限公司财务分析报告12-12
《市场营销学》性考四05-04
- 梳理《史记》素材,为作文添彩
- 2012呼和浩特驾照模拟考试B2车型试题
- 关于全面推进施工现场标准化管理实施的通知(红头文件)
- 江西省房屋建筑和市政基础设施工程施工招标文件范本
- 律师与公证制度第2阶段练习题
- 2019-2020年最新人教版PEP初三英语九年级上册精编单元练习unit6训练测试卷内含听力文件及听力原文
- 小升初数学模拟试卷(十四) 北京版 Word版,含答案
- 认识创新思维特点 探讨创新教育方法-精选教育文档
- 00266 自考 社会心理学一(复习题大全)
- 多媒体在语文教学中的运用效果
- 派出所派出所教导员述职报告
- 低压电工作业考试B
- 18秋福建师范大学《管理心理学》在线作业一4
- 中国铝业公司职工违规违纪处分暂行规定
- 13建筑力学复习题(答案)
- 2008年新密市师德征文获奖名单 - 图文
- 保安员培训考试题库(附答案)
- 银川市贺兰一中一模试卷
- 2011—2017年新课标全国卷2文科数学试题分类汇编 - 1.集合
- 湖北省襄阳市第五中学届高三生物五月模拟考试试题一
- 数据结构
- 算术
- 表达式
- 参考
- 课程
- 实验
- 代码
- 设计
- 夹河子乡联合工会2013年防暑降温工作开展情况汇报
- 电子科技15秋《大学英语2(本科)》在线作业1
- 车队队长安全生产职责(新编版)
- utorrent根据tracker状态排除 红种现象
- 农村财务会计管理模式研究
- Vszmta手机维修工程师教材2
- 幼儿园乡土音乐课题结题报告
- 1月7日GMAT数学机经
- 6.6_探究滑轮的作用
- 论大学生社会主义核心价值观的培养
- 《银行营业场所安全防范要求》(GA38-2015)
- SD卡在单片机上的应用以及SD卡引脚 电路图及工作原理介绍
- 2015安庆岳西县公务员体检时间
- 论当代大学生肩负的历史使命
- 2014年江西教师招考_教育综合基础知识_全书笔记以及重点
- 大家的日语单词表 1-50课全
- 3、分析影片的镜头语言
- 在全县特色食品工业园区开工仪式上的致辞
- 两个小时内不能同吃的东西
- 十大远程轰炸机