问题描述:
栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。
思路分析:
1.涉及到排序 并且只允许四种操作 那么引入临时属性self.tmp>>>List
2:push指将元素压入栈顶 pop是删除栈顶的元素并返回它 peek是返回栈顶的元素
isEmpty判断栈是否为空
3:比较排序就要利用好pop能返回值这一用途
实现代码:
class SortedStack: def __init__(self): self.stack=[] self.tmp=[]#临时空间 def push(self, val: int) -> None: if not self.stack:#如果空栈 直接压栈 self.stack.append(val) else: while self.stack and val>self.stack[-1] :#如果val大于栈顶且stack非空 and前后顺序不可调换 否则报错 "out of index range" self.tmp.append(self.stack.pop())#从stack出栈 从tmp进栈 self.stack.append(val)#插入要插入的值 while self.tmp:#原来出栈的元素回栈 self.stack.append(self.tmp.pop()) def pop(self) -> None: if self.stack: end=self.stack[-1]#暂时储存 del self.stack[-1] return end else: return#后面什么都不加 返回null def peek(self) -> int: return -1 if len(self.stack)==0 else self.stack[-1]#返回栈顶 def isEmpty(self) -> bool: return not self.stack #如果stack为空 not False 等价于True 如果非空 not True 等价于False # Your SortedStack object will be instantiated and called as such: # obj = SortedStack() # obj.push(val) # obj.pop() # param_3 = obj.peek() # param_4 = obj.isEmpty()