Python實現棧 佇列

2022-05-06 17:48:13 字數 3904 閱讀 9772

目錄2. 佇列的python實現

本文將使用python實現資料結構中的棧、佇列;有關棧、佇列的理論原理請參考:《資料結構與演算法》-3-棧和佇列;

"""

以列表的形式簡單實現棧

棧:先進後出

"""class stack:

def __init__(self):

self.stack = # 初始化

def is_empty(self):

return not bool(self.stack) # 判空

def push(self, value):

return true

def pop(self):

if self.stack:

return self.stack.pop() # 出棧

else:

raise lookuperror('stack is empty!')

def peek(self):

if self.stack:

return self.stack[-1] # 獲取棧頂元素

else:

raise lookuperror('stack is empty')

def length(self):

return len(self.stack) # 獲取棧內元素個數

"""

以單鏈表形式實現棧

棧:先進後出

"""class node:

def __init__(self, val=none, nxt=none):

self.value = val # 資訊域

self.next = nxt # 指標域

class stack:

# 初始化乙個空棧

def __init__(self):

self._top = none # 棧頂元素

def is_empty(self):

return self._top is none

def push(self, item):

if not self._top:

self._top = node(item) # 空棧:直接將新結點設定為棧頂元素

return true

node = self._top # 獲取棧頂元素

self._top = node(item) # 將新結點設定為棧頂元素

self._top.next = node # 將棧頂元素的指標指向原棧頂元素

return true

def pop(self):

if self.is_empty():

raise lookuperror('stack is empty!')

node = self._top # 獲取棧頂元素

self._top = self._top.next # 將原棧頂元素的下乙個元素設定為棧頂元素

return node.value # 返回原棧頂元素的資訊域

def peek(self):

if self.is_empty():

raise lookuperror('stack is empty!')

node = self._top # 獲取棧頂元素

return node.value # 返回棧頂元素的資訊域

def length(self):

if self.is_empty():

return 0

node = self._top # 獲取棧頂元素

count = 1 # 計數

while node.next: # 棧頂元素的下乙個元素,直到初始none

node = node.next

count += 1

return count

def stack_to_list(self):

if self.is_empty():

return

node = self._top # 獲取棧頂元素

li = [node.value]

while node.next:

node = node.next

return li[::-1] # 按照進棧的順序,先後在列表中排列

"""

以列表的形式簡單實現佇列

佇列:先進先出

"""class queue:

def __init__(self):

self.li =

def is_empty(self):

return not bool(self.li)

def enqueue(self, items):

return true

def dequeue(self):

if self.is_empty():

raise lookuperror('queue is empty!')

return self.li.pop(0)

def length(self):

return len(self.li)

def show(self):

if self.is_empty():

raise lookuperror('queue is empty!')

return self.li

"""

以鍊錶的形式實現佇列

"""class node:

def __init__(self, val=none, nxt=none):

self.value = val # 資料域

self.next = nxt # 指標域

class queue:

def __init__(self):

self.first = none # 頭指標,指向隊頭結點

self.last = none # 尾指標,指向隊尾結點

self.size = 0 # 表示佇列內的結點數

def is_empty(self):

return self.first is none # 判空

def enqueue(self, items):

node = node(items) # 建立新結點

self.size += 1 # 結點個數加1

if self.is_empty():

self.first = self.last = node # 加入第乙個結點

return true

self.last.next = node # 隊尾結點的指標域指向新結點

self.last = node # 尾指標指向隊尾結點

return true

def dequeue(self):

if self.is_empty():

raise lookuperror('queue is empty!')

node = self.first # 需要返回的隊頭結點

self.first = node.next # 隊頭指標指向新隊頭結點

self.size -= 1

return node.value

def length(self):

return self.size

def queue_to_list(self):

if self.is_empty(): # 判空

return

first_ = self.first

node = self.first

li = [node.value]

while node.next:

node = node.next

return li # 按照的進佇列的順序,在列表中排列

佇列實現棧棧實現佇列

佇列是一種先進先出的資料結構,要想實現先進後出,需加乙個輔助佇列進行資料的來回倒 引用交換 從而實現棧結構。例如 5 4 3 2 1 用乙個輔助佇列裝 4 3 2 1,把5彈出,在把 4 3 2 1放回原佇列,如此反覆可變成5 4 3 2 1的棧結構。棧是一種先進後出的資料結構,要想實現先進先出,同...

佇列實現棧,棧實現佇列

兩個佇列實現棧 每次進入乙個佇列,取出得時候,把所有元素進入另乙個佇列,只留下乙個元素,以此實現棧的先進後出 filo package algorithmbymyself import j a.util.linkedlist import j a.util.queue 用兩個佇列實現乙個棧 publ...

棧與佇列 python實現

棧 class stack object def init self self.items def enstack self,item def destack self self.items.pop 1 def isempty self return self.items def clear sel...