要求

字符串读入,含义+,-,*,/,(,)
数据含小数

思路

字符串截取读入(数字位数可能不为一位)
template简化代码复杂度
enum增加代码可读性
class 抽象出栈
 ~~~~namespace定义域~~好玩~~

main函数

#include <bits/stdc++.h>#define stack#define rep(i,a,b) for(int i=a;i<=b;i++)std::string s;
#ifdef queue
#include "queue.hpp"
#endif#ifdef stack
#include "stack.hpp"
My_stack::Stack <double> q1;
My_stack::Stack <char> q2;
#endifvoid work()
{char c2;q2.get_top(c2);q2.pop();double a1,a2;q1.get_top(a1);q1.pop();q1.get_top(a2);q1.pop();std::cout<<c2<<" "<<a1<<" "<<a2<<'\n';// std::cout<<a1+a2;if(c2=='+') q1.push(a1+a2);else if(c2=='-'){q1.push(a2-a1);}else if(c2=='/'){q1.push(a2/a1);}else if(c2=='*'){q1.push(a1*a2);}
}int main()
{#ifdef stackstd::cin>>s;rep(i,0,s.length()-1){if(s[i]<='9'&&s[i]>='0') {int id1=0;rep(j,i,s.length()-1){if(s[j]=='/'||s[j]=='*'||s[j]=='+'||s[j]=='-'){id1=j;break;}}if(!id1) id1=s.length()-1;std::string s2=s.substr(i,id1-i);std::cout<<s2<<'\n';char s_2[50]={0};rep(j,0,s2.length()-1){s_2[j]=s2[j];}i=id1-1;double ans=atof(s_2);q1.push(ans);}else if(s[i]=='+'||s[i]=='-'){  //std::cout<<"dwq";while(!q2.empty()&&(q2.top()=='+'||q2.top()=='-'||q2.top()=='*'||q2.top()=='/')){work();}q2.push(s[i]);}else if(s[i]=='*'||s[i]=='/'){while(!q2.empty()&&(q2.top()=='*'||q2.top()=='/')){work();}q2.push(s[i]);}else if(s[i]=='(') q2.push(s[i]);else if(s[i]==')'){while(q2.top()!='('){work();}q2.pop();}}while(!q2.empty()){work();}double ans=0;q1.get_top(ans);std::cout<<ans<<'\n';#endif#ifdef queueMy_queue::Queue <int> q;rep(i,1,5) q.push(i);rep(i,1,2) q.pop();rep(i,6,8) q.push(i);rep(i,1,1) q.pop();int n;q.get_front(n);std::cout<<n<<'\n';#endifreturn 0;
}

//stack.cpp

