头文件CHAR.H

#pragma once
#include<iostream>
#define OK 1
#define ERROR 0
using namespace std;
class CHAR
{private:typedef struct StackNode{char data;struct StackNode *next;}*Stack;public:Stack S = NULL;CHAR(){InitStack();}int InitStack()//初始化{S = NULL;return OK;}int Push(char e)//入栈{Stack p = new StackNode;p->data = e;p->next = S;S = p;return OK;}char Pop()//出栈{if (S == NULL) return ERROR;int e = S->data;Stack p = S;S = S->next;delete p;return e;}char GetTop()//获得栈顶元素{if (S == NULL) return ERROR;return S->data;}int StackEmpty(){if (S == NULL){return 0;}else{return 1;}}};

LINKSTACK.H

#pragma once
#include<iostream>
#define OK 1
#define ERROR 0
using namespace std;
class LinkStack
{private :typedef struct StackNode{int data;struct StackNode *next;}*Stack;public :Stack S = NULL;LinkStack(){InitStack();}int InitStack()//初始化{S = NULL;return OK;}int Push(int e)//入栈{Stack p = new StackNode;p->data = e;p->next = S;S = p;return OK;}int Pop()//出栈{if (S == NULL) return ERROR;int e = S->data;Stack p = S;S = S->next;delete p;return e;}int GetTop()//获得栈顶元素{if (S == NULL) return ERROR;return S->data;}int StackEmpty(){if (S == NULL){return 0;}else{return 1;}}};
#include"LinkStack.h"
#include"CHAR.h"
#include<iostream>
using namespace std;
int In(char ch)//判断是否为数字
{if (ch >= '0' && ch <= '9'){return 1;}return 0;
}char Precede(char a, char b)
{char c;if (a == '#' && b != '#') c = '<';if (a == '#' && b == '#') c = '=';else if ( a == '+' || a == '-'){if (b == '+' || b == '-' || b == ')' || b == '#'){c = '>';}else{c = '<';}}else if (a == '*' || a == '/'){if (b == '('){c = '<';}else{c = '>';}}else if (a == '('){if (b == ')'){c = '=';}else if (b == '+' || b == '-' || b == '*' || b == '/' || b == '('){c = '<';}}else if (a == ')'){if (b == '+' || b == '-' || b == '*' || b == '/' || b == ')'){c = '>';}}return c;
}int Operate(int a, char b, int c)//运算函数
{int sum = 0;switch (b){case '+':sum = a + c;break;case '-':sum = a - c;break;case '*':sum = a * c;break;case '/':sum = a / c;break;default:break;}return sum;return 0;
}int main()
{LinkStack OPND;CHAR OPTR;int num = 0;OPTR.Push('#');char theta;//运算符int a, b;//运算数char ch;//输入cin >> ch;while (ch != '#' || OPTR.GetTop() != '#'){if (In(ch)){num = ((ch - '0') + num * 10);cin >> ch;}else{if (num != 0){OPND.Push(num);num = 0;}switch (Precede(OPTR.GetTop(), ch)){case '<':OPTR.Push(ch);cin >> ch;break;case '>':theta = OPTR.Pop();b = OPND.Pop();a = OPND.Pop();OPND.Push(Operate(a, theta, b));break;case '=':OPTR.Pop();cin >> ch;break;}}}cout << OPND.GetTop();return 0;
}

计算器 - 栈的应用相关推荐

  1. 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)

    目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...

  2. python基础刷题_数据结构与算法LeetCode刷题(Python)

    参考资料: 一.链表 1.  链表的必备知识要点(包括基础知识.刷题中使用的STL等知识) 2.  链表逆序(LeetCode 92 ,206. Reverse Linked List 1,2) 3. ...

  3. 面试算法LeetCode刷题班—BAT面试官带你刷真题、过笔试

