当前位置:网站首页>栈的计算(入栈出栈顺序是否合法)-代码
栈的计算(入栈出栈顺序是否合法)-代码
2022-06-27 12:08:00 【Unconquerable&Llxy】
1)了解一下栈
栈可以这么理解:
一个分层箱子,只有上面有入口。先进入的值必然会到下面。
而到了向外取值的时候,上面的,也就是后进去的反而先被取了出来,先进入的只能后出。这叫做:“先入后出”。
2)例题。
例如,入栈顺序为a,b,c,d,e,求不合法的出栈顺序:
A. a,b,c,d,e
B. e,d,c,b,a
C. a,b,c,e,d
D. e,c,d,b,a
情况1)全入,那么出栈顺序为:e,d,c,b,a(B选项),没什么可说的。
情况2)单入。一个一个入,一个一个取。比如,先入一个值a,然后不在入值,而是先把它取出来,再入b,取b,入c,取c,等等。那么,这样的出栈顺序则变成了a,b,c,d,e。(A选项)
情况3)先入一部分,取,再入,再取,等等。这部分情况太多,自己理解地去想想吧。
3)程序实现。
要想教给程序如何判断这么复杂的情况可能有些困难,但让它“穷举”则能体现出其长处。
#coding=utf-8
class ZHAN(object):
def __init__(self):
self.real=[]
def add(self,other):
self.real.append(other)
def remove(self):
return self.real.pop()
def size(self):
return len(self.real)
def clear(self):
self.real=[]
def everything_out(self):
a=self.real[::-1]
self.clear()
return a
def canout(self):
try:
return self.real[-1]
except IndexError:
return None
def islegal(lt,choose_list):
init=ZHAN()
aa=0
legal=[]
illegal=[]
for i in choose_list:
aa+=1
out=[]#8 25 14 87 51 90 6 19 20
init.clear()
for j in lt:
init.add(j)
try:
while (i[len(out)]==init.canout()):
out.append(init.remove())
except:
pass
print(out)
if len(out)==len(i):
print(f"{aa}合法。")
legal.append(aa)
else:
print(f"{aa}不合法。")
illegal.append(aa)
a=input("进入顺序:")
sp=input("分隔符")
if sp=="":
a=list(a)
else:
a=a.split(sp)
print("选项:(本行不输入内容+换行停止输入)")
b=[]
aa=0
while True:
aa+=1
z=input(f"{aa}项:")
if sp!="":
m=z.split(sp)
else:
m=list(z)
if z!="":
b.append(m)
else:
break
islegal(a,b)先创建一个栈的实体数据类型,再进行穷举分析。
可以来看一下结果:
进入顺序:abcde
分隔符
选项:(本行不输入内容+换行停止输入)
1项:abcde
2项:edcba
3项:abced
4项:ecdba
5项:
['a', 'b', 'c', 'd', 'e']
1合法。
['e', 'd', 'c', 'b', 'a']
2合法。
['a', 'b', 'c', 'e', 'd']
3合法。
['e']
4不合法。
注意,分隔符处可以什么也不输,直接换行,表示每一个字符都是一个单独的值。
边栏推荐
- Topic37——64. Minimum path sum
- Interview shock 60: what will cause MySQL index invalidation?
- Talk about go language and cloud native technology
- Interview shock 60: what will cause MySQL index invalidation?
- 树莓派 3b+ 学习
- 关闭windows defender安全中心的方法
- uni-app 使用escook/request-miniprogram插件发请求说明
- ssh工作流程及原理
- MIT6.031 软件构造 Reading7阅读笔记Designing Specifications(设计规范)
- picocli-入门
猜你喜欢

面试突击60:什么情况会导致 MySQL 索引失效?

ssh工作流程及原理

私藏干货分享:关于企业架构中如何进行平台化
![[fans' welfare] today, I'd like to introduce a method to collect money for nothing - convertible bonds. I personally verified that each person can earn 1500 yuan a year](/img/b8/8de207734e4aa85778ca1f0609ddf2.png)
[fans' welfare] today, I'd like to introduce a method to collect money for nothing - convertible bonds. I personally verified that each person can earn 1500 yuan a year

动态规划【三】(区间dp)石子合并

动态规划【四】(计数类dp)例题:整数划分

MapReduce practical cases (customized sorting, secondary sorting, grouping, zoning)

MySQL高阶语句(一)

mysql学习1:安装mysql

Nifi from introduction to practice (nanny level tutorial) - identity authentication
随机推荐
. Net6 access skywalking link tracking complete process
记一次 .NET 某物管后台服务 卡死分析
二叉树的三种遍历方式
56. Core principle of flutter - flutter startup process and rendering pipeline
浏览器cookie转selenium cookie登录
uni-app 使用escook/request-miniprogram插件发请求说明
[tcapulusdb knowledge base] Introduction to tcapulusdb tcapsvrmgr tool (II)
Research Report on the overall scale, major manufacturers, major regions, products and application segments of hydraulic torque in the global market in 2022
How histrix works
MapReduce principle analysis (in-depth source code)
LeetCode_快速幂_递归_中等_50.Pow(x, n)
On ticheck
Hibernate operation Oracle database primary key auto increment
关闭windows defender安全中心的方法
Mit6.031 software construction7 reading notesdesigning specifications
解除百度文库VIP、语雀、知乎付费限制,原来这么简单
MySQL高阶语句(一)
log4j.properties的配置详解
浏览器输入url地址,到页面渲染发生了什么
Basic usage and principle of fork/join framework