队列 (queue) 是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
有差不多7个步骤
1、创建Node类
创建一个 Node 的类,作为基础数据结构:链点,并初始化对应的内参。
2、创建Queue类
创建一个 Queue 的类,以链表形式的队列,并初始化对应的内参。
3、添加is_empty函数
添加一个 is_empty 的函数,功能是判断队列是否为空
4、添加enqueue函数
添加一个 enqueue(elem) 函数,功能是往队列中添加一个 elem 元素
Vertex vtx = new Vertex(v) 初始化一个新的点
tail.next = vtx 队列尾部的后继是这个新的点
tail = vtx 然后让队列尾部指针指向这个新的点
5、添加dequeue函数
添加一个 dequeue() 函数,功能是从队列头部删除一个元素
6、添加peek函数
添加一个 peek() 函数,功能是查看队列头部的元素
流程如下:
判断队列是否为空,为空即返回 NOT_FOUND
队列如果不为空,返回队列头部元素
7、添加print_queue函数
添加一个 print_queue() 函数,功能是展现队列的元素
详细注解在注释里面
class Node(object): #首先建立一个Node类来表示节点这个结构
def __init__(self,value,next=None): #节点有两个属性
self.value = value #值
self.next = next #索引
class Queue(object): #创建一个队列的结构类
def __init__(self): #队列有两个基础属性
self.head = None #头
self.rear = None #尾
def is_empty(self): #队列是不是空的
return self.head is None;
def enqueue(self,value): #加入元素
p = Node(value) #加入的元素是一个节点
if self.is_empty(): #如果是空的话,那么这一个即是头也是尾
self.head = p
self.rear = p
else: #如果不是的话,那么尾节点的下一个节点就是这个节点
self.rear.next = p
self.rear = p #并且要将尾节点更新成新添加的那个节点
def dequeue(self): #出列,只出头一个
if self.is_empty():
return "The queue is Empty!"
else:
result = self.head.value #出列
self.head = self.head.next #更新头节点的索引
return result
def peek(self): #查看第一个节点是哪个
if self.is_empty():
return "The Queue is Empty"
else:
result = self.head.value
return result #返回head
def print_queue(self): #将节点打印出来
print("queue: ")
temp = self.head #从头开始
myqueue = [] #创建一个列表来存储队列元素
while temp is not None: #当还没有读取完的时候
myqueue.append(temp.value) #添加
temp = temp.next #下一个 更新 这是个重点语句
print(myqueue) #打印出来
oneQueue = Queue()
for i in range(0,991):
oneQueue.enqueue(i)
oneQueue.dequeue()
oneQueue.print_queue()
运行效果
我将头出列了
所以第一个是1