美文网首页
栈--递归逆序栈

栈--递归逆序栈

作者: 凉初透的风 | 来源:发表于2018-10-10 16:10 被阅读0次

    反转栈的数据,我们很容易想到可以使用两个栈来实现,一个栈将数据全部压入后,再依次出栈并且依次入栈到另一个栈中,得到的就是一个反转了的栈。

    但是,如果我们只是用一个栈如何取实现呢?

    我们可以使用递归的方法来实现,递归会多次调用自身方法,还会将每次的返回值存在内存中,我们只要控制存储结果的顺序就可以实现。

    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()
    
    
    

    相关文章

      网友评论

          本文标题:栈--递归逆序栈

          本文链接:https://www.haomeiwen.com/subject/azopaftx.html