Python实现栈 ------ Python数据结构与算法第5章

1. 栈的概念

       栈,有些地方称为堆栈,是一种容器,可 存入数据元素、访问元素和删除元素,它的特点在于 只能允许在容器的一端进行加入数据和输出数据的运算没有了位置概念,保证 任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。
在这里插入图片描述

2. 栈的实现

       栈可以 用顺序表实现,也可以用链表实现。栈的操作有创建一个新的空栈、添加一个新的元素到栈顶、弹出栈顶元素、返回栈顶元素、判断栈是否为空和返回栈的元素个数。我们选择使用顺序表来实现一个栈,Python中的列表实质按照顺序表来存储的,这里就借助列表来实现:

class Stack():
    def __init__(self):
        self.__items = []  # 不希望操作栈的人直接操作内部容器:可以绕过push和pop,直接对头尾操作

    def push(self, item):
        """
        压栈:添加一个新元素item到栈顶
        :param item: 压入栈顶的元素
        :return:
        """
        # self.__items.insert(0,item)
        self.__items.append(item)

    def pop(self):
        """
        出栈:弹出栈顶元素
        :return:弹出的元素
        """
        # self.__items.pop(0)
        return self.__items.pop()

    def peek(self):
        """
        返回栈顶元素
        :return:
        """
        return self.__items[-1] if self.__items else None

    def is_empty(self):
        """
        判断栈是否为空
        :return: True or False
        """
        # return self.__items == []
        return not self.__items

    def size(self):
        """
        返回栈的大小
        :return:
        """
        return len(self.__items)


if __name__ == '__main__':
    s = Stack()
    print('压栈...')
    s.push(1)
    s.push(2)
    s.push(3)
    s.push(4)
    print('当前栈的元素数:', s.size())
    print('出栈...')
    print(s.pop())
    print(s.pop())
    print(s.pop())
    print(s.pop())
    print("当前栈为%s栈!" % '空' if s.is_empty() else '非空')
    print('当前栈的元素数:{0}个'.format(s.size()))
"""
压栈...
当前栈的元素数: 4
出栈...
4
3
2
1
当前栈为空栈!
当前栈的元素数:0个
"""

使用顺序表实现栈的压栈操作最好从尾部开始,使用链表实现栈的压栈操作最好从头部开始,这是由于 时间复杂度 的原因。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章