【数据结构实践】简单实现Python自定义队列

举报
迷彩 发表于 2023/05/14 01:52:56 2023/05/14
【摘要】 前言何为队列?队列:跟数组一样,队列中的数据也是呈线性排列的,它是一种先进先出(FIFO: First in First Out)的线性结构,队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表.即在队列的尾部入队,在队列的头部出队。在队列中添加和删除数据的操作分别是在两端进行的。顾名思义,他就和我们现实生活中的‘队列’是一样的,你可以把它想象操场上排成一列的队伍,在队列中,操作总...

前言

何为队列?

队列:跟数组一样,队列中的数据也是呈线性排列的,它是一种先进先出(FIFO: First in First Out)的线性结构,队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表.即在队列的尾部入队,在队列的头部出队。

在队列中添加和删除数据的操作分别是在两端进行的。顾名思义,他就和我们现实生活中的‘队列’是一样的,你可以把它想象操场上排成一列的队伍,在队列中,操作总是从第一名开始往后进行,而新来的人只能排在队尾。先来的数据先处理是一种很常见的思路,所以队列的应用范围非常广泛。就比如:疫情区间,你去做核酸,你先去的话你排在前面,你后面去的只能排在别人后面,做完核酸的人往前面走,相当于出队,要做核酸的人,跟着排在队尾,这就相当于入队了。这也是队列的基本操作

队列的基本操作

入队:即队列添加成员,在队列的尾部完成

出队:即队列删除成员,在队列的头部完成

在创建队列时,一般以数组为数据结构


队列图解

1.队列的入队操作

往队列中添加元素时,数据总是被加到最上面(队尾),图中演示将[杜甫]这个数据加入队列

2.队列的出队操作

从队列中取出数据,总是从最下面开始,而且队列数据的取出就相当于把出队的数据删除,还是以做核酸为例,你做完核酸之后,就不需要再排队了,这时候就可离开队伍,下图演示将[张三]这个数据进行出队操作


自定义队列的实现

队列的设计

队列可以实现设置队列大小,入队,出队,显示队列元素,判断队列等功能.

实现流程如下:

  1. 创建自定义队列类NQueue

  2. 添加队列属性

  3. 创建入队,出队,显示队列元素,判断队列等方法

  4. 验证队列类NQueue


具体实现

1.创建NQueue类,并添加属性

class NQueue:
    def __init__(self,size=10):
        self._content=[]
        self._size=size
        self._current=0


2.设置队列的大小

    def setSize(self,size):
        if size<self._current:     #如果缩小队列,应删除后面的元素
            for i in range(size,self._current)[::-1]:
                del self._content[i]
            self._current=size
        self._size=size

3.对列的出队,入队

    def put(self,v):         #入队
        if self._current<self._size:
            self._content.append(v)
            self._current=self._current+1
        else:
            print('The queue is full')

    def get(self):           #出队
        if self._content:
            self._current=self._current-1
            return self._content.pop(0)
        else:
            print('队列为空')

4.显示队列中所有元素

    def show(self):          #显示所有元素
        if self._content:
            print(self._content)
        else:
            print('队列为空')

5.判断队列是否为空,以及判断队列是否已满

    def empty(self):
        self._content=[]

    def isEmpty(self):        #判断是否已满
        if not self._content:
            return True
        else:
            return False

    def isFull(self):         #判断是否为空
        if self._current==self._size:
            return True
        else:
            return False

6.验证NQueue类

类的实例化

q=NQueue()

验证队列类的功能

print('将队列元素出队:')
q.get()
q.put(12)
q.put(23)
print('将元素入队:')
q.show()
print('判断队列是否已满:',str(q.isFull()))
q.setSize(3)
print('判断队列重设后是否已满:',str(q.isFull()))
print('向队列添加新元素:')
q.put(53)
q.put(33)
q.show()

本文就唠到这里,动手实现起来吧.要做时不我待的行动者,只争朝夕的实干家.惟有苦干实干,远大的目标才能早日达成

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。