资源简介
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
- 上一篇:md5加密算法 C语言经过测试验证完整版
- 下一篇:学分管理系统 c++
相关资源
- md5加密算法 C语言经过测试验证完整版
- 非线性最小二乘法C语言代码
- C语言设计一元稀疏多项式课程设计
- c语言回溯法走迷宫的源码
- 数据结构之迷宫求解完整代码(C语言
- 单片机 C语言温度控制程序
- 51单片机-光立方-C语言
- 课程设计 c语言 学生选课系统
- C语言 人事管理系统
- c语言实现考试管理系统选择题
- 课程信息管理系统 C语言版本 C语言
- 中国大学MOOC-翁恺-C语言程序设计习题
- c语言多线程计算PI
- 东北大学课程设计—编译原理课程设
- 这是用C语言实现模糊控制的算法程序
- 滴水逆向 文件操作pe修改C语言源代码
- C语言:中缀算术表达式求值栈 附答案
- 用C语言实现DPSK数字信号调制
- 单片机电子琴设计用C语言编写
- 基于Linux消息队列的简易聊天室(C语
- C语言高级编程技术 很好的一本书
- C语言矩阵相乘动态数组,文件读写
- 步进伺服电机加减速控制C语言
- 模拟文件系统的c语言实现
- (严蔚敏)数据结构视频教程C语言版
- c语言车票管理系统
- C 经典100例 C语言的经典小程序,100个
- 编写C语言程序,模拟UNIX磁盘空间管理
- 基于C语言实现的网络爬虫
- 国密SM4的5中模式C语言实现,vs工程,
评论
共有 条评论