c语言precede函数怎么构造,数据结构——栈的应用(表达式求值)(C语言)
#include #define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
typedef char SElemType;
typedef char OperandType; //表达式求值的运算类型
typedef int Status;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
//构造一个空栈
Status InitStack(SqStack *S)
{
S->base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!S->base)
{
printf("内存分配失败!\n");
exit(OVERFLOW);
}
S->top = S->base;
S->stacksize = STACKINCREMENT;
return OK;
}
//若栈不为空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
Status GetTop(SqStack *S, SElemType *e)
{
if(S->top == S->base)
return ERROR;
*e = *(S->top - 1);
return OK;
}
//插入元素e为新的栈顶元素
Status Push(SqStack *S, SElemType e)
{
if(S->top - S->base >= STACK_INIT_SIZE) //栈满, 追加存储空间
{
S->base = (SElemType *)realloc(S->base, (S->stacksize + STACKINCREMENT) * sizeof(SElemType));
if(!S->base)
{
printf("内存分配失败!\n");
exit(OVERFLOW);
}
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
}
*S->top++ = e;
return OK;
}
//若栈不为空,则删除S的栈顶元素,用e返回其值,并返回Ok;否则返回ERROR
Status Pop(SqStack *S, SElemType *e)
{
if(S->top == S->base)
return ERROR;
*e = *--S->top;
return OK;
}
//销毁栈S,使其不复存在
Status StackDestroy(SqStack *S)
{
free(S->base);
S->base = NULL;
S->top = NULL;
S->stacksize = 0;
return OK;
}
//清空栈S,保留栈底指针
void ClearStack(SqStack *S)
{
S->top = S->base;
}
//根据教科书表3.1,判断两符号的优先关系
char Precede(char t1, char t2){
int i,j;
char pre[][7]={
//运算符之间的优先级制作成一张表格
{'>','>','','>'},
{'>','>','','>'},
{'>','>','>','>','','>'},
{'>','>','>','>','','>'},
{'','>','>','>','0','>','>'},
{'':
Pop(&OPTR, &theta); //退栈并将运算结果压入OPND中
Pop(&OPND, &b);
Pop(&OPND, &a);
Push(&OPND, Operate(a, theta, b));
break;
}
}
else if(c >= '0' && c <= '9') //c是操作数
{
i = 0;
do
{
z[i] = c;
i ++;
c = getchar();
}while(c >= '0' && c <= '9');
z[i] = 0;
d = atoi(z); //将字符数组转为整型存于d
Push(&OPND, d);
}
else //c为非法字符
{
printf("ERROR3\n");
exit(1);
}
GetTop(&OPTR, &x);
}
GetTop(&OPND, &x);
StackDestroy(&OPTR);
StackDestroy(&OPND);
return x;
}
int main()
{
printf("请输入算术表达式,负数要用(0-正数:\n");
printf("%d\n", EvaluateExpression());
return 0;
c语言precede函数怎么构造,数据结构——栈的应用(表达式求值)(C语言)相关推荐
- 数据结构栈之中缀表达式求值(实现计算器综合计算)
一.思路分析: 1.通过一个index值(索引),来遍历我们的表达式. 2.如果我们发现是一个数字,就直接入数栈. 3.如果发现扫描到是一个符号,就分如下情况: (1).如果发现当前的符号栈为空,就直 ...
- c语言编程实现表达式求值,c语言实现表达式求值的方法
c语言实现表达式求值的方法 发布时间:2020-06-22 16:45:46 来源:亿速云 阅读:82 作者:Leah 这期内容当中小编将会给大家带来有关c语言实现表达式求值的方法,以专业的角度为大家 ...
- php表达式求值,PHP实现基于栈的后缀表达式求值功能
本文实例讲述了PHP实现基于栈的后缀表达式求值功能.分享给大家供大家参考,具体如下: 后缀表达式概述 后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左 ...
- 栈实现算术表达式求值
算术表达式求值 利用栈求解的一个典型的问题是算术表达式求值,例如:"3+4*2-(1+1)#",这样的表达式计算,在计算过程中,不是读到一个运算就立即计算,而是要与后面的运算符进行 ...
- 北京林业大学数据结构实验二 基于栈的算术表达式求值算法
第1关:基于栈的中缀算术表达式求值 参见课本P75 例3.3 #include <iostream> #include<iomanip>#define MAXSIZE 100 ...
- 数据结构课程设计---------用栈来实现表达式求值
1.需求分析 设计一个程序,演示用算符优先法对算术表达式求值的过程.利用算符优先关系,实现对算术四则混合运算表达式的求值. (1)输入的形式:表达式,例如2*(3+4) 包含的运算符只能有' ...
- 基于栈的后缀表达式求值(洛谷P1449题题解,Java语言描述)
题目要求 P1449题目链接 分析 给出后缀表达式求值,就相当于没了括号,而且很直接. 我们需要使用栈结构来完成任务. Java原装的栈使用了很多synchronized,导致性能不佳,但我们也就将就 ...
- 数据结构 C++实现 算术表达式求值
文章目录 一.实验目的 二.实验要求 三.代码内容 1.创建链栈并初始化 2.入栈出栈取栈顶元素 3.判断是否是运算符 4.判断运算符优先级 5.运算函数 6.总代码 四.运算结果 五.总结 一.实验 ...
- 数据结构 C 代码:表达式求值
表达式求值 用C语言实现表达式求值算法.要求从键盘输入任意的包含加减乘除的算术四则运算表达式,都能求值.操作数类型可以设定为double. 1 设置运算符栈和运算数栈辅助分析算符优先关系. 2 在读入 ...
- 栈的应用——表达式求值
概要 表达式求值问题可以说是一个经典问题.具体思路就是首先把输入的中缀表达式转换为后缀表达式,然后再根据后缀表达式进行计算求值. 中缀表达式转换为后缀表达式 首先我们设定运算符在进栈前与进栈后的优先级 ...
最新文章
- ip设置 kali 重置_在 Windows 系统中如何重置 TCP/IP 协议堆栈修复网络连接问题
- 从应用到内核查接口超时(中)
- 绘制多边形_PS学习教程!教你绘制低多边形星空效果熊猫头像
- AutoCAD LISP花型图案一
- pcb 假八层_八层板的成本却只六层的性能,PCB设计遭遇假八层该怎么办?
- 并发 线程交替执行_并发与并行的区别
- rqnoj 496 [IOI1999]花店橱窗布置 (简单dp)
- 利用VMware Infrastructure SDK编程控制虚拟机集群(1)
- 计算机应用办公软件实训报告,办公软件实习报告
- 为什么Intel Realsense D435深度摄像头在基于深度的水平方向障碍物检测(避障)方案中,摄像头不宜安装太高?
- java获取元素创建时间,java – 动态顺序统计:在恒定时间内获取第k个元素?
- LeetCode 数组 容易 python
- iOS - 获取状态栏和导航栏尺寸(宽度和高度)
- 【资源】同济线性代数教材(第五版)
- html点击弹出文本框,html制作,点击文字超链接显示文本框,再点击文字超链接隐藏文本框...
- 域名是干啥用的?企业自己都记不住的域名还能发挥作用吗?
- iphone投影到电脑屏幕,QuickTime出现报错和黑屏的解决方案
- 生物信息学数据库资源 {#database}
- c语言编程实现dsa算法,椭圆曲线加密算法的C语言实现.doc
- leetcode 1499