栈中常见问题---如何根据入栈序列判断可能出栈序列

问题二 如何根据入栈序列判断可能出栈序列
如入栈的子序列是{1-2-3-4-5},那么出栈的顺序有可能是{3-2-5-4-1}么?
当然可以啦,我们这么想,首先,栈是先进后出,一般先出栈顶的元素。那么我们依次将输入序列入栈,并判断入栈以后的栈顶元素是否等于出栈序列的第一个元素,那么就将入栈的元素pop出。最后,看入栈的所有元素是否已经pop出。并且出栈的序列是否全部划过。

class Stack():
	def __init__(self):
		self.items=[]
	def is_empty(self):
		return len(self.items)==0
	def pop(self):
		if self.is_empty():
			return None
		else:
			self.items.pop()
	def peek(self):
		if self.is_empty():
			return None
		else:
			return self.items[len(self.items)-1]
	def push(self,data):
		self.items.append(data)
def isserial(push,pop):
	if push==None or pop==None:
		return False
	pushlen=len(push)
	poplen=len(pop)
	if pushlen!=poplen:
		return False
	pushindex=0
	popindex=0
	s=Stack()
	while pushindex<pushlen:
		s.push(push[pushindex])
		pushindex+=1
		while (not s.is_empty()) and (s.peek()==pop[popindex]):
			s.pop()
			popindex+=1
		
	return s.is_empty() and popindex==poplen#####这里是因为popindex+=1所以是popindex==poplen
if __name__=="__main__":
	push="12345"
	pop="32541"
	isserial(push,pop)
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值