C++中栈的出栈,入栈规则:A,B,C,D,E

考题:

栈底至栈顶一次存放元素 ABCD 在第五个元素E入栈之前  栈中元素可以出栈,则出栈序列可能是_____a d___________.

a.  ABCED

b.  DBCEA

   c.  CDABE

   d.  DCBEA

分析:

1.假定进栈序列是从小到大排练的(即A<B<C<D<E),则出栈序列中不可能有  “大小中”这种序列,因为在“大数”出栈后,在栈中“中数”是在“小数”上面的,所以只能是先出“中数”再出“小数”
2.出栈序列中如包含下列序列则是错误的:CAB,DAB,DAC,EAB,EAC,EAD,EBC,EBD,包括在这些序列中间加入其它的数都是错误的序列,如CAdB,CAeB等情况(大 小 更大  中)。

对于a.答案:A入栈,马上出栈,B入栈,马上出栈,C入栈,马上出栈,D入栈,E入栈,E出栈,D出栈

对于d.答案:A入栈,B入栈,C入栈,D入栈,D出栈,C出栈,B出栈,E入栈,E出栈,A出栈

其他答案均不可能,违反了上述的"大" "小","中"原则

时间: 2024-10-18 12:56:57

C++中栈的出栈,入栈规则:A,B,C,D,E的相关文章

C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)

/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋值*/ #include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#define OK 1#define ERROR 0#define NAMESIZE 255//字符串的最大长度

关于给定栈求出所有合法栈的思考

前几天看到一篇关于给定几个元素,给一个出栈的顺序,判断出栈的顺序是否合法,我们也可以通过给定的元素顺序求出所有的合法的出栈顺序,困扰我的问题是如何求出给定元素的所有的排列问题,之前有篇博文也有求三个数的全序列的,但采用的是三个for循环,实在是too young too simple,效率低不说,而且没有一点实用性,总不能几个数几个for循环,这也太傻了(). 对于判断出栈的合法性问题,我先把思想写出来,至于代码实现需要过两天,求所有的合法出栈顺序有两种思路. 方案1:一种是将所有元素的排列求出

C语言 栈的初始化,入栈,出栈,判断栈是否为空,清空栈等函数

#include <stdio.h>#include <stdlib.h> typedef struct Node{ int data ; struct Node * pNext;}*PNODE ,NODE ; typedef struct stack{ PNODE pTop; PNODE pBottom;}*PSTACK ,STACK;void init(PSTACK pS);void push(PSTACK pS,int val);void show(PSTACK pS);bo

c++描述将一个2进制数转化成10进制数(用到初始化栈,进栈,入栈)

1 /* 2 c++描述将2进制数转化成10进制数 3 问题,1.初始化栈后,用new,不知道delete是否要再写一个函数释放内存, 4 还是在哪里可以加上delete 5 2.如果栈满了,我要分配多点空间,我想的办法是先用delete删除之前申请的 6 空间,再用new重新申请,但是c语言有一个函数 7 s->base =(ElemType*) realloc(s->base,(s->stackSize + STACKINCREMENT) * sizeof(ElemType));//

元素出栈,入栈顺序的合法性。如入栈的序列(1,2,3,4,5)。出栈序列为(4,5,3,2,1)

元素出栈,入栈顺序的合法性.如入栈的序列(1,2,3,4,5).出栈序列为(4,5,3,2,1) 思路: 1)如果当前栈为空,且入栈序列不空,则入栈序列的下一个元素入栈: 2)如果当前辅助栈的栈顶元素不等于出栈序列的首元素,那么入栈序列一直入栈,直到入栈序列为空. 3)如果当前辅助栈的栈顶元素等于出栈序列的首元素,那么栈顶元素弹出,出栈序列第一个元素移走: 4) 如果入栈序列为空,出栈序列第一个元素仍然不等于栈顶元素,则表示2个序列是不匹配的. 下面用图说明 开始栈为空 入栈序列第一个元素入栈后

判断元素出栈,入栈顺序的合法性

问题:元素出栈,入栈顺序的合法性.如入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,1,2) 定义一个栈sp,入栈序列为str1,出栈序列为str2,长度分别为size1和size2.如果两个序列为空或长度不等,则不合法,针对长度相等且不为空的两个序列进行判断. 先将str1中第一个元素入栈,然后通过循环使str1后移. 1.如果当前栈为空且入栈序列不为空,则入栈序列str1后移,sp入栈. 2.如果栈顶元素不等于出栈序列且入栈序列不为空,则入栈序列str1后移,sp入栈. 3.如果栈

22-判断一个序列是否是另一个序列入栈的弹出序列

题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. 解析: 注:当无法抽象的解决问题时,应该给出正面和反面的实例来分析问题,发现规律. 要判断一个输入序列按照顺序压栈出栈,能否得到一个给定的输出序列? 那么我们需要一个栈,来按照给定输出序列的顺序,将输入序列顺序入栈. 如:

编程实现栈的入栈/出栈操作

完整代码如下,其实队栈都只是链表的一种变化而已 #include <stdio.h> #include <stdlib.h> typedef struct student * PNode; typedef struct stacklink * PStack; typedef struct student { int data; PNode next; }Node; typedef struct stacklink { PNode zhandi; PNode top; }Stack;

Python 根据入栈顺利判定出栈顺序

1.读取入栈,出栈数据: 2.把数据分别转化成整数列表: 3.新建栈列表,用入栈数据进行压栈:如果栈列表不为空,并且栈顶层数据为出栈的元素:删除栈列表的顶层数据: 4.如果栈列表不为空,说明栈列表里面的元素没有删除完:那么出栈就不成功:反之,成功: 1 import sys 2 while True: 3 try: 4 a = sys.stdin.readline().strip() # 入栈 5 b = sys.stdin.readline().strip() # 出栈 6 # 转化成列表 7

判断栈的出栈顺序合法性

栈的出栈顺序合法性是指给定一系列元素,如1 - N,按照从小到大的方式入栈,每个元素的出栈时机不定.题目给定一个出栈顺序,我们来判断这个出栈顺序有没有可能发生. 比如对[1,2,3,4,5,6,7,8,9]: [1,2,3,4,5,6,7,8,9]是一个合法出栈序列 [9,8,7,6,5,4,3,2,1]也是一个合法序列 [4,5,3,2,7,6,1,8,9]也是一个合法序列 [3,4,5,1,2,9,8,7,6]就是一个非法序列 判断方法有两种,一种是对每一个值,其后所有小于它的值的数是一个降