要求:
翻转栈的所有元素,如输入{1,2,3,4,5},其中1处在栈顶,翻转之后栈为{5,4,3,2,1},其中,5处在栈顶。
方法一:
申请一个额外队列,先把栈中元素依次出栈放到队列里,然后把队列里的元素按照出队列顺序入栈,这样就可以实现栈的翻转,缺点为需要申请额外的空间存储队列,因此,空间复杂度较高。
方法二:
递归实现
递归定义:将当前栈的最底元素移到栈顶,其他元素顺次下移一位,然后对不包含栈顶元素的子栈进行同样的操作。
终止条件:直到栈为空。
操作1 操作2 操作1 操作2 操作1 操作2 操作1
1 5
2 1 1 4
3 2 2 1 1 3
4 3 3 2 2 1 1 2
5 4 4 3 3 2 2 1 1 1
# -*- coding:utf-8 -*-
class Stack():
#模拟栈
def __init__(self):
self.items = []
#判断栈是否为空
def empty(self):
return len(self.items) == 0
#返回栈的大小
def size(self):
return len(self.items)
#返回栈顶元素
def peek(self):
if not self.empty():