反转栈的数据,我们很容易想到可以使用两个栈来实现,一个栈将数据全部压入后,再依次出栈并且依次入栈到另一个栈中,得到的就是一个反转了的栈。
但是,如果我们只是用一个栈如何取实现呢?
我们可以使用递归的方法来实现,递归会多次调用自身方法,还会将每次的返回值存在内存中,我们只要控制存储结果的顺序就可以实现。
class Stack(object):
# 使用list来作为栈
stack = list()
def push(self, data):
# 使用list的append方法来替代栈的push方法
self.stack.append(data)
def pop(self):
# 使用list的pop方法来替代栈的pop方法
return self.stack.pop()
def is_empty(self):
# 判断栈是否为空
return True if len(self.stack) == 0 else False
def show(self):
# 打印栈的数据
print(self.stack)
def get_and_remove_last_element(self):
"""
:return: 删除栈底元素并且返回栈底元素
"""
# 栈顶元素出栈
result = self.pop()
if self.is_empty():
return result
else:
# 得到栈底元素
last = self.get_and_remove_last_element()
# 将此次出栈的元素重新入栈(非栈底元素)
self.push(result)
# 每次返回栈底元素
return last
def reverse(self):
"""
:return:
"""
if self.is_empty():
return
else:
# 获取栈底元素
i = self.get_and_remove_last_element()
# 递归,依次将内存中的值入栈,此时顺序已经反转
self.reverse()
self.push(i)
if __name__ == '__main__':
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
stack.show()
stack.reverse()
stack.show()
网友评论