1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. typedef char datatype;
  5. typedef struct stack
  6. {
  7. int top; /*栈顶指针*/
  8. datatype* data; /*数组*/
  9. int MaxSize; /*栈大小*/
  10. }stack;
  11.  
  12. /*初始化空栈*/
  13. void InitStack(stack* st, int sz)
  14. {
  15. st->top = -;
  16. st->MaxSize = sz;
  17. st->data = (datatype*)malloc(sizeof(datatype) * st->MaxSize); //分配内存
  18. }
  19. /*释放站空间*/
  20. void FreeStack(stack* st)
  21. {
  22. free(st->data);
  23. }
  24. /*压栈*/
  25. int Push(stack* st, datatype d)
  26. {
  27. if (st->top == st->MaxSize-) return -;
  28. st->data[++(st->top)] = d;
  29. return ;
  30. }
  31. /*弹栈*/
  32. datatype Pop(stack* st)
  33. {
  34. if ((st->top) == -)
  35. {
  36. printf("llll%d",st->top);
  37. exit(-);
  38. }
  39. else {
  40. return st->data[(st->top)--];
  41. }
  42.  
  43. }
  44. /*取顶*/
  45. datatype getTop(stack* st)
  46. {
  47. if(st->top>-)
  48. return st->data[st->top];
  49. return NULL;
  50. }
  51. /*栈置空*/
  52. void MakeEmpty(stack* st)
  53. {
  54. st->top = -;
  55. }
  56.  
  57. /*后缀表达式计算*/
  58. int Midcal()
  59. {
  60. stack* sptr = (stack*)malloc(sizeof(stack));
  61. char buf[];
  62. int i = , k;
  63. InitStack(sptr, );
  64.  
  65. printf("input Postfix\n");
  66. scanf_s("%s", buf,); //控制边界
  67.  
  68. while (buf[i] != '\0')
  69. {
  70. switch (buf[i])
  71. {
  72. case '+':
  73. k = Pop(sptr)+Pop(sptr);
  74. Push(sptr,k);
  75. break;
  76.  
  77. case '-':
  78. k = Pop(sptr);
  79. k = Pop(sptr) - k;
  80. Push(sptr, k);
  81. break;
  82. case '*':
  83. k = Pop(sptr) * Pop(sptr);
  84. Push(sptr, k);
  85. break;
  86.  
  87. case '/':
  88. k = Pop(sptr);
  89. k = Pop(sptr) / k;
  90. Push(sptr, k);
  91. break;
  92. default:
  93.  
  94. Push(sptr, (int)(buf[i] - ));
  95. }
  96. i++;
  97. }
  98. printf("The value is %d\n", Pop(sptr));
  99. return ;
  100. }
  101.  
  102. main() {
  103. Midcal();
  104. }

注:我们在使用scan方法时建议使用scanf_s: 因为这个方法有溢出限制和边界检查,防止因数据溢出造成程序数据混乱的问题。

  其中VS2019以及接近版本都会在使用scanf时报错,强制使用scanf_s.

scanf_s("%type",space,limit)  第一个参数是类型,第二个参数是输入数的存储地址,第三个就是你的限制空间了。

  以上代码部分,如果设置limit <10,就会出现错误,限制小于输入时,超出部分不会进行读取。

  

