数据结构实验三 用栈实现进制转换和计算器
在c++中栈已经有stl容器定义过了,在这里面我就不写栈的定义的那部分了(因为太麻烦了)
进制转换非常简单,尤其是这次只要求了十以内进制的转换,我们只需要先输入要转换的进制t,然后输入要转换的数n,每次求n对进制t取模,压入栈中,最后再一直pop到栈为空即可.
代码如下
void Dataturn(int t,int n)
{stack<int> s;if(n==0)cout<<0<<endl;else{while(n){s.push(n%t);n/=t;}while(!empty(s)){cout<<s.top();s.pop();}}
}
实现计算器相对来说比较麻烦,需要先进行我们常用的中缀表达式转换成计算机能线性一次读完的后缀表达式(又叫波兰式),实现转换后就非常简单了,我们在进行转换之前需要对运算符的优先级进行比较,我们可以bool一个cmp函数来进行运算符优先级的比较
bool cmp(char a,char b)
{if (a == '+'&&b == '(')return true;if (a == '-'&&(b == '*'||b == '('||b == '/'))return true;if (a == '*'&&(b == '+'||b == '-'||b == '('))return true;if (a == '/'&&(b == '+'||b == '-'||b == '('))return true;return false;
}
然后就可以写转换成后缀表达式的部分了
由于这次只要求进行十以内的数在计算器中进行运算,我们就并不需要进行数位的判断(当然加上也并不难,笔者在这里就不写了,读者们如果有需要可以自己研究一下)
我们传入一个字符串s,再定义一个字符串res,然后遍历s将其传入res和栈来转化,
string turn_back(string s)
{string res;stack<char> op;int len = s.length();for (int i = 0; i < len; i++){if (s[i]-'0'>=0&&s[i]-'0'<=9)res += s[i];if (s[i] == '(')op.push(s[i]);if (s[i] == '+'||s[i]=='*'||s[i]=='-'||s[i]=='/'){if (op.empty())op.push(s[i]);elsewhile (1){char temp = op.top();if (cmp(s[i], temp)){op.push(s[i]);break;}else{res += temp;op.pop();if (op.empty()){op.push(s[i]);break;}}}}if (s[i] == ')'){while (op.top() != '('){res += op.top();op.pop();}op.pop();}}while (!op.empty()){res += op.top();op.pop();}return res;
}
测试输入2+3+4+(52)-6/3
可得输出23+4+52+63/-
可见成功将中缀表达式转换成了后缀表达式
在计算器的实现中我们只需要传入这个后缀表达式,然后对s逐位进行运算,如果s[i]是数字,就将其压入栈,如果是符号,就将栈内栈顶的两个数字进行计算,然后再压入栈,如果是不满足交换律的运算符要记住将其反过来运算,因为比较简单就不贴代码了。
还有一种计算器的实现方法是直接对s进行运算,不需要转化成res,不过由于时间有限,笔者没有研究那种方法,如果有会的读者或者有相关链接的读者可以把链接在评论区发一下
数据结构实验三 用栈实现进制转换和计算器相关推荐
- 数据结构学习笔记:利用栈实现进制转换
数据结构学习笔记:利用栈实现进制转换 一.除基倒取余法示意图 二.编写十进制转换成二进制Python程序 1.源代码 2.运行结果 其实Python提供了一
- HTML编写2进制转换计算器,jQuery实现可以计算进制转换的计算器
本文实例为大家分享了jQuery实现可以计算进制转换的计算器,供大家参考,具体内容如下 在案例8的基础上增加了进制转换功能 动画效果: 计算器 *{ margin: 0; padding: 0; } ...
- python 进制转换_Python数据结构与算法——递归应用之进制转换
高考加油 在前面的文章中堆栈也用于进制转换(存放余数).而递归也可以用于进制转换,有固定模式循环,并且可以规模越来越小的问题都可以转换成递归 栈与递归之间一定有点联系 整数转换成任意进制 日常运算都是 ...
- C语言中用栈实现进制转换,利用栈实现进制转换问题
进制转换问题 建立顺序栈或链栈,编写程序实现十进制数到二进制数的转换. 输入 输入只有一行,就是十进制整数. 输出 转换后的二进制数. 样例输入 10 样例输出 1010 十进制怎么转为二进制?十进制 ...
- 基础算法4 —— 结构体(成绩统计) + 栈(模拟进制转换 + 优秀的拆分) + 指针
结构体 结构体的实际应用场景: 在实际问题中,一组数据往往具有不同的数据类型.比如,某次期末考试中要记录一个学生的考试信息,除了有姓名(char)外,还有班级(int).性别(char).语文.数学. ...
- 用C语言栈实现进制转换
#include<stdio.h> #include<stdlib.h> #include<windows.h> #define MAXSIZE 100 typed ...
- C语言栈实现进制转换
栈-10进制任意转换 设计思路 例如讲10进制转换为2进制计算思路为: 利用循环将每一个余数都压入栈中,再遍历出栈 转换代码: /*进制转换 */ scStack *sysConvert(int nu ...
- 数据结构作业--链栈实现进制转换
十进制转换为2,8,16进制 #include <stdio.h> #include <stdlib.h> #include <string.h>/*此处是链栈数据 ...
- VC++2012编程演练数据结构《3》堆栈实现进制转换
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表.它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出 ...
最新文章
- google的gn构建系统
- 我要狠狠的反驳“公司禁止使用Lombok”的观点
- python对数据进行合并的函数_利用Python pandas对Excel进行合并的方法示例
- java的String构造对象的几种方法以及内存运行过程
- OpenFOAM计算时,同时将结果输出到:计算窗口+文件
- sendmail邮件服务器的基本建立过程
- win10饥荒服务器未响应,win10系统玩饥荒联机很卡如何解决[多图]
- 2011年国庆老家记录
- 基于R语言分析决策树和随机森林(1)
- win7计算机怎么初始化,win7怎么初始化电脑 win7初始化电脑步骤
- 特征选择:python lime
- 2020年第一波薅当当网羊毛的机会,别错过!
- angularjs1-3,工具方法,bootstrap,多个module,引入jquery
- apollo自动驾驶进阶学习之:如何实现施工路段限速绕行及其参数调试
- 原像、第二原像、碰撞;随机预言机;生日攻击
- Oracle DBA日常工作手册
- 黑马程序员_程序代码实现进制转换
- selenium直接刚淘宝登录
- 大学必备算法,求最大公约数
- HTML进行表单验证