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