计算器 - 栈的应用
头文件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;
}
计算器 - 栈的应用相关推荐
- 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)
目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...
- python基础刷题_数据结构与算法LeetCode刷题(Python)
参考资料: 一.链表 1. 链表的必备知识要点(包括基础知识.刷题中使用的STL等知识) 2. 链表逆序(LeetCode 92 ,206. Reverse Linked List 1,2) 3. ...
- 面试算法LeetCode刷题班—BAT面试官带你刷真题、过笔试
课程名称: <面试算法LeetCode刷题班> --BAT面试官带你刷真题.过笔试 主讲老师: 林老师 BAT资深研发工程师(T7/P8级),致力于搜索引擎及其子系统的研发.迭代与优化,数 ...
- 七、使用栈实现综合计算器(中缀表达式)
使用栈实现综合计算器(中缀表达式) 1.栈的实际需求 请输入一个表达式,计算式:[722-5+1-5+3-3] ,计算出结果 计算机底层是如何运算得到结果的? 注意不是简单的把算式列出运算,因为我们看 ...
- evaluate函数使用无效_[Python实战]使用栈实现简易计算器
我们这次实现的命令行计算器,支持加减乘除.括号.浮点数.负数,以及查看历史和退出功能. 主要的思路:read - parse - print - loop. read 阶段是指读取用户在提示符(cal ...
- 用链栈实现简易四则运算计算器(php版)
栈是一种限定仅在表尾进行插入和删除操作的线性表.栈的应用有很多,比如常见的递归,计算机表达式求值等.下面我们用栈来实现简易的四则运算计算器. 列一下本文的思路: 实现链栈的数据结构及其操作 中缀表达式 ...
- Leetcode224 基本加减计算器-双栈和状态转换
题目 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 . 示例 1: 输入: "1 + 1&quo ...
- 数据结构:栈实现逆波兰计算器
栈实现逆波兰计算器 前言 上篇博文中已经介绍了栈实现中缀表达式计算器,中缀表达式形如 "1+((2+3)*4)-5" 对人比较容易计算,但对于计算机却是一件比较困难的事,而后缀表达 ...
- 数据结构:栈实现简易计算器
文章目录 栈实现简易计算器 思路 代码实现 栈结构 运算方法 测试 栈实现简易计算器 之前的博客已经介绍了栈数据结构,栈有着数据先进后出的特点,因此用于实现简易计算器时相当方便.本博文中将介绍如何用栈 ...
最新文章
- 使用OpenCV为视频中美女加上眼线
- GitHub 宣布正式收购 npm | 云原生生态周报 Vol. 42
- 项目中遇到不善于表达的人,该如何沟通?
- csrf-token
- 什么时候会是用treeset?_flex:1 到底代表什么?
- Python开发利器之UliPad
- python安装函数库pip网址_批量安装python库函数---pip
- ubuntu 开放端口_Masscan端口扫描工具使用小手册
- python 模糊匹配_很冷门,但非常实用的 Python 库
- 手把手教你编写接口需求文档
- Java开发工具插件配置记录
- 【定时任务|开机启动】Windows Server 2008/2012 计划任务配置(任务计划程序)每分钟执行BAT...
- 难以置信:产品图标是黑色背景
- 2D曲线插值拟合基础
- 快解析:用友T+异地访问解决方案
- 金盾2016(正阳版)播放器机器码替换
- AIScanner文字识别软件 OCR
- 【零基础一起学习FPS游戏Unity3D手机游戏开发】第1章 准备工作
- vue启动时报错——did you register the component correctly? For recursive components
- 部分解决window10镜像大于4G无法刻录到U盘。
热门文章
- WebStorm学习笔记004---Webstorm的一些常用快捷键
- 杭电1072 猜数字
- 杭电1862EXCEL排序
- 嵌入式操作系统内核原理和开发(等值block内存池设计)
- python编程( 第一份Windows平台运行的python代码)
- 基于51单片机的八位流水灯(三种形式)
- python3数字类型_python3笔记八:python数据类型-Number数字
- python无法在终端运行程序_解决项目pycharm能运行,在终端却无法运行的问题
- 手机系统一般是用Java写的吗_三大操作系统比较,为什么java开发一般用Linux系统?...
- python简介pdf_Py之pdfkit:python的库之pdfkit简介、安装、使用方法详细攻略