入栈与出栈顺序,出栈顺序问题

2020-11-24 21:02:37 字数 5821 阅读 6583

1楼:匿名用户

答案选3。

因为 选项3中第一个出栈

的是d,说明此时a,b,c都已经在栈中(c为栈顶),所以下一个出栈的可以是c,然后e进栈后随即出栈,所以到e这里都是对的。此时栈里面只有a,b,其中b为栈顶,所以下一个出栈的只能是b,不能是a

给定4个元素a,b,c,d依次入栈,为什么出栈顺序可以是adcb和bdca

2楼:乌月风随

这个题要换个角度思考,题目只说a、b、c、d依次入栈,但并没有说中途不允许出栈。

1、adcb的出栈原因是这样的:

第一步:a入栈,紧接着a出栈;

第二步:b入栈,c入栈,d入栈,然后再依次出栈,即dcb依次出栈;

综上所述出栈顺序就是adcb,可以发现并没有破坏abcd的进栈顺序。

2、bdca的出栈原因是这样的:

第一步:ab依次入栈,然后b出栈;

第二步:cd依次入栈,这样栈里元素由顶到底依次位dca,全部出栈则位dca;

综上所述出栈顺序可以是bdca,可以发现也没有破坏abcd的进栈顺序。

出栈顺序问题

3楼:匿名用户

很好理解啊,栈的特点是‘先进后出’,比如说12345,有可能1刚进栈就出栈了,其它数全进去了才出,就会产生15432,以此类推就可以;相反43512就不行,因为当4首先出栈,则说明1,2,3三个元素已经入栈,则出栈序列中1不可能在2之前

4楼:匿名用户

大部分题目是判断哪个不能为输出序列,有个比较好的方法判断即是 :先出来的序号后面一定不能有比他本身小的从小到大排列的序列。两两对比

比如12345

45321 正确

43512(5后面有比它本身小且从小到大排序所以是错的)所有题目都可以照着这个规律做

5楼:沈宝宝的牛

兄弟,那个规则适用于进去但不先出来,比如1进去不出来,2进去不出来,之后出来的时候顺序必须是2先出来,然后1再出来,望采纳,谢谢

6楼:林海语音兮

最终的总结结果是:按从小到大进栈,如果大的数字先出来,比他小的数字一定按从大到小的顺序出;

7楼:皓月千里长空

可以顺,可以逆,可以单,可以双,规律很多。

8楼:云端的金枪鱼

笔画名称:横、竖、撇、点、横、横、斜钩、撇、点栈读音: zhàn

释义:

储存货物或供旅客住宿的房屋。

竹木编成的遮蔽物或其他东西。

用木料或其他材料架设的通道。

通过,越过。.

组词造句:栈道[ zhàn dào ]

在悬崖绝壁上凿孔架木而成的窄路

造句:新地全力赞助首届昂步栈道慈善步行。

行栈[ háng zhàn ]

1.古代守城的一种设施。

2.替人存放货物并介绍买卖的商业机构。

造句:要通过程序进行栈的追踪,程序员可能不得不使用abi定义为尚未得到支持的体系结构去实现他们自己的版本。

堆栈[ duī zhàn ]

临时寄存货物的地方

造句:xsl 处理程序堆栈溢出- 可能的原因是因为无限的模板递归。

恋栈[ liàn zhàn ]

1.原指马对马棚依恋之情

2.现用以说明做官之人对官位的依恋

造句:我只知道这里,再也没有可恋栈的东西。

客栈[ kè zhàn ]

一般设备较简陋、能兼供客户存货并代办转运的旅店造句:常常是一个山谷连一家客栈也没有。

货栈[ huò zhàn ]

1.有仓库或场地、经营商品储存的企业

2.囤积货物的仓库

造句:一束黄色的灯光似乎在欢迎他们光临这个皮毛货栈。

栈房[ zhàn fáng ]

1.仓库,货栈

2.〈方〉客栈;旅店

造句:伊坦穿过栈房,走到巷子对面,敲敲银行的后门。

栈阁[ zhàn gé ]

1.栈道。

