栈的应用-后缀表达式
2019独角兽企业重金招聘Python工程师标准>>>
//Stack.h
#ifndef _STACK_H_
#define ElementType int
struct Node;
typedef struct Node *PtrToNode;
typedef PtrToNode Stack;struct Node
{ElementType Element;PtrToNode Next;
};int IsEmpty(Stack S);
Stack CreateStack(void);
void MakeEmpty(Stack S);
void Push(ElementType X,Stack S);
void Pop(Stack S);
ElementType Top(Stack S);#endif
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//Stack.c
#include<stdio.h>
#include "Stack.h"
#include<stdlib.h>int IsEmpty(Stack S)
{return S->Next==NULL;
}Stack CreateStack(void)
{Stack S;S=malloc(sizeof(struct Node));if(S==NULL){printf("out of space\n");}S->Next=NULL;return S;
}void MakeEmpty(Stack S)
{if(S==NULL){printf("Must use CreateStack first");}}void Push(ElementType X,Stack S)
{Stack TmpCell;TmpCell=malloc(sizeof(struct Node));if(TmpCell==NULL){printf("out of space\n");}else{TmpCell->Next=S->Next;TmpCell->Element=X;S->Next=TmpCell;}
}void Pop(Stack S)
{PtrToNode TmpCell;if(S==NULL){printf("Empty of stack\n");}else{TmpCell=S->Next;S->Next=TmpCell->Next;free(TmpCell);}
}ElementType Top(Stack S)
{if(S==NULL){printf("Empty of stack\n");return 0;}else{return S->Next->Element;}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//main.c
#include<stdio.h>
#include<string.h>
#include "Stack.h"
#define SIZE 50int Str2num(char *a); //字符串转换为数字(目前只写了整数的转换)
int main(void)
{Stack S;ElementType x; //创建空栈 S=CreateStack();char a[SIZE];char b[10];char *d;int i=0;int j=0;printf("请输入后缀表达式:\n");d=gets(a); printf("您输入的是:\n");puts(a); //打印输入if(d!=NULL){int c=strlen(a);int flag_int=1;int flag_char=1;//printf(" %d ",c); //测试 for(i=0;i<c;i++){if(a[i]!=' '){if((a[i]>47)&&(a[i]<58)){flag_char=0;flag_int=1;b[j]=a[i];j++;}else if(!(IsEmpty(S) || IsEmpty(S->Next))) {flag_int=0;flag_char=1;int m,n,p;m=Top(S);Pop(S);n=Top(S);Pop(S);if(a[i]==43){p=m+n;Push(p,S);}if(a[i]==45){p=m-n;Push(p,S);}if(a[i]==42){p=m*n;Push(p,S);}if(a[i]==47){p=m/n;Push(p,S);}printf("\n");int s;s=Top(S); //Push(p,S);//printf(" 1_2 % d\n",s);}}else{if((flag_int==1)&&(flag_char==0)){j=0;int dec; //字符串转换为数字 dec=Str2num(b);//printf(" 1-1 %d ",dec); //测试用 Push(dec,S);}}}ElementType q;q=Top(S);Pop(S);printf("后缀表达式的值为:%d\n",q);}}int Str2num(char *a) //字符串转数字
{int b=strlen(a);int i;int num=0;int m;int power=1;for(i=0;i<b;i++) //测试通过 {m=(a[i]+2)%10;num=(num+m)*10;} num=num/10;return num;
}
转载于:https://my.oschina.net/u/3397950/blog/876321
栈的应用-后缀表达式相关推荐
- 栈应用:后缀表达式求值
在上一篇博客 栈应用:中缀表达式转后缀表达式 中我们知道如何通过栈将中缀表达式转为后缀表达式,这次我们继续用栈 来实现后缀表达式求值,结合上一篇博客. 上一篇博客中是用c语言实现的,由于c语言中不支持 ...
- python栈应用_栈应用之 后缀表达式计算 (python 版)
栈应用之 后缀表达式计算 (python 版) 后缀表达式特别适合计算机处理 1. 中缀表达式.前缀表达式.后缀表达式区别 中缀表达式:(3 - 5) * (6 + 17 * 4) / 3 17 * ...
- 用栈实现计算后缀表达式(0-9数值运算示例)
一.原理 可以先建立一个栈S .从左到右读表达式,如果读到操作数就将它压入栈S中,如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项按操作符运算,再将运算的结果代替原栈顶的n项,压 ...
- 刁肥宅手笔:纯C语言利用链栈实现从后缀表达式Array中顺序输入表达式并求值
链栈+后缀表达式求值算法,借用我自己上次C语言写的链栈,详细实现代码如下: 头文件C_Stack.h: /*C_Stack.h*/#ifndef C_STACK_H_INCLUDED #define ...
- C语言栈的应用——后缀表达式求值
算法思路 上次已经完成了由中缀表达式转后缀表达式的算法,而后缀表达式的优点就是可以从左至右直接读取,没有算数优先级的考量,所以直接进行运算即可. 该算法需要使用一个栈用来保存操作数,在读取到数 ...
- 备战NOI 数据结构——栈与单调栈(stack) 以及后缀表达式
栈 stack 引入 栈的概念 代码实现 定义和初始化(init) 入栈(push) 出栈(pop) 访问栈顶元素(query) 查询栈的元素个数(size) 判断是否为空(empty) 清空栈(cl ...
- 把中缀表达式转化为后缀表达式
http://www.cppblog.com/yearner/archive/2006/10/31/14425.html 算法的用途: 我的目的很简单,做一个24点牌的Flash小游戏,接受用户输入的 ...
- python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图
python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...
- 万能计算器——中缀表达式转换成后缀表达式(C++实现)【可以计算小数和负数】
核心代码与思路: int GetExprValue(vector<string> srcVec) //根据后缀表达式求值 {stack<int> temp;char op = ...
- java后缀表达式_表达式计算 java 后缀表达式
题目: 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例 ...
最新文章
- 说说悲观锁、乐观锁、分布式锁
- SPDK,软件定义存储的催化剂
- android使用的图片压缩格式,Android 之使用libjpeg压缩图片
- signature=a662b42175c342c2f67535627a2cf0a4,California and Nevada Railroad
- 前端学习(1466):表格案例其他效果演示
- PaddleNLP--UIE(二)--小样本快速提升性能(含doccona标注)
- 2021-09-30 拐点可能存在的地方总结, 关于弧微分的理解
- win7下开启telnet命令
- 指派问题的遗传算法求解 Java实现
- 怎么下载网页在线视频
- flutter图片识别_想在 flutter 中提取图片颜色?试试 color_thief_flutter
- linux unlink 函数,linux – unlink和rm有什么区别?
- linux vim粘贴和复制文件,【linux】vim怎么粘贴其他地方复制的代码?
- “热榜第一”阿里年薪80W的Java架构师,到底是有着怎样的水平?
- Python内存驻留机制
- 技术开发人员常用的安全浏览器
- 微信小程序——如何一键换肤
- CC And MC Introduce
- linux下u盘分区合并,linux下给U盘分区并制作文件系统-u盘文件系统
- 开源文档系统MrDoc
热门文章
- 388.文件的最长绝对路径
- 211.添加与搜索单词-数据结构设计
- 凤凰机器人猜成语答案_看图猜成语:一只手上拿着绳子,旁边有个起吊机
- 估计理论(2):Cramer-Rao下限
- 为什么xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?
- 大数组,找某数字的左,右边界
- 【2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) E】Cops And Roobers【最小割】
- 【HDU 5033】【经典单调栈问题】Building
- 如何控制写入文件大小java_写入文本文件时如何更改字体大小 - java
- 数据库的主键Id不是从1开始的