    课程名称: <面试算法LeetCode刷题班> --BAT面试官带你刷真题.过笔试 主讲老师: 林老师 BAT资深研发工程师(T7/P8级),致力于搜索引擎及其子系统的研发.迭代与优化,数 ...

  4. 七、使用栈实现综合计算器(中缀表达式)

    使用栈实现综合计算器(中缀表达式) 1.栈的实际需求 请输入一个表达式,计算式:[722-5+1-5+3-3] ,计算出结果 计算机底层是如何运算得到结果的? 注意不是简单的把算式列出运算,因为我们看 ...

  5. evaluate函数使用无效_[Python实战]使用栈实现简易计算器

    我们这次实现的命令行计算器,支持加减乘除.括号.浮点数.负数,以及查看历史和退出功能. 主要的思路:read - parse - print - loop. read 阶段是指读取用户在提示符(cal ...

  6. 用链栈实现简易四则运算计算器(php版)

    栈是一种限定仅在表尾进行插入和删除操作的线性表.栈的应用有很多,比如常见的递归,计算机表达式求值等.下面我们用栈来实现简易的四则运算计算器. 列一下本文的思路: 实现链栈的数据结构及其操作 中缀表达式 ...

  7. Leetcode224 基本加减计算器-双栈和状态转换

    题目 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 . 示例 1: 输入: "1 + 1&quo ...

  8. 数据结构:栈实现逆波兰计算器

    栈实现逆波兰计算器 前言 上篇博文中已经介绍了栈实现中缀表达式计算器,中缀表达式形如 "1+((2+3)*4)-5" 对人比较容易计算,但对于计算机却是一件比较困难的事,而后缀表达 ...

  9. 数据结构:栈实现简易计算器

    文章目录 栈实现简易计算器 思路 代码实现 栈结构 运算方法 测试 栈实现简易计算器 之前的博客已经介绍了栈数据结构,栈有着数据先进后出的特点,因此用于实现简易计算器时相当方便.本博文中将介绍如何用栈 ...

最新文章

  1. 使用OpenCV为视频中美女加上眼线
  2. GitHub 宣布正式收购 npm | 云原生生态周报 Vol. 42
  3. 项目中遇到不善于表达的人,该如何沟通?
  4. csrf-token
  5. 什么时候会是用treeset?_flex:1 到底代表什么?
  6. Python开发利器之UliPad
  7. python安装函数库pip网址_批量安装python库函数---pip
  8. ubuntu 开放端口_Masscan端口扫描工具使用小手册
  9. python 模糊匹配_很冷门,但非常实用的 Python 库
  10. 手把手教你编写接口需求文档
  11. Java开发工具插件配置记录
  12. 【定时任务|开机启动】Windows Server 2008/2012 计划任务配置(任务计划程序)每分钟执行BAT...
  13. 难以置信:产品图标是黑色背景
  14. 2D曲线插值拟合基础
  15. 快解析:用友T+异地访问解决方案
  16. 金盾2016(正阳版)播放器机器码替换
  17. AIScanner文字识别软件 OCR
  18. 【零基础一起学习FPS游戏Unity3D手机游戏开发】第1章 准备工作
  19. vue启动时报错——did you register the component correctly? For recursive components
  20. 部分解决window10镜像大于4G无法刻录到U盘。

热门文章

  1. WebStorm学习笔记004---Webstorm的一些常用快捷键
  2. 杭电1072 猜数字
  3. 杭电1862EXCEL排序
  4. 嵌入式操作系统内核原理和开发(等值block内存池设计)
  5. python编程( 第一份Windows平台运行的python代码)
  6. 基于51单片机的八位流水灯(三种形式)
  7. python3数字类型_python3笔记八:python数据类型-Number数字
  8. python无法在终端运行程序_解决项目pycharm能运行,在终端却无法运行的问题
  9. 手机系统一般是用Java写的吗_三大操作系统比较,为什么java开发一般用Linux系统?...
  10. python简介pdf_Py之pdfkit:python的库之pdfkit简介、安装、使用方法详细攻略