队列与栈的链表实现,做个备份,和列表实现换汤不换药,大家自己看吧
队列:
"""
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