数据结构队列顺序循环队列、加入、删除、取头元素

本文介绍了队列的概念,包括队头、队尾以及基本操作。接着详细讲解了顺序队列的实现,使用一维数组存储元素,并通过front和rear指针管理队头和队尾。进一步讨论了顺序循环队列,它是顺序队列的逻辑循环结构,通过front和rear的特殊计算实现队列的满和空判断。文中还展示了入队、出队、取队头元素和判断队列是否为空的具体代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

队列(3.0笔记)
1、定义:
Queue)是插入和删除操作在线性表的两端进行,一端允许插入操作,而另一端只允许删除操作,允许插入的一端称为队尾(Rear),允许删除的另一端则称为队头(Front)。队列的插入操作通常称为入队或进队,删除操作通常称为出队。如果队列中没有元素,则称为空队列。

队列抽象数据类型

//其中T表示队列中数据的类型
public interface Queue<T> {
	public void enqueue(T t);  //元素入队,在队尾插入元素T
	public T dequeue();       //元素出队,队头元素出队
	public T peek();          //取队头元素值,但队头元素不出队
	public boolean isEmpty();  //判断队列是否为空
}
队列的插入和删除操作在两端进行,使用队头指针(front)和
队尾指针(rear)表示队列的操作的两端。
队列的基本操作主要有创建队列、入队、出队、取队头元素、
判断队列是否为空等。

2、队列的顺序存储称为顺序队列(Sequential Queue):
顺序队列用一个一维数组存放元素数据,用两个变量front和rear,分别表示队头和队尾的位置。

public class SeqQueue<T> implements Queue<T> {
	private T[] queue=null;  //声明一维数组,存储队列元素
	private int length;      //数组的大小,表示队列的最大容量 
	private int front;       //表示队头位置
	private int rear;        //表示队尾位置
	//实现队列接口的相关方法
	……
}

3、顺序循坏队列

3.01、定义:顺序循环队列是将顺序队列设计成逻辑上头尾相接的循环结构
在这里插入图片描述
3.02、表达式:
入队操作时改变rear值,计算表达式为:rear=(rear+1)%length
入队操作时改变rear值,计算表达式为:rear=(rear+1)%length

3.03对空和队满判断
约定队列中预留一个空位,在队头位置和队尾位置相差为1时,即认为队列已满,此时队满条件为:front=(rear+1)% length,队列中最多放length-1个元素。
在这里插入图片描述
在这里插入图片描述
3.04、入队的操作

//元素入队
@Override
public void enqueue(T t) {
//判断队列是否满,若已满,则抛出异常,若未满,队尾位置向前移动1,插入元素
	if(front==(rear+1) % length) {
		throw new RuntimeException("队列已满,元素不能入队");
	}else {
		rear=(rear+1)%length;
		queue[rear]=t;
	}
}

3.05、出队的操作

//元素出队
@Override
public T dequeue() {
//判断队列是否空,若为空,抛出异常,若不为空,队头位置向前移动1,取出元素
	if(isEmpty()) {
		throw new RuntimeException("队列空,没有元素出队");
	}else {
		front=(front+1) %length;
		T t=queue[front];
		queue[front]=null;
		return t;
	}
}
//时间复杂度为O(1)

3.06、取头元素

@Override
public T peek() {
//判断队列是否空,若为空,抛出异常,若不为空,直接取出队头元素
	if(isEmpty()) {
		throw new RuntimeException("队列空,没有元素获取");
	}else {
		return queue[front+1];    //直接将队头元素取出
	}
}

注意:获取队头元素和出队操作的区别在于,队头位置不移动

3.07、判断队列是否为空

@Override
public T peek() {
//判断队列是否空,若为空,抛出异常,若不为空,直接取出队头元素
	if(isEmpty()) {
		throw new RuntimeException("队列空,没有元素获取");
	}else {
		return queue[front+1];    //直接将队头元素取出
	}
}

如有不对请指正!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值