数据结构课程设计算术表达式实验参考代码
更新时间:2023-06-09 23:14: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");
}
正在阅读:
数据结构课程设计算术表达式实验参考代码06-09
幼儿园毕业主持词02-23
地理接线图规范- A303-26
劳动关系与争议处理09-30
小学美术冀美版 二年级上册 第7课《去远航》优质课公开课教案教师资格证面试试讲教案09-03
国外农业科技服务模式及经验探析05-31
基于JAVA餐饮企业网上订餐系统毕业论文 - 图文06-16
2013-9物理实验I指导书 - 图文11-02
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 数据结构
- 算术
- 表达式
- 参考
- 课程
- 实验
- 代码
- 设计
- 3、分析影片的镜头语言
- 2014年江西教师招考_教育综合基础知识_全书笔记以及重点
- 计算机与编程基础知识学习_JxHacker
- 万科地产工程管理六管一控
- 道路工程合理化建议
- 《赔率会说话》欧赔招式版
- 论当代大学生肩负的历史使命
- 宏微观经济学试题
- 2015继续教育临沂市情概览部分试题
- 在全县特色食品工业园区开工仪式上的致辞
- 新十年 新创意 新窗口——2010年(第十届)中国北方国际自行车展览会在天津隆重举行
- 2010年广东省中考英语真题(含答案)
- 水利工程经济总复习
- 幼儿园工会委员职责
- 第五课男生女生之间公开课在1
- 四川公务员面试真题解析
- 网络环境下编目员的素质建设
- 放空与放净配管设计规定
- 农业推广学第十四章
- 营销人员定级与考核制度