Python-队列的实现

队列 (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
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章