如何翻转栈的所有元素

class MyStack():
    #模拟栈
    def __init__(self):
        self.items = []
    #判断栈是否为空
    def isEmpty(self):
        return len(self.items)==0
    #返回栈的大小
    def size(self):
        return len(self.items)
    #返回栈顶元素
    def top(self):
        if not self.isEmpty():
            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,item):
        self.items.append(item)

#第一步:栈底元素移动到栈顶
#第二步:递归调用除栈顶元素之外的子栈
'''方法功能:栈底元素移动到栈顶
'''
def moveBottomToTop(s):
    if s.isEmpty():
        return
    #记录栈顶元素
    top1 = s.top()
    s.pop()
    #生成子栈
    if not s.isEmpty():
        #递归处理不包含栈顶的子栈
        moveBottomToTop(s)
        #记录子栈的栈顶元素
        top2 = s.top()
        s.pop()
        #交换栈顶元素与子栈栈顶元素
        s.push(top1)
        s.push(top2)
    else:
        s.push(top1)

def reverse_s(s):
    if s.isEmpty():
        return
    #把栈底元素移动到栈顶
    moveBottomToTop(s)
    top = s.top()
    s.pop()
    #递归处理子栈
    reverse_s(s)
    s.push(top)

if __name__ =="__main__":
    s = MyStack()
    array = input().split()
    for i in array:
        s.push(i)
    reverse_s(s)
    print ("翻转后出栈顺序为:")
    while not s.isEmpty():
        print( s.top())
        s.pop()

猜你喜欢

转载自blog.csdn.net/liuli1926634636/article/details/89458037