利用Python實現 隊列的算法


以下內容都是來自“悟空“大神的講解,聽他的視頻課,利用Python實現堆棧的算法,自己做了一些小總結,可能會存在自己理解的一些誤區,

1.棧的實現

隊列的特征是先進先出,同我們生活中的隊列具有相同的特性:先排隊的先辦事。隊列的應用場景非常多,例如消息通信、多進程間的協同、多線程間的協同等。

在算法前,我們需要先知道3個值  1、節點(節點作用是 進行一個指針(假設的)一個指向  2.就是現在這個位置上的元素的值)  2.還需要知道一個頭,一個尾,就如上面兩個一個head,就對應下面的代碼中的first, tail就對應代碼下面last, 只有知道了這三個內容,才好理解如果寫

 

進入隊列的圖片 ,就是在后面在新加一個元素,然后指向在往后面移動

 

退出隊列的圖片,退出隊列就是head的指向往前移動,而tail的指向不變

#coding=utf-8
class Node(object):#先獲取到節點,節點有兩個作用,1.進行一個指針(假設的)一個指向,
                    # 2,。就是現在這個位置上的元素的值
    def __init__(self,val):
        self.next=None  #指針的下一個,用於指向內容,先給初始化設置為空
        self.val=val   #val是它原本的值,

class Queue(object):
    def __init__(self): #初始化兩個屬性,分別代表first頭和last
        self.first=None
        self.last=None
    def enter(self,n):  #開始進隊列
        #實例節點
        n = Node(n)  # 指定在第5個位置上
        #進隊列時需要先判斷隊列是不是空,如何判斷,通過判斷first是不是空
        if self.first==None:
            self.first=n  #為什么為空了還要把值賦值給first
            self.last=self.first
        else:#進隊列,first不變,last的位置向后移動一個
            self.last.next=n   #指針指向后面一個  #把下移后的指向給lst.netx
            self.last=n   #賦值值給last

    def quit(self): #退出隊列,
        #退出隊列就是
        if self.first==None:
            return None
        else:
            tmp=self.first.val   #獲取項目的值
            self.first=self.first.next
        return tmp
    def allQuit(self):#全部退出
        Lists=[] #用戶保存數據
        while self.first!=None:
            Lists.append(self.first.val)  #把每一次的值存入到一個list中
            self.first=self.first.next
        return Lists

if __name__=="__main__":
    q=Queue()
    q.enter(1)
    q.enter(2)
    q.enter(3)

   # print q.quit()
   # print q.quit()
   # print q.quit()

    print q.allQuit()

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM