数据结构链表之队列,Python3实现——7

数据结构链表之队列

队列概述

  • 定义:队列是一种基于先进先出(FIFO)的数据结构,队列只能在一段进行插入和删除操作的结构,第一个进入队列的元素在读取时会第一个被读取

在这里插入图片描述

队列可以使用顺序表(Python中列表)实现,也可以用链表实现,这里介绍链表实现的方法

主要实现以下几个功能:

  1. is_empty()判断是否队列为空
  2. size()查看队列长度
  3. enqueue()向队列插入元素
  4. dequeue()从队列的头部取出一个元素
  5. 重写__iter__()和__next__()实现遍历功能

Python代码实现

class Node:
    def __init__(self, item):
   		"""Define linked list node"""
        self.item = item
        self.next = None


class Queue:
    def __init__(self):
        self.head = None
        self.last = None
        self.len = 0

    def is_empty(self):
        return self.len == 0

    def size(self):
        return self.len

    def enqueue(self, item):
        """Enqueue an element into this queue"""
        node = Node(item)
        if not self.last:
            self.head = node
        else:
            self.last.next = node
        self.last = node
        self.len += 1

    def dequeue(self):
        """Dequeue an element from this queue"""
        if self.head != self.last:
            # Has at least two elements
            res = self.head
            self.head = self.head.next
            self.len -= 1
            return res
        # Has one or zero element
        res = self.head
        self.head = None
        self.last = None
        self.len -= 1
        return res

    def __iter__(self):
        self.cur = self.head
        return self

    def __next__(self):
        try:
            temp = self.cur
            self.cur = self.cur.next
            return temp
        except AttributeError as e:
            raise StopIteration

功能验证

if __name__ == '__main__':
    queue = Queue()

    print(f"Is empty? {queue.is_empty()}")

    queue.enqueue(1)
    queue.enqueue(2)
    queue.enqueue(3)
    queue.enqueue(4)

    print(f"Show all elements in this queue: {[i.item for i in queue]}")

    print(f"Length of this queue: {queue.len}")

    print(f"Dequeue an element, its value: {queue.dequeue().item}")

    print(f"After dequeuing an element, length of this queue: {queue.len}")

打印结果:

Is empty? True
Show all elements in this queue: [1, 2, 3, 4]
Length of this queue: 4
Dequeue an element, its value: 1
After dequeuing an element, the length of this queue: 3
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值