#include <iostream>enum error_code {success,overflow,underflow};namespace My_stack
{template<class T>class Stack{public:Stack();~Stack();bool empty() const;bool full() const;error_code get_top(T &a) const;error_code push(T a) ;double top() ;error_code pop() ;private:T* my_date;int max_size;int cnt;};template <class T> Stack<T>::Stack(){this->max_size=10000;this->cnt=0;my_date = new T [max_size];}template <class T> Stack<T>::~Stack(){delete my_date;}template <class T> bool Stack<T>::full() const{if(this->cnt==this->max_size) return 1;else return 0;}template <class T> bool Stack<T>::empty() const{if(this->cnt==0) return 1;else return 0;}template <class T> error_code Stack<T>::get_top(T &a) const{if(this->empty()) return underflow;else {a = my_date[cnt-1];return success;}        }template <class T>  double Stack<T>::top() {if(!empty()) return my_date[cnt-1];}template <class T> error_code Stack<T>::push(T a) {if(full()) return overflow;else {my_date[cnt]=a;cnt++;//std::cout<<cnt<<'\n';return success;}}template <class T> error_code Stack<T>::pop() {if(this->empty()) return overflow;else {my_date[cnt-1]=0;--cnt;return success;}}
}

//附赠queue抽象

#include <iostream>enum error_code {success,overflow,underflow};const int max_size=1000;namespace My_queue
{template<class T>class Queue{public:Queue();~Queue();bool empty() const;bool full() const;error_code get_front(T &a) const;error_code push(T a) ;error_code pop() ;private:T* my_date;int cnt;int left;int right;};template <class T> Queue<T>::Queue(){this->cnt=0;this->left=this->right=0;my_date = new T [max_size];}template <class T> Queue<T>::~Queue(){delete my_date;}template <class T> bool Queue<T>::full() const{if(this->cnt==max_size) return 1;else return 0;}template <class T> bool Queue<T>::empty() const{if(this->cnt==0) return 1;else return 0;}template <class T> error_code Queue<T>::get_front(T &a) const{if(this->empty()) return underflow;else {a = my_date[(left+1)%max_size];return success;}        }template <class T> error_code Queue<T>::push(T a) {if(full()) return overflow;else {right=(++right)%max_size;my_date[right]=a;cnt++;//std::cout<<cnt<<'\n';return success;}}template <class T> error_code Queue<T>::pop() {if(this->empty()) return overflow;else {left=(left+1)%max_size;//y_date[left]=0;--cnt;return success;}}
}

手写栈和队列实现计算器相关推荐

  1. FIFO+FILO(手写栈、队列)

    http://acm.hdu.edu.cn/webcontest/contest_show.php?cid=13259 ACboy needs your help again! Problem Des ...

  2. C语言手写栈、手写计算器

    C语言实现表达式求值 文章结构 C语言手写栈Struct Stack 后缀表达式求值 中缀表达式转后缀表达式 文章结构 本文尝试通过纯C语言写一个计算器,在Visual Studio和VScode运行 ...

  3. 【Android 异步操作】手写 Handler ( 消息队列 MessageQueue | 消息保存到链表 | 从链表中获取消息 )

    文章目录 一.MessageQueue 消息队列存储消息 二.MessageQueue 消息队列取出消息 三.消息队列完整代码 一.MessageQueue 消息队列存储消息 Message 链表 : ...

  4. 手写原生js实现简单计算器的功能

    话不多说 直接看图片 其实核心思想 就是用了一个eval 函数 里面可以解析带运算符的字符串 但是一定要吧除号和乘号替换成代码里的* 和/ 其他就没有什么了 <!DOCTYPE html> ...

  5. 面试官系统精讲Java源码及大厂真题 - 26 惊叹面试官:由浅入深手写队列

    26 惊叹面试官:由浅入深手写队列 人生的价值,并不是用时间,而是用深度去衡量的. 引导语 现在不少大厂面试的时候会要求手写代码,我曾经看过一个大厂面试时,要求在线写代码,题目就是:在不使用 Java ...

  6. 数据结构实验报告—栈和队列

    作者:命运之光 专栏:数据结构 目录 实验内容 实验三 栈和队列 一.需求分析 二.概要设计 三.详细设计 四.调试分析 五.测试结果 附录:源程序代码(带注释) 实验内容 实验三栈和队列 实验环境: ...

  7. 队列的基本操作_如果让你手写个栈和队列,你还会写吗?||CSDN博客精选

    来源:华为云云享专家倪升武 昨天跟一个CSDN上的朋友聊天,他说现在如果让他自己手写一个栈或者队列,估计都要写蛮久的,平时虽然都在用,但是都是别人封装好的集合. 确实,经典的数据结构,包括排序算法,虽 ...

  8. 如果让你手写个栈和队列,你还会写吗?

    昨天跟一个CSDN上的朋友聊天,他说现在如果让他自己手写一个栈或者队列,估计都要写蛮久的,平时虽然都在用,但是都是别人封装好的集合. 确实,经典的数据结构,包括排序算法,虽然我们平时不用手写了,但是这 ...

  9. 金九银十!阿里P8手写的内部Java核心开发成长手册,涵盖p5-p8技术栈,秋招必看!

    前言 程序员的年龄一直是大家讨论的热门话题,本人最近和不少小公司的程序员打交道.经过和他们的深入交流,我感受到了不少小公司程序员的现状,由此深深地感叹,可能真有不少小公司的程序员未必能干到30岁,甚至 ...

最新文章

  1. GridView 始终显示 Pager 分页行的一种方法
  2. 图解VC++绘制数学曲线
  3. c语言电子计算器课程设计报告,计算机程序设计课程设计报告.doc
  4. python3.6使用mysql_Python之——Python3.6连接MySQL
  5. 没有bug队——加贝——Python 练习实例 17,18
  6. 排序学习之---插入排序
  7. 实战系列-被面试官问到Feign原理
  8. 嵌入式Linux系统编程学习之十八进程间通信(IPC)简介
  9. POJ 6048 泰国佛塔 【dfs搜索】【暴力大比拼】【北大ACM/ICPC竞赛训练】
  10. 一些and知识 和ui
  11. wps目录怎么加一条_wps目录怎么自动生成目录?目录自动生出方法介绍
  12. openwrt安装GPS设备,使用GPSD获取GPS信息
  13. bzoj 4987 Tree
  14. 反射(filed)的理解
  15. linux安装tomcat,菜鸟教程
  16. ICC Profile
  17. 2021-07-08~2021-07-22总结--zhengjun
  18. 利用 SGA 共享池,避开 parse 阶段
  19. 线性代数复习总结——基本概念
  20. 网卡、声卡、显卡的作用

热门文章

  1. npm: command not found
  2. 04 c++ 类数据成员的地址和类对象数据成员的地址
  3. 暴力破解电脑开机密码(值得一学,嘻嘻)
  4. web大屏展示用到的组件_可视化大屏如何实现?怎样对接开发?看这就对了!
  5. FVC指纹验证竞赛2004数据集介绍及下载地址
  6. 基于at89c52的矿井空气检测仪
  7. 中科大研究生信息平台抢课脚本低级版本
  8. 容器(dockerk8s)技术简述
  9. node-sass模块报错安装不上?试试这个方法,亲测有效
  10. 数字政府 2.0 时代,政府应用开发平台如何加码中国新基建?