栈与后缀表达式C实现的更多相关文章

  1. 河南省acm第九届省赛--《表达式求值》--栈和后缀表达式的变形--手速题

    表达式求值 时间限制:1000 ms | 内存限制:65535 KB 难度:3   描述 假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式.2. 如果 X 和 Y 是 表达式,则 X+Y, ...

  2. java使用栈计算后缀表达式

    package com.nps.base.xue.DataStructure.stack.utils; import java.util.Scanner; import java.util.Stack ...

  3. 中缀表达式转后缀表达式(用于求字符串表达式值)(js栈和队列的实现是通过数组的push和unshift方法插值,pop方法取值)

    中缀表达式:就是我通常用的算术或逻辑公式: 后缀表达式:不包含括号,运算符放在两个运算对象后面,所有的计算按运算符出现的顺序,严格从左向右进行,不用考虑运算符优先级: 如,(2+1)*3 转换后,2 ...

  4. c++实验4 栈及栈的应用+回文+中、后缀表达式

    栈及栈的应用+回文+中.后缀表达式 1.栈顺序存储结构的基本操作算法实现 (1)栈顺序存储结构的类定义: class SeqStack { private: int maxsize; DataType ...

  5. C++做四则运算的MFC计算器(二)栈转换和计算后缀表达式

    上篇写了MFC界面搭建,这篇就写实现计算.涉及到数据结构,对新手很不友好. 虽然是MFC程序,但是能灵活地分离后台代码,自行构建控制台程序. 上篇文章链接:C++做四则运算的MFC计算器(一)MFC界 ...

  6. 6, java数据结构和算法: 栈的应用, 逆波兰计算器, 中缀表达式--> 后缀表达式

    直接上代码: public class PolandCalculator { //栈的应用:波兰计算器: 即: 输入一个字符串,来计算结果, 比如 1+((2+3)×4)-5 结果为16 public ...

  7. javascript使用栈结构将中缀表达式转换为后缀表达式并计算值

    1.概念 你可能听说过表达式,a+b,a+b*c这些,但是前缀表达式,前缀记法,中缀表达式,波兰式,后缀表达式,后缀记法,逆波兰式这些都是也是表达式. a+b,a+b*c这些看上去比较正常的是中缀表达 ...

  8. 《java数据结构与算法》笔记-CH4-8栈结构实现后缀表达式计算结果

    /** * 中缀表达式转换成后缀表达式: 从输入(中缀表达式)中读取的字符,规则: 操作数: 写至输出 左括号: 推其入栈 右括号: 栈非空时重复以下步骤--> * 若项不为(,则写至输出: 若 ...

  9. 栈的应用1——超级计算器(中缀与后缀表达式)C语言

    这里要学的程序主要用来实现一个功能——输入表达式输出结果,也就是一个计算器.效果如下: 这个程序主要有两个步骤:1.把中缀表达式转换为后缀表达式:2.计算后缀表达式的结果. 首先先明白几个问题: 1. ...

随机推荐

  1. <深度学习>TensorBoard的demo

    import tensorflow.compat.v1 as tf import os os.environ["CUDA_VISIBLE_DEVICES"] = "-1& ...

  2. ASCII码表收藏

    ASCII码表 ASCII码值 ESC键 VK_ESCAPE (27)回车键: VK_RETURN (13)TAB键: VK_TAB (9)Caps Lock键: VK_CAPITAL (20)Shi ...

  3. Vue+Vuex初体验

    首先: 安装vuex npm install vuex -S 需要有两个组件(HelloWord.vue 和 HelloDemo.vue)[组件自定义] 注册路由 注册store 测试 一.需要有两个 ...

  4. CF1062F Upgrading Cities

    题意 由于这是个\(DAG\),我们考虑拓朴排序,求某个点能到的和能到它的点,这是两个问题,我们可以正反两边拓朴排序,这样就只用考虑它能到的点了 设\(f[x]\)表示\(x\)能到的点数\(+\)能 ...

  5. CSP2019 游记

    \(\text{CSP 2019}\) 游记 \[\text{草}\] \[\text{By:Luckyblock}\] \[Day\ -1:\] \(19:00\) 送行饭, 被摁在墙角干了 因为偏 ...

  6. javascript中的toString()

    基本介绍 javascript中的toString方法是我们在写前端时经常要用的一个函数,也就是将我们的变量转换成字符串的方法. javascript中各种类型的toString方法 javascri ...

  7. MySQL常用SQL语句总结

    1.with rollup 可以实现在分组统计数据基础上再进行相同的统计 SELECT name, SUM(score) as score_count FROM  score GROUP BY nam ...

  8. 分布式文件服务器FastDFS的使用

    分布式项目中涉及到的文件上传与下载,此时使用之前的上传方式,将上传的文件与当前项目所在服务器放在同一个位置,显然不符合分布式项目的理念,此时我们借助FastDFS将上传的文件数据存储到单纯的一个服务器 ...

  9. Python 从入门到进阶之路(三)

    在之前的文章我们介绍了一下 Python 中 if while for 的使用,本章我们来看一下 Python 中的变量类型. 在 Python 定义变量时的规则是 变量名 = 变量 ,Python ...

  10. SpringBoot2.0 整合 FastDFS 中间件,实现文件分布式管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.FastDFS简介 1.FastDFS作用 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步 ...