数据结构之队列

简介

队列是一个数据集合,只允许在一端进行插入,另一端进行删除。
进行插入的一端称为队尾(rear),插入动作称为进队。
进行删除的一端称为队头(front),删除动作称为出队。
队列的性质:先进先出(First in, First out)。

队列的实现方式——环形队列

在这里插入图片描述
环形队列:当队尾指针front == Maxsize + 1时,再前进一个位置就自动到0.
队首指针前进1:front = (front + 1) % Maxsize
队尾指针前进1:rear = (reat + 1) % Maxsize
队空条件: rear = front
队满条件:(rear + 1) % Maxsize = front

class Queue:
	def __init__(self, size=100):
		self.queue = [o for _ in range(size)]
		self.rear = 0 # 队尾
		self.front = 0 # 队首
	
	def push(self, val):
		if not self.full():
			self.rear = (self.rear + 1) % self.size
			self.queue[self.rear] = val
		else:
			raise IndexError("Queue is full)
	
	def pop(self):
		if not self.is_empty():
			self.front = (self.fron + 1) % self.size
			return self.queue[self.front]
		else:
			raise IndexError("Queue is empty)
	
	def is_empty(self):
		return self.rear == self.front
	
	def is_full(self):
		return (self.rear + 1) % self.size == self.front
双向队列

双向队列的两段都可以进队和出队
基本操作:
(1)队首进队
(2)队首出队
(3)队尾进队
(4)队尾出队

Python内置队列模块
from cllections import deque

# 单向队列使用
queue = deque()
queue.append(1) #队尾进队
queue.popleft() #队首出队

# 双向队列
queue.appendleft(1) #队首进队
queue.pop() #队尾出队
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值