队列功能

基本功能介绍

队列有两种实现形式,分为两种:数组链表

在接下来的内容里,我们将以链表的形式实现队列,逐步介绍具体功能是如何实现的。

1. 创建 Node 类

创建一个 Node 的类,作为基础数据结构:链点,并初始化对应的内参。

具体实现代码如下

class Node(object):
    def __init__(self,elem,next=None):
        self.elem = elem #表示对应的元素值
        self.next=next #表示下一个链接的链点

2. 创建 Queue 类

创建一个 Queue 的类,以链表形式的队列,并初始化对应的内参。

具体实现代码如下:

class Queue(object):
    def __init__(self):
        self.head = None #头部链点为 None
        self.rear = None #尾部链点为 None

3. 添加 is_empty 函数

添加一个 is_empty 的函数,功能是判断队列是否为空

具体实现代码如下:

    def is_empty(self):
        return self.head is None #判断队列是否为空

4. 添加 enqueue 函数

添加一个 enqueue(elem) 函数,功能是往队列中添加一个 elem 元素

流程如下:

  1. Vertex vtx = new Vertex(v) 初始化一个新的点
  2. tail.next = vtx 队列尾部的后继是这个新的点
  3. tail = vtx 然后让队列尾部指针指向这个新的点

效果演示:往已知队列[29,9,53]里面添加一个 80 元素

enqueue

具体实现代码如下:

    def enqueue(self, elem):
        p = Node(elem) #初始化一个新的点
        if self.is_empty():
            self.head = p #队列头部为新的链点
            self.rear = p #队列尾部为新的链点
        else:
            self.rear.next = p #队列尾部的后继是这个新的点
            self.rear =p #然后让队列尾部指针指向这个新的点

5. 添加 dequeue 函数

添加一个 dequeue() 函数,功能是从队列头部删除一个元素

流程如下:

  1. 先判断队列是否为空,为空即退出 dequeue 操作,不为空即继续后续操作
  2. temp = head 设置一个 temp 指针,使它的指针指向队列头部
  3. head = head.next 队列头部指针,使之指向队列头部的后继(即队列头部元素出队)
  4. delete temp 删除 temp 指针

效果演示:对已知队列[29,9,53,80] 删除头部元素

dequeue

具体实现代码如下:

    def dequeue(self):
        if self.is_empty(): #判断队列是否为空
            print('Queue_is_empty') #若队列为空,则退出 dequeue 操作
        else:
            result = self.head.elem #result为队列头部元素
            self.head = self.head.next #改变队列头部指针位置
            return result #返回队列头部元素

6. 添加 peek 函数

添加一个 peek() 函数,功能是查看队列头部的元素

流程如下:

  1. 判断队列是否为空,为空即返回 NOT_FOUND
  2. 队列如果不为空,返回队列头部元素

具体代码实现如下:

    def peek(self):
        if self.is_empty(): #判断队列是否为空
            print('NOT_FOUND') #为空则返回 NOT_FOUND
        else:
            return self.head.elem #返回队列头部元素

7. 添加 print_queue 函数

添加一个 print_queue() 函数,功能是展现队列的元素

    def print_queue(self):
        print("queue:")
        temp=self.head
        myqueue=[] #暂时存放队列数据
        while temp is not None:
            myqueue.append(temp.elem)
            temp=temp.next
        print(myqueue)

最终代码如下:

class Node(object):
    def __init__(self,elem,next=None):
        self.elem = elem #表示对应的元素值
        self.next=next #表示下一个链接的链点
class Queue(object):
    def __init__(self):
        self.head = None #头部链点为 None
        self.rear = None #尾部链点为 None
    def is_empty(self):
        return self.head is None #判断队列是否为空
    def enqueue(self, elem):
        p = Node(elem) #初始化一个新的点
        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(): #判断队列是否为空
            print('Queue_is_empty') #若队列为空,则退出 dequeue 操作
        else:
            result = self.head.elem #result为队列头部元素
            self.head = self.head.next #改变队列头部指针位置
            return result #返回队列头部元素
    def peek(self):
        if self.is_empty(): #判断队列是否为空
            print('NOT_FOUND') #为空则返回 NOT_FOUND
        else:
            return self.head.elem #返回队列头部元素
    def print_queue(self):
        print("queue:")
        temp=self.head
        myqueue=[] #暂时存放队列数据
        while temp is not None:
            myqueue.append(temp.elem)
            temp=temp.next
        print(myqueue)

复杂度分析

队列属于常见的一种线性结构,对于出队和进队而言,时间复杂度都为 O(1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值