首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

模拟入栈操作

记录一下,C语言中一道比较经典的题目 -- 模拟入栈: 实现一个基本的计算器来计算一个简单的字符串表达式的值。 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。...解决思路 新建一个数组模拟栈,将输入的有效字符转成整型入栈。 在入栈过程中遇到乘除直接与栈顶数据运算,并将结果更新到栈顶数据。 遇到加减法直接入栈,加法入栈正数,减法入栈负数。...源码(在社区中找到了一篇比较优秀的代码,这里直接贴上作者stailor的源码): // 得到如果出现超过两位以上的数 long cal(char * s, int* pos) { long temp...1,乘除则与栈顶相计算更新栈顶元素 if (s[pos] >= '0' && s[pos] <= '9') { if (flag == 1) {...*/ 这里附上栈的操作示意图: ?

43930
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    栈的压入、弹出序列 栈的压入、弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。...例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。...(注意:这两个序列的长度是相等的) 解题思路 模拟堆栈操作的过程,将原数列依次压栈,把栈顶元素与所给出栈队列相比,如果相同则出栈,如果不同则继续压栈,直到原数列中所有数字压栈完毕。...最后,检测栈中是否为空,若空,说明出栈队列可由原数列进行栈操作得到。否则,说明出栈队列不能由原数列进行栈操作得到。...参考代码 import java.util.ArrayList; import java.util.Stack; public class Solution { public boolean IsPopOrder

    56320

    关于函数参数入栈的思考(函数调用约定,入栈顺序)

    this指针在所有参数压栈后被压入堆栈; (3)对参数个数不定的,调用者清理堆栈,否则函数自己清理堆栈。...首先,虽然入栈顺序还是从右向左,只有这样才能实现入栈的值,所以另外开辟了一个内存单元dword ptr [ebp-0D0h]来存放第一个入栈的表达式的值。...接着计算—i的值,自减运算完成之后,编译器认为i的值可以直接作为参数入栈,所以并没有开辟别的内存单元存放这一个入栈参数的值。 再接下来计算++i情形跟计算- -i类似。...这些操作完成之后,分别将dword ptr [ebp-0D0h]处的值、最终的i和i入栈。再三次调用cout.operator<<函数将它们输出。所以程序的最终结果是11,11,10。

    2.7K31

    华为OD机试,入栈出栈

    入栈出栈 题目 向一个空栈中依次存入正整数,假设入栈元素 N (1 <= N <= 2^31-1),按顺序依次为 N_x ......N_4、N_3、N_2、N_1, 当元素入栈时,如果 N1=N2+...Ny (y的范围[2,x],1 <= x <= 1000), 则 N1 到 Ny 全部元素出栈,重新入栈新元素 M(M=2*N1...如依次向栈存储 6、1、2、3,当存储 6、1、2 时, 栈底至栈顶以此为 [6、1、2]:当存入 3 时,3=2+1, 3、2、1 全部出栈,重新入栈元素 6,(6=2*3) 此时栈中有元素 6,...最终栈中只剩一个元素 12。 输入 使用单个空格隔开的正整数的字符串,如:5 6 7 8,左边的数字先入栈。 输入的正整数个数为 x,1 <= x <= 1000。...blog.csdn.net/hihell/article/details/129009228 C++ 题解:https://blog.csdn.net/hihell/article/details/129150670 JAVA

    42310

    【栈打卡1】:栈的压入、弹出序列

    【题目】 输入两个整数数组序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。...具体的步骤是这样的:我们先创建一个辅助的栈 stack。 1、让入栈序列 arr1 的元素入栈,每入栈一个元素,都来判断该元素是否与 arr2 的数组相等。...3、如果不相等,则继续把 arr1 中的元素压入栈,然后继续判断比较…. 4、当 arr1 的元素全部入栈退出循环之后,如果 stack 中不为空,则返回 false,否则返回 true。...我举个例子吧: 入栈1,2,3,4,5 出栈4,5,3,2,1 首先1入辅助栈,此时栈顶1≠4,继续入栈2 此时栈顶2≠4,继续入栈3 此时栈顶3≠4,继续入栈4 此时栈顶4=4,出栈4,弹出序列向后一位...代码如下: public boolean IsPopOrder(int [] pushA,int [] popA) { Stack stack = new Stack();

    44130

    最小栈 与 栈的压入、弹出序列

    示例图: 代码实现: class MinStack { public: MinStack() { } void push(int val) {...return min_stack.top(); } private: stack push_stack; stack min_stack; }; 二、栈的压入...、弹出序列 题目来源于:牛客 题目链接:传送门 题目介绍: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个在这里插入代码片序列是否可能为该栈的弹出顺序。...假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。...创建一个栈,模拟进栈的过程. 每次入栈一个数据以后,判断与出栈序列首个元素是否相同. 不想同则表示此时不出栈,则继续入栈. 相同则表示此时可以出栈,则一直出栈直到不相同.

    19220

    栈的压入弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。 假设压入栈的所有数字均不相等。...例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。...举例: 入栈1,2,3,4,5 出栈4,5,3,2,1 首先1入辅助栈,此时栈顶1≠4,继续入栈2 此时栈顶2≠4,继续入栈3 此时栈顶3≠4,继续入栈4 此时栈顶4=4,出栈4,弹出序列向后一位...,此时为5,,辅助栈里面是1,2,3 此时栈顶3≠5,继续入栈5 此时栈顶5=5,出栈5,弹出序列向后一位,此时为3,,辅助栈里面是1,2,3 原理是啥呢?...代码: public boolean IsPopOrder(int [] pushA,int [] popA) { Stack stack=new Stack()

    23510

    栈的压入、弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。...例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 是该压栈序列对应的一个弹出序列,但 4,3,5,1,2 就不可能是该压栈序列的弹出序列。...解题思路 使用一个栈来模拟压入弹出操作。...每次入栈一个元素后,都要判断一下栈顶元素是不是当前出栈序列 popSequence 的第一个元素,如果是的话则执行出栈操作并将 popSequence 往后移一位,继续进行判断。...如果最后栈中还有元素存在,说明有不相等的序列存在,那么就不是该压栈序列的弹出序列。

    27410

    给定入栈序列,判断出栈序列是否合法

    题目:分别给定入栈序列和出栈序列,然后判断出栈序列是否合法。如入栈序列是[1,3,2,4,5],出栈序列[3,1,2,4,5]是合法的,[3,1,5,2,4]是不合法的。...思路: 判断出栈序列是否合法的标准是:栈顶如果是需要出栈的元素,则出栈,如果不是则将未入栈的元素按入栈序列依次入栈,直到栈顶为出栈的元素。...如果所有元素都入栈了,仍然没有找到要弹出的元素,那么该出栈序列一定不是合法的。...参考代码: #include #include using namespace std; bool isPopOrder(int* pushOrder, int*...cout<<"popOrderWrong is wrong"<<endl; 实验结果: 打印输出: popOrderRight is right popOrderWrong is wrong 如果代码有

    1.7K20

    Java栈结构_栈java

    大家好,又见面了,我是你们的朋友全栈君。 Java栈结构 概念 典型的栈结构如下图所示:栈结构只能在一端操作,该操作端叫做栈顶,另一端叫做栈底。...那样在执行的过程中, 会先将A压入栈, A没有执行完, 所有不会弹出栈. 在A执行的过程中调用了B, 会将B压入到栈, 这个时候B在栈顶, A在栈底....如果这个时候B可以执行完, 那么B会弹出栈. 但是B有执行完吗? 没有, 它调用了C. 所以C会压栈, 并且在栈顶. 而C调用了D, D会压入到栈顶....(通过栈来实现的) 清楚了上面这个调用流程就应该知道栈的重要性了吧。在Java中已经跟我们封装好了 Stock类就是栈结构 栈的应用 首先了解一下栈中的常用方法?...上面涉及到十转二 用到的辗转相除法 不会的可以取了解下, 具体代码处理如下: public static String SysConvert(int number){ Stack

    58110

    Java的栈与队列以及代码实现

    栈的概念(Stack) 栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶 栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等。...例如这把枪,第一发子弹是最后发射的,第一发子弹在栈底,而最新安装上去的子弹在栈的顶部,只有将上面的子弹打完(栈顶的数据走完),最后一发子弹才会射出 栈的实现 栈的实现是基于简单的数组形成的,我们可以将它想象成连续的数组...,而栈的顺序是由后放到前放 模拟实现栈的方法:push(放入一个元素到栈中) pop(提取栈顶的一个元素,并将在其栈中消除) peek(查看栈顶的元素) size(查看栈中的大小) empty...(栈中是否为空) full(栈是否满了) 代码 import java.util.Arrays; public class MyStack implements IStack { private...,最先进的为栈底,最后进的为栈顶。

    11910

    栈的压入与弹出序列校验

    前言 有两个整数序列,第一个序列表示栈的压入顺序,判断第二个序列是否为该栈的弹出顺序。假设压入栈的数字均不相等。...思路分析 仔细分析题目后,我们很直观的想法就是构造一个辅助栈,把压入序列中的数字依次压入该辅助栈。...取出弹出序列的第2个元素,在压入序列中从已取索引位置开始寻找与之相等的元素,将它之前的数字和其本身依次入栈。 此时,栈顶元素与弹出序列的第2个元素相等,将栈顶元素出栈。...,弹出序列的第3个元素从辅助栈出栈后,压入序列已经被取完。...image-20220914114538508 实现代码 经过上面的分析,我们已经知道了如何解决这个问题。

    30920

    剑指offer代码解析——面试题22栈的压入、弹出序列

    本题的详细分析过程均在代码的注释中: import java.util.Stack; /** * 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为栈的弹出顺序。...* 一个序列如果依次入栈,再依次出栈的话,序列将会被逆序输出。 * 但如果在入栈的过程中随机停止入栈操作,紧接着随机出栈n个元素,这样出栈顺序将会千变万化。...* 本题就是要求判断某一个数组是否属于指定入栈序列的出栈序列。...*/ /** * 判断出栈序列是否符合指定入栈序列的某一种出栈顺序 * @param a 入栈序列 * @param b 出栈序列 * @return 返回执行结果 */...= b.length){ System.out.println("入栈序列与出栈序列长度不等!")

    77170

    面试22.栈的压入、弹出

    题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。...例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。...() -> 1 样例2: 输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2] 输出:false 解释:1 不能在 2 之前弹出 方法: 使用模拟的思路,首先将入栈序列一次入栈...,然后将当前栈顶元素与出栈序列的当前元素进行比较。...如果相同,就出栈当前元素,并且将出栈序列后移一个元素位置。当所有的元素入栈之后,判断栈中是否还有元素,如果有说明出栈序列不合法。没有则合法。

    22110

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券