棧和佇列在python中的實現

2022-04-03 03:42:21 字數 2469 閱讀 9169

棧和佇列是兩種基本的資料結構,同為容器型別。兩者根本的區別在於: 

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...