• 大小: 6KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: C/C++
  • 标签:   c语言  

资源简介

c语言实现中缀表达式转后缀表达式并求得计算结果,用顺序栈结构。 当输入者输入错误信息的时候需要报错,并说明错误的种类。

资源截图

代码片段和文件信息

#include “stdio.h“
#include “malloc.h“
#include “string.h“
#include “stdlib.h“

#define ERROR 0
#define SIZE 100

int temp=0;
int error=0;
typedef struct
{
char data[SIZE];
int top;
int base;
}slink_c;

typedef struct
{
double data[SIZE];
int top;
int base;
}slink_d;

void Initstack_c(slink_c *s)
{
s->top = 0;
s->base = 0;
}

void Initstack_d(slink_d *s)
{
s->top = s->base = 0;
}

int Emptystack_c(slink_c *s)
{
if(s->top == s->base)
return(1);
else
return(0);
}

int Emptystack_d(slink_d *s)
{
if(s->top == s->base)
return(1);
else
return(0);
}

char Pop_c(slink_c *s)
{
char e;
if(s->data[s->top]==‘#‘)
return ERROR;
else
{
e=s->data[s->top-1];
s->top--;
}
return e;
}

double Pop_d(slink_d *s)
{
double e;
if(s->base == s->top)
return ERROR;
else
{
e=s->data[s->top-1];
s->top--;
}
return e;
}

void Push_c(slink_c *s char e)
{
s->data[s->top]=e;
s->top++;
}

void Push_d(slink_d *s double e)
{
s->data[s->top]=e;
s->top++;
}

char Gettop_c(slink_c *s)
{
if(s->top == s->base)
return ERROR;
return (s->data[s->top-1]);
}

double Gettop_d(slink_d *s)
{
if(s->top == s->base)
return ERROR;
return (s->data[s->top-1]);
}

//判断是不是一个数字
bool IsNumber(char x)
{
if(x == ‘0‘ || x == ‘1‘ || x == ‘2‘ || x == ‘3‘ || x == ‘4‘ || x == ‘5‘ || x == ‘6‘ || x == ‘7‘ || x == ‘8‘ || x == ‘9‘)
return (true);
else
return (false);
}

//判断是不是一个符号
bool IsOperator(char x)
{
if(x == ‘+‘ || x == ‘-‘ || x == ‘*‘ || x == ‘/‘ || x == ‘(‘ || x == ‘)‘|| x == ‘#‘)
return (true);
else
return (false);
}

//符号优先级比较
int Precede (char x char y)
{
switch(x)
{
case ‘(‘:x=0;break;
case ‘+‘:
case ‘-‘:x=1;break;
case ‘*‘:
case ‘/‘:x=2;break;
}
switch(y)
{
case ‘+‘:
case ‘-‘:y=1;break;
case ‘*‘:
case ‘/‘:y=2;break;
case ‘(‘:y=3;break;
}
if (x >= y)
return (1);
else
return (0);
}

//中缀转后缀
void mid_post(char post[] char mid[])
{
slink_c s1;
int i=0 j=0;
char ch;
Initstack_c(&s1);
Push_c(&s1‘#‘);
if(mid[i] == ‘\0‘)
{
error = 1;
printf(“输入错误\n“);
return;
}
while(mid[i]!=‘\0‘)
{
if(IsNumber(mid[i]))
{
while((mid[i] >= ‘0‘&&mid[i] <= ‘9‘)||mid[i] == ‘.‘)
{
post[j++] = mid[i];
temp++;
i++;
}
post[j++] = ‘ ‘;
temp++;
}
else if(IsOperator(mid[i]))
{
switch(mid[i])
{
case ‘(‘:
{
i++;
if(mid[i] == ‘-‘)
{
while(mid[i] != ‘)‘)
{
post[j++] = mid[i];
i++;
temp++;
}
post[j++] = ‘ ‘;
i++;
temp++;
}
else
{
i--;
Push_c(&s1mid[i]);
i++;
}
}break;
case ‘)‘:
{
ch = Pop_c(&s1);
do

评论

共有 条评论