美文网首页嵌牛IT观察
双栈实现计算器-基于C语言

双栈实现计算器-基于C语言

作者: 22021211931 | 来源:发表于2022-12-25 17:15 被阅读0次

姓名:刘方姣  学号:22021211931 电子工程学院 

双栈实现计算器-基于C语言

0.实现思路

        先看一个算式的计算过程,例如式子2*(2+2^2-1),这个式子的计算过程当然的先计算'^'的左右操作数,然后再计算'+'左右操作数,再‘-’,最后计算‘*’。根据这个流程,我们可以将算式中的数字依次压入数据栈,将运算符压入运算符栈。

在运算符压栈过程中,需要保持栈顶运算符为当前栈内优先级最高的,换言之就是比当前栈内运算符优先级高的运算符已经完成了运算操作。

运算操作指的就是根据弹栈得到的运算符,将数字栈进行两次出栈操作的到源数和目的数,根据这三个量进行相应的运算后将结果再压入栈内。

        显然,由于括号的存在,括号内运算符的优先级要有顺序并且整体大于括号外运算符的优先级。因此,我在‘(’时将接下来遇到的所有运算符的优先级进行提升,遇见‘)’时将所有运算符优先级恢复,并在检测时对栈顶优先级和当前运算符进行优先级更新。

1.1构建一个栈

        c语言并没有一个类或者一个库包含栈这个数据结构,所以得先从构造一个栈开始。幸好之前我闲的没事把队列和栈都已经写好了,虽然有很多弊端,但也够这次实验使用。

首先,定义一个stack结构体

1.2计算器本体

可以看到测试的算式运算结构都没问题。

3.存在的问题

目前存在的问题有

输入字符之间不能有空格,原因是我没有对空格进行过滤,加个空格过滤就ok了

只能进行十以内数字的混合运算,原因是输入使用的是ASCII码,在压入数据栈的时对数据进行加权求和就ok了

输入等式长度受限,这是代码内栈长度宏定义导致的。

相关文章

  • 双栈实现计算器-基于C语言

    姓名:刘方姣学号:22021211931电子工程学院 双栈实现计算器-基于C语言 0.实现思路 先看一个算...

  • C++语言实现顺序栈

    C++语言实现顺序栈 在写C语言实现顺序栈的时候,我已经向大家介绍了>栈的特点以及介绍了栈的相关操作,并利用C语言...

  • 3. 栈的操作

    1. 栈的操作-c语言实现2. 栈操作的实现-顺序栈和链栈 3. 栈的实现与遍历4. c语言的函数调用栈5. 两个...

  • 盘点:有哪些适合新手练手的C/C++项目?

    1、C/C++ - C语言制作简单计算器 2、C/C++ - C语言实现通讯录 项目使用 C 语言完成一个简单的通...

  • 队列与栈作业(05次)

    队列 栈 运用支持多类型的栈实现计算器

  • 尾递归

    尾递归 Lua尾递归的实现 爆栈问题 基于栈实现函数调用的语言都有栈空间的上限,这里拿几个语言举例 运行到2589...

  • 动态栈的存储结构及算法C语言实现

    动态栈的存储结构及算法C语言实现

  • 计算器JAVA代码 ,双栈写法

    计算器代码 ,双栈写法 ,具体内容看注释

  • 03_栈stack

    基于双端链表实现内存里的栈区 (和堆对应)后进后出

  • Redis对象

    1 对象 Redis基于C语言实现了简单动态字符串,双端链表,字典,压缩列表,整数集合等数据结构,基于这些数据结构...

网友评论

    本文标题:双栈实现计算器-基于C语言

    本文链接:https://www.haomeiwen.com/subject/xkjgqdtx.html