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個
"""

使用順序表實現棧的壓棧操作最好從尾部開始,使用鏈表實現棧的壓棧操作最好從頭部開始,這是由於 時間複雜度 的原因。

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