前言
何为队列?
队列:跟数组一样,队列中的数据也是呈线性排列的,它是一种先进先出(FIFO: First in First Out)的线性结构,队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表.即在队列的尾部入队,在队列的头部出队。
在队列中添加和删除数据的操作分别是在两端进行的。顾名思义,他就和我们现实生活中的‘队列’是一样的,你可以把它想象操场上排成一列的队伍,在队列中,操作总是从第一名开始往后进行,而新来的人只能排在队尾。先来的数据先处理是一种很常见的思路,所以队列的应用范围非常广泛。就比如:疫情区间,你去做核酸,你先去的话你排在前面,你后面去的只能排在别人后面,做完核酸的人往前面走,相当于出队,要做核酸的人,跟着排在队尾,这就相当于入队了。这也是队列的基本操作
队列的基本操作
入队:即队列添加成员,在队列的尾部完成
出队:即队列删除成员,在队列的头部完成
在创建队列时,一般以数组为数据结构
队列图解
1.队列的入队操作
往队列中添加元素时,数据总是被加到最上面(队尾),图中演示将[杜甫]这个数据加入队列
网络异常,图片无法展示
|
2.队列的出队操作
从队列中取出数据,总是从最下面开始,而且队列数据的取出就相当于把出队的数据删除,还是以做核酸为例,你做完核酸之后,就不需要再排队了,这时候就可离开队伍,下图演示将[张三]这个数据进行出队操作
网络异常,图片无法展示
|
自定义队列的实现
队列的设计
队列可以实现设置队列大小,入队,出队,显示队列元素,判断队列等功能.
实现流程如下:
- 创建自定义队列类NQueue
- 添加队列属性
- 创建入队,出队,显示队列元素,判断队列等方法
- 验证队列类NQueue
网络异常,图片无法展示
|
具体实现
1.创建NQueue类,并添加属性
classNQueue: def__init__(self,size=10): self._content=[] self._size=sizeself._current=0
2.设置队列的大小
defsetSize(self,size): ifsize<self._current: #如果缩小队列,应删除后面的元素foriinrange(size,self._current)[::-1]: delself._content[i] self._current=sizeself._size=size
3.对列的出队,入队
defput(self,v): #入队ifself._current<self._size: self._content.append(v) self._current=self._current+1else: print('The queue is full') defget(self): #出队ifself._content: self._current=self._current-1returnself._content.pop(0) else: print('队列为空')
4.显示队列中所有元素
defshow(self): #显示所有元素ifself._content: print(self._content) else: print('队列为空')
5.判断队列是否为空,以及判断队列是否已满
defempty(self): self._content=[] defisEmpty(self): #判断是否已满ifnotself._content: returnTrueelse: returnFalsedefisFull(self): #判断是否为空ifself._current==self._size: returnTrueelse: returnFalse
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()
本文就唠到这里,动手实现起来吧.要做时不我待的行动者,只争朝夕的实干家.惟有苦干实干,远大的目标才能早日达成