python 佇列與棧的實現
阿新 • • 發佈:2018-11-04
1、Python資料結構——佇列
佇列是一種列表,不同的是佇列只能在隊尾插入元素,在隊首刪除元素。
佇列是一種先進先出(First-In-First-Out,FIFO)的資料結構。佇列被用在很多地方,比如提交作業系統執行的一系列程序、列印任務池等,一些模擬系統用佇列來模擬銀行或雜貨店裡排隊的顧客。
queue的常用操作:
Queue() 定義一個空佇列,無引數,返回值是空佇列。 enqueue(item) 在佇列尾部加入一個數據項,引數是資料項,無返回值。 dequeue() 刪除佇列頭部的資料項,不需要引數,返回值是被刪除的資料,佇列本身有變化。 isEmpty() 檢測佇列是否為空。無引數,返回布林值。 clear() 清空佇列,無參無返回值 size() 返回佇列資料項的數量。無引數,返回一個整。
具體實現如下:
class Queue(object): #定義一個空佇列 def __init__(self): self.items = [] #佇列(只能在隊尾)新增一個元素 def enqueue(self, item): self.items.append(item) #刪除佇列(只能在對頭)一個元素 def dequeue(self): self.items.pop(0) #判斷佇列是否為空 def isEmpty(self): return(self.items == []) #清空佇列 def clear(self): del(self.items) #該佇列就不存在了,而不是清空元素 #返回佇列項的數量 def size(self): return(len(self.items)) #列印佇列 def print(self): print(self.items) if __name__ == '__main__': q = Queue() print(q.isEmpty()) for i in range(5): q.enqueue(i) print(q.size()) q.print() q.dequeue() q.print() q.clear() print(q)
2、Python資料結構——棧
棧是一種特殊的列表,棧內的元素只能通過列表的一端訪問,這一端稱為棧頂。咖啡廳內的一摞盤子是現實世界中常見的棧的例子。只能從最上面取盤子,盤子洗淨後,也只能摞在這一摞盤子的最上面。
棧被稱為一種後入先出(LIFO,last-in-first-out)的資料結構。由於棧具有後入先出的特點,所以任何不在棧頂的元素都無法訪問。為了得到棧底的元素,必須先拿掉上面的元素。
stack的常用操作:
Stack() 建立一個空的棧物件。 push(item) 把一個元素新增到棧的最頂層。 pop() 刪除棧最頂層的元素,並返回這個元素。 peek() 返回最頂層的元素,並不刪除它。 clear() 清空棧。 isEmpty() 判斷棧是否為空。 size() 返回棧中元素的個數。
具體實現如下:
class Stack(object):
#定義一個空棧
def __init__(self):
self.items = []
#新增一個元素
def push(self, item):
self.items.append(item)
#刪除一個元素
def pop(self):
return(self.items.pop())
#返回棧頂
def peek(self):
return(self.items[-1])
#清空棧
def clear(self):
del(self.items)
#判斷是否為空
def isEmpty(self):
return(self.items == [])
#返回棧中元素個數
def size(self):
return(len(self.items))
#列印棧
def print(self):
print(self.items)
if __name__ == '__main__':
s = Stack()
print(s.isEmpty())
for i in range(5):
s.push(i)
s.print()
s.pop()
s.print()
print(s.size())
print(s.peek())
s.clear()