题目描述:
输入两个整数序列,其中一个序列表示栈的push(入)顺序,判断另一个序列有没有可能是对应的pop(出)顺序。
class Stack:
# 实现栈的功能
def __init__(self):
self.items = []
# 判断栈是否为空
def empty(self):
return self.items == None
# 返回栈的大小
def size(self):
return len(self.items)
# 返回栈顶元素
def peek(self):
if not self.empty():
return self.items[len(self.items)-1]
else:
return None
# 弹栈
def pop(self):
if len(self.items) > 0:
return self.items.pop()
else:
print("空栈")
return None
# 压栈
def push(self, items):
self.items.append(items)
def isPopSerial(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
stack = Stack()
while pushIndex < pushLen:
# 把push的序列依次入栈,直到栈顶元素等于pop序列的第一个元素
stack.push(push[pushIndex])
pushIndex += 1
# 栈顶元素出栈,pop序列移动到下一个元素
while not stack.empty() and stack.peek() == pop[popIndex]:
stack.pop()
popIndex += 1
# 栈为空,且pop序列中元素都被遍历过
return stack.empty() and popIndex == popLen