以下內容都是來自“悟空“大神的講解,聽他的視頻課,利用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()