栈--递归逆序栈

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


上一篇下一篇

猜你喜欢

热点阅读