'''
1. 队列特点:先进先出,队尾入队操作,队头出队操作
2. 使用单链表实现:尾部添加节点(入队),头部删除节点(出队)操作
'''
class Node:
'''节点类'''
def __init__(self,value):
self.value = value
self.next = None
class Queue:
def __init__(self,node=None):
'''空队列,记录队头位置'''
self.head = node
def is_empty(self):
'''判断队列是否为空'''
if self.head is None:
return True
return False
def enqueue(self,val):
'''入队列:在链表的尾部添加一个节点'''
node = Node(val)
#当是空链表时
if self.is_empty():
self.head = node
#不是空链表
else:
current = self.head
#循环完,current一定移动到尾巴节点
while current.next:
current = current.next
current.next = node #尾巴节点的next指向新节点
node.next = Node #新节点指向空
def dequeue(self):
'''出队列:相当于删除头结点,指针head指向head.next就行了'''
if self.is_empty():
raise Exception('queue is empty')
result = self.head.value
self.head = self.head.next #这里head能是有node节点的next,value属性,是因为她先调用了enqueue()
return result
def top(self):
'''查看队头元素:查看self.head的值'''
if self.is_empty():
raisr Exception('queue is empty')
return self.head.value
def travel(self):
'''遍历整个队列:从队头 -> 队尾 输出'''
if self.is_empty():
return
else:
current = self.head
while current is not None:
print(current.value,end=" ")
current = curent.next
print() #换行
if __name__ == '__main__':
q = Queue()
#入队
q.enqueue(100)
q.enqueue(200)
q.enqueue(300)
#出队
print(q.dequeue()) #出头部的100
print(q.is_empty()) #是否为空
#队头元素:200
print(q.top())
#遍历:200,300
q.travel()
python 链式存储结构实现队列
最新推荐文章于 2024-08-21 23:51:20 发布