Python 數據結構之隊列的實現

隊列 是一個抽象的數據結構,與堆棧有些相似。較對比於棧,隊列打開兩端。 一端總是用來插入數據(排隊),另一個是用來刪除數據(離隊)。 隊列使用先入先出的方法,即,第一存儲的數據項先被訪問。

  • 隊列有兩端,入口端和出口端,數據只能從入口進入隊列。從出口離開隊列。因此也被稱爲FIFO表示先進先出 後進後出。
  • 隊列可以使用數組,鏈表,指針和結構來實現。

雙端隊列(deque,全名double-ended queue),是一種具有隊列和棧的性質的數據結構。
雙端隊列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。雙端隊列可以在隊列任意一端入隊和出隊。

# 隊列基於Python語言的實現
'''
隊列的基本方法:
enqueue(value) 入隊 添加新的元素到隊列中
dequeue() 出隊 從隊列中移除元素
peek() 得到在隊列最前面的元素 而不移除它
is_full() 檢查隊列是否存滿 沒有長度限制的隊列可不實現該方法
if_empty() 檢查隊列是否爲空
len() 返回都隊列內元素個數
travel() 遍歷隊列
'''

class Queue(object):
    """
    隊列類
    """
    def __init__(self):
        """
        初始化
        """
        self.__queue = []

    def __len__(self):
        """
        返回隊列長度
        """
        return len(self.__queue)

    def enqueue(self, value):
        """
        入隊
        """
        self.__queue.append(value)

    def dequeue(self):
        """
        出隊
        """
        return self.__queue.pop(0)
    
    def peek(self):
        """
        返回隊列頂部元素
        """
        return self.__queue[0]

    def is_empty(self):
        """
        檢測隊列是否爲空
        """
        return self.__queue == []

    def travel(self):
        """
        遍歷隊列
        """
        for val in self.__queue:
            print(val)


if __name__ == '__main__':
    que = Queue()
    print(que.is_empty())
    que.enqueue('a')
    que.enqueue('b')
    que.enqueue('c')
    que.enqueue('d')
    print(que.dequeue())
    print(que.is_empty())
    print(que.peek())
    print(len(que))
    que.travel()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章