2.存放东西的屋子。

造句:客栈旁边有一个小小的栈阁,专门用于存放东西。

虹栈[ hóng zhàn ]

拱曲高悬的栈道。

造句:在山区,到处都是危险的虹栈 ,人们群众出行很困难。

丝栈[ sī zhàn ]

1.旧中国在上海出现的经营华商与洋商间生丝**的中间商。经营四川、湖北及山东等省产生丝。接受厂商委托,转售洋行,抽收佣金。并代办仓储、保险、纳税等事,有时还借垫资金。

2.储存生丝的栈房。

造句:成年后要在杨信之开办的康泰丝栈中工作。

9楼:匿名用户

顺序54321正反顺序问题

栈的入栈顺序和出栈顺序的各种可能???

10楼:匿名用户

举一个例子吧。入栈顺序:a、b、c、d

出栈顺序

可以是:d、c、b、a;a、b、c、d;b、a、c、d很多啦,但要把栈想像成一个没盖子的纸箱,取出东西时只能从最上层取,放进东西也只能放在最上层,所以栈是一个“后进先出”或“先进后出”的顺序存储结构。

入栈顺序是1234,出栈序列有哪几种 5

11楼:张震是

4个元素的全排列共有24种,栈要求符合后进先出,按此衡量排除后即得:

1234√,1243√,1324√,1342√,1423×,1432√,2134√,2143√,2314√ ,2341√,

2413×,2431√,3124×,3142×,3214√,3241√,3412×,3421√,4123×,4132×,

4213×,4231×,4312×,4321√。

14种可能,10种不可能。

扩展资料

栈的典型应用有算术表达式的检查和背包问题等,实际上,凡属符合后进先出原则的问题,都可以用栈来处理。

1、算术表达式中括号作用域合法性的检查

括号作用域的检查是栈的典型实例。检查一个算术表达式中使用的括号是否正确,应从下面两个方面考虑:

1)左右括号的数目应该相等;

2)每一个左括号都一定有一个右括号与之匹配。

算法思想:括号作用域检查的原则是,对表达式从左到右扫描。当遇到左括号时,左括号入栈;当遇到右括号时,首先将栈顶元素弹出栈,再比较弹出元素是否与右括号匹配,若匹配,则操作继续;否则,查出错误,并停止操作。

2、背包问题

问题:假设有n件质量分配为w1,w2,...,wn的物品和一个最多能装载总质量为t的背包,能否从这n件物品中选择若干件物品装入背包,使得被选物品的总质量恰好等于背包所能装载的最大质量,即wi1+wi2+...

+wik=t。若能,则背包问题有解,否则无解。

算法思想:首先将n件物品排成一列,依次选取;若装入某件物品后,背包内物品的总质量不超过背包最大装载质量时,则装入(进栈);否则放弃这件物品的选择,选择下一件物品试探,直至装入的物品总和正好是背包的最大**质量为止。这时我们称背包装满。

若装入若干物品的背包没有满,而且又无其他物品可以选入背包,说明已装入背包的物品中有不合格者,需从背包中取出最后装入的物品(退栈),然后在未装入的物品中挑选,重复此过程,直至装满背包(有解),或无物品可选(无解)为止。

具体实现:设用数组weight[1..n],stack[1,n]分别存放物品重量和已经装入背包(栈)的物品序号,maxw表示背包的最大装载量。

每进栈一个物品,就从maxw中减去该物品的质量,设i为待选物品序号。

若maxw-weight[i]>=0,则该物品可选;若maxw-weight[i] < 0,则该物品不可选,且若i>n,则需退栈,若此时栈空,则说明无解。

关于入栈,出栈指针和数据操作顺序的疑问

12楼:匿名用户

楼主,堆栈是一个抽象数据类型,规定的两项必备的基本操作分别为入栈和出栈。这个抽象数据类型并没规定入栈与出栈具体要怎么实现。你问的问题已经在实现这一层面上,所以按照堆栈这种抽象数据类型的规定看,“先修改指针,然后插入数据,出栈时刚好相反”并不是必须的,这取决于你的操作的具体实现。

如果你的堆栈的实现是往上长的(就是说往顶的方向长,其实质是你的栈底是定死的不能动,入栈的东西只能不断往上叠,这就像你在书桌上放书一样,桌底是定死的,所以你的书只能一本一本地往上堆,往上长),计算机内部的堆栈的实现采取的就是这种模式,所以就得像你说的那样,“先修改指针,然后插入数据,出栈时刚好相反”,因为你堆栈指针指向的总是栈顶元素,栈底不能动,所以数据入栈前要先修改指针使它指向新的空余空间然后再把数据存进去,出栈的时候自然相反,你联系我上面举的放书的例子仔细想想。

然而,如果你的堆栈的实现是往下长的(就是说你每压一个元素入栈,栈底就自动下移一个元素的位置,其实质就是这种堆栈模型是一个“无底洞”型),这个时候,你的栈顶就变成了定死的,你就可以先压入元素,然后再修改指针。因为你的栈底是无限的,你压入一个元素,新的元素就取代先前的栈顶元素占据栈顶的位置,那么你先前的指向栈顶元素的指针这个时候就该修改让它指向这个新的栈顶元素了。

下面的就是对“无底洞”型堆栈的一种实现的描述:

压栈(入栈):将对象或者数据压入栈中,更新栈顶指针,使其指向最后入栈的对象或数据。

弹栈(出栈):返回栈顶指向的对象或数据,并从栈中删除该对象或数据,更新栈顶。

话说回来,计算机内部肯定选第一种模型,不会选第二种,因为第二种模型,每压入一个新的元素,都需要把之前堆栈里的所有元素整体下移动一个元素的位置,腾出栈顶元素的位置让新的元素进来,这种平移可是一笔不小的开销啊!但是并不是说“无底洞”模型就没办法实现了,其实它可以通过第一种模型来模拟的,每需要压入一个新的元素的时候,就先开辟一个空间,数据存入这个空间,然后再修改栈顶元素指针使其指向这个新的栈顶元素。

换句话说,用链表的话,只要有足够的空间可开辟出来作为一个节点,那么两种堆栈模型都能实现(当然“无底洞”型还是如我上面说的那样用第一种模拟出来的,否则平移的工作量相当可观),如果用数组,由于数组在内存中是连续分配出来的空间,用第一种模型更自然一些。

13楼:匿名用户

出入堆栈和装货一样的道理,怎么说呢?你仔细想想就明白了

14楼:匿名用户

形象的说, 栈 就是一个上面有标签栏的桶. 标签栏(类似超女投票的那种)就代表指针.桶底就是栈底.

桶顶就是栈顶. 拿一个东西准备放入桶,先要往里面扔一个标签(指针定位).然后在把东西(数据)放进桶里.

可以想象一下.后放进去的东西总是压在前一个东西的上面.要拿的话也是先拿最后一个.

15楼:匿名用户

打个比方:假如你是房东,有人要住你的房子,那他住进来前你肯定要先把房子腾空,然后让他住进来;反之,如果你不租给他住了,肯定是要先把房客赶出去,然后再使用空出来的房子。

道理是一样的,你把堆栈看成是房子,数据看成是房客,就会懂了。

16楼:匿名用户

堆栈主要用于储存临时数据、本地变量和中断、子程序调用产生后的返回地址。堆栈指针寄存器通常指向堆栈的顶部。注意堆栈的执行是从较高的存储器地址到较低的存储器地址。

也就是说,一条堆栈push命令会使堆栈指针减小堆栈指针指向数据sram堆栈区域中子程序和中断堆栈被定位的位置。在任何子程序被调用或中断被使能之前,位于数据sram中的这一堆栈空间必须由程序定义好。堆栈指针必须被设在0x60之上。

当使用push指令向堆栈中压入一个数据时,堆栈指针自动减1;而当返回地址被子程序调用或中断压入堆栈时,堆栈指针自动减2。当使用pop指令把一个数据从堆栈中弹出时,堆栈指针自动加1;而由子程序的ret或中断程序的reti弹出数据时,堆栈指针自动加2。

希望对你有帮助!