数据结构课程设计算术表达式实验参考代码

发布时间:2021-06-06

#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);

数据结构课程设计算术表达式实验参考代码.doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219