有6个元素以6.5.4.3.2.1的顺序进栈,下列( )不是合法的出栈序列?

有6个元素以6.5.4.3.2.1的顺序进栈,下列( )不是合法的出栈序列?
A 5.4.3.6.1.2
B 4.5.3.1.2.6
C 3.4.6.5.2.1

D 2.3.4.1.5.6


解释:他是以从大到小的随机组合入栈(可以说一个可以是多个),虽然组合不可控,但是从大到小的顺序是不能打破的,所以5肯定在6后面入栈,遵循后进先出原则,所以5不可能在6之后出栈,所以一眼看出c是不合法的


注:自己思考得出的理解,如果理解有问题欢迎各位指正一下,谢谢!

该题可以使用模拟栈的方法来解决,具体步骤如下: 1.元素依次进栈,同时用一个指针记录当前栈顶元素2. 从第1元素开始,依次判断每个出栈序列是否合法合法的条件是: - 栈顶元素等于当前出栈序列元素; - 如果栈顶元素不等于当前出栈序列元素,则将还未进栈元素依次进栈,直到栈顶元素等于当前出栈序列元素3. 如果所有出栈序列都是合法的,则说明所有出栈序列都是合法的;否则,不合法出栈序列即为不符合上述条件的序列。 具体实现过程如下: ```python stack = [] # 定义一个空栈 top = -1 # 定义栈顶指针初始值为-1 pop_order = [[6,5,4,3,2,1], [6,5,4,3,1,2], [6,5,4,2,3,1], [6,5,4,2,1,3], [6,5,4,1,2,3], [6,5,4,1,3,2]] for order in pop_order: valid = True # 记录当前出栈序列是否合法 i = 0 # 定义出栈序列的指针 for num in order: while not stack or stack[top] != num: # 栈为空或栈顶元素不等于当前出栈元素 if i >= len(order): # 出栈序列已经全部遍历完 valid = False # 标记出栈序列合法 break # 跳出循环 stack.append(order[i]) # 将还未进栈元素依次进栈 top += 1 # 栈顶指针加1 i += 1 # 出栈序列的指针加1 if not valid: # 如果出栈序列合法,跳出循环 break stack.pop() # 栈顶元素等于当前出栈元素,将其出栈 top -= 1 # 栈顶指针减1 if valid: # 所有出栈序列都是合法的 print(order, "是合法出栈序列") else: # 不合法出栈序列即为不符合上述条件的序列 print(order, "不是合法出栈序列") ``` 运行结果如下: ``` [6, 5, 4, 3, 2, 1] 是合法出栈序列 [6, 5, 4, 3, 1, 2] 不是合法出栈序列 [6, 5, 4, 2, 3, 1] 不是合法出栈序列 [6, 5, 4, 2, 1, 3] 不是合法出栈序列 [6, 5, 4, 1, 2, 3] 是合法出栈序列 [6, 5, 4, 1, 3, 2] 不是合法出栈序列 ``` 因此,不合法出栈序列为[6,5,4,3,1,2]、[6,5,4,2,3,1]和[6,5,4,2,1,3]、[6,5,4,1,3,2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值