数组实现简单队列 - 数据结构笔记

本文介绍了如何使用数组在Java中实现一个简单的无环队列,包括队列的概念、属性定义、操作方法如isEmpty、isFull、addQueue、poll和peek。同时,文中指出这种实现方式未考虑数组空间复用,可以使用环形数组优化。
摘要由CSDN通过智能技术生成

使用数组实现简单队列(无环形结构 / JAVA代码)

队列:

  • 队列是一个有序链表,可以用数组或是链表实现;
  • 满足先入先出原则,即: 先存入到队列中的数据要先取出,后存入的数据要后取出;

数组实现简单无环队列

属性:

maxSize 记录最大容量;
front,rear 分别记录队列的头部和尾部的下标, front 会随着数据的出列操作而改变,而rear随着队列的入列而改变;

Java 代码实现:

public class QueueArr {
	int maxSize;//容量
	int rear;//队列尾
	int front;//队列头
	int[] queue;//数组容器
	
	public QueueArr(int maxSize) {
		this.maxSize = maxSize;
		queue = new int[this.maxSize];
		front = -1;//指向队列头部,下标位置为队列头部元素的前一个位置
		rear = -1;//指向队列尾部,下标位置就是队列的最后一个元素
	}
	}
操作方法:

判断是否为空 isEmpty(): 当尾指针与头指针指向同一下标,此时队列为空。

	public boolean isEmpty() {
		return rear == front;
	}

判断是否为满 isFull(): 当尾指针值为maxSize - 1,也就是容器的最大下标时,队列为满。

	public boolean isFull() {
		return rear == maxSize - 1;
	}

入队操作 addQueue(): 如果队列满则不能添加新元素,若队列未满则尾部指针加一,添加新元素到尾指针位置。

public void addQueue(int elem) {
		if(isFull()) {
			//队列满 todo
		}
		else {
			queue[++rear] = elem;
		}
	}

出队操作 poll(): 如果队列空则不能出队,若队列未空则头指针加一再将头指针所指元素返回代表该元素已出队列。

public int poll() {
		if(isEmpty()) {
			throw new RuntimeException("队列为空");
		}else {
			return queue[++front];
		}
	}

查看头部元素 peek(): 如果队列空则不能返回内容,非空时则返回front头部指针位置的下一个元素,代表当前队列的头部元素。

public int peek() {
		if(!isEmpty()) {
			return queue[front + 1];
		}
		else {
			throw new RuntimeException("队列为空");
		}
	}

注意:

此队列实现方法仅为简单数组实现,并未考虑如何将数组容器内已出队列的元素位置重复利用,还可以使用环形数组来实现队列,最大化利用数组容器空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值