资源简介
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++
相关资源
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
评论
共有 条评论