隊列與棧的鏈表實現,做個備份,和列表實現換湯不換藥,大家自己看吧
隊列:
"""
link queue
"""
from SQueue import QueueError
class Node():
def __init__(self,val,next = None):
self.val = val
self.next =next
class LQueue():
def __init__(self):
self.rear = Node(None)
self.front = self.rear
def is_empty(self):
return self.front == self.rear
def enqueue(self,elem):
self.rear.next = Node(elem)
self.rear = self.rear.next
def dequeue(self):
if self.front == self.rear:
raise QueueError("Queue is None")
self.front = self.front.next
return self.front.val
if __name__ == "__main__":
lq = LQueue()
print(lq.is_empty())
lq.enqueue(10)
lq.enqueue(20)
lq.enqueue(30)
while not lq.is_empty():
print(lq.dequeue())
棧:
class Stack(object):
def __init__(self):
self.top = Node(None) #這裏需要直接讓棧頂成爲空節點
def push(self, val): #而不是None,原因見下
node = Node(val)
node.next = self.top
self.top = node
def pop(self):
pops = self.top
self.top = self.top.next
return pops.val
def showstack(self):
p = self.top
while p.next is not None: #如果棧頂不是節點而是空的話,
print(p.val) #在棧底的上個節點next爲空
p = p.next #使得無法全部打印出棧中的元素!
sstack = Stack()
sstack.push(1)
sstack.push(2)
sstack.push(3)
sstack.push(4)
sstack.push(5)
sstack.pop()
sstack.showstack()
測試:符合後進先出,實現壓棧彈棧工作。
4
3
2
1
Process finished with exit code 0