棧和佇列是兩種基本的資料結構,同為容器型別。兩者根本的區別在於:
stack:後進先出
queue:先進先出
ps:stack和queue是不能通過查詢具體某乙個位置的元素而進行操作的。但是他們的排列是按順序的
對於stack我們可以使用python內建的list實現,因為list是屬於線性陣列,在末尾插入和刪除乙個元素所使用的時間都是o(1),這非常符合stack的要求。當然,我們也可以使用鍊錶來實現。
stack的實現**(使用python內建的list),實現起來是非常的簡單,就是list的一些常用操作
class stack(object):我們定義如下的鍊錶來實現佇列資料結構:def __init__(self):
self.stack =
def push(self, value): # 進棧
def pop(self): #出棧
if self.stack:
self.stack.pop()
else:
raise lookuperror('stack is empty!')
def is_empty(self): # 如果棧為空
return bool(self.stack)
def top(self):
#取出目前stack中最新的元素
return self.stack[-1]
定義乙個頭結點,左邊指向佇列的開頭,右邊指向佇列的末尾,這樣就可以保證我們插入乙個元素和取出乙個元素都是o(1)的操作,使用這種鍊錶實現stack也是非常的方便。實現**如下:
class head(object):def __init__(self):
self.left = none
self.right = none
class node(object):
def __init__(self, value):
self.value = value
self.next = none
class queue(object):
def __init__(self):
#初始化節點
self.head = head()
def enqueue(self, value):
#插入乙個元素
newnode = node(value)
p = self.head
if p.right:
#如果head節點的右邊不為none
#說明佇列中已經有元素了
#就執行下列的操作
temp = p.right
p.right = newnode
temp.next = newnode
else:
#這說明隊列為空,插入第乙個元素
p.right = newnode
p.left = newnode
def dequeue(self):
#取出乙個元素
p = self.head
if p.left and (p.left == p.right):
#說明佇列中已經有元素
#但是這是最後乙個元素
temp = p.left
p.left = p.right = none
return temp.value
elif p.left and (p.left != p.right):
#說明佇列中有元素,而且不止乙個
temp = p.left
p.left = temp.next
return temp.value
else:
#說明隊列為空
#丟擲查詢錯誤
raise lookuperror('queue is empty!')
def is_empty(self):
if self.head.left:
return false
else:
return true
def top(self):
#查詢目前佇列中最早入隊的元素
if self.head.left:
return self.head.left.value
else:
raise lookuperror('queue is empty!')
Python實現棧和佇列的功能
棧 先進後出 實現的功能 入棧 出棧 取棧頂元素 判斷棧是否為空 顯示棧的元素。class stack def init self self.stack defpush self,value param value return return true defpop self 獲取出棧元素並返回 i...
Python 棧 佇列的實現
在python中,列表既可以作為棧使用,又可以作為佇列使用。棧 後進先出 stack 1,2,3 入棧,以列表尾部為棧頂 print stack.pop 出棧 4 print stack 1,2,3 佇列 先進先出 from collections import deque list 1,2,3 q...
棧 佇列的Python實現
棧和佇列是特殊的線性表,只不過我們認為的規定它的操作方法。我們把先入後出的資料結構稱為棧,先進先出的資料結構成為佇列。python實現棧的一些基本操作的 class stack object 棧 def init self self.items defis empty self 判斷是否為空 ret...