什么是队列
数组模拟实现简单的队列
- 思路
- 实现代码
class ArrayQueue{
private int maxSize;
private int front; //队头
private int rear; //队尾
private int[] arr; //模拟队列
//创建队列构造方法
public ArrayQueue(int maxSize) {
this.maxSize = maxSize;
arr = new int[maxSize];
front = -1;
rear = -1;
}
//判断是否队满
public boolean isFull(){
if (rear == maxSize-1){
return true;
}
return false;
}
//判断是否为空
public boolean isEmpty(){
if (front == rear){
return true;
}
return false;
}
//添加数据,入队操作
public void append(int num) {
boolean flag = isFull();
if (flag){
System.out.println("队列已满!无法添加数据");
}else {
rear ++;
arr[rear] = num;
}
}
//获取数据,出队操作
public int getQueue(){
boolean flag = isEmpty();
if (flag){
throw new RuntimeException("队列为空!无法获取数据");
}else {
front++;
return arr[front];
}
}
//获取队头
public int getHert(){
boolean flag = isEmpty();
if (flag){
throw new RuntimeException("队列为空!无法获取数据");
}else {
return arr[front+1];
}
}
//获取队尾
public int getTall(){
boolean flag = isEmpty();
if (flag){
throw new RuntimeException("队列为空!无法获取数据");
}else {
return arr[rear];
}
}
//显示队列所有元素
public void showAll(){
boolean flag = isEmpty();
if (flag){
System.out.println("队列为空!");
}else {
for (int item:arr) {
System.out.println(item);
}
}
}
}
普通队列的不足
普通队列中的数组只能用一次,不能达到复用的效果。所以下面就引出了环形队列来优化。
环形队列的模拟实现
代码实现:
class RingQueue{
private int maxSize;
private int front; //队头
private int rear; //队尾
private int[] arr; //模拟队列
//创建队列构造方法
public RingQueue(int maxSize) {
this.maxSize = maxSize;
arr = new int[maxSize];
front = 0;
rear = 0;
}
//判断是否队满
public boolean isFull(){
if ((rear+1)%maxSize == front){
return true;
}
return false;
}
//判断是否为空
public boolean isEmpty(){
if (front == rear){
return true;
}
return false;
}
//添加数据,入队操作
public void append(int num) {
boolean flag = isFull();
if (flag){
System.out.println("队列已满!无法添加数据");
}else {
arr[rear] = num;
rear = (rear+1)%maxSize;
}
}
//获取数据,出队操作
public int getQueue(){
boolean flag = isEmpty();
if (flag){
throw new RuntimeException("队列为空!无法获取数据");
}else {
int data = arr[front];
front = (front+1)%maxSize;
return data;
}
}
//获取队头
public int getHert(){
boolean flag = isEmpty();
if (flag){
throw new RuntimeException("队列为空!无法获取数据");
}else {
return arr[front];
}
}
//获取队尾
public int getTall(){
boolean flag = isEmpty();
if (flag){
throw new RuntimeException("队列为空!无法获取数据");
}else {
return arr[(rear+maxSize-1)%maxSize];
}
}
//获取队列所有元素的个数
public int getValueNums(){
return (rear+maxSize-front)%maxSize;
}
//显示队列所有元素
public void showAll(){
boolean flag = isEmpty();
int num = getValueNums();
if (flag){
System.out.println("队列为空!");
}else {
for (int i = front; i <front + num; i++) {
System.out.printf("a[%d]=%d\n",i%maxSize,arr[i%maxSize]);
}
}
}
}
声明:图片截图于尚硅谷_韩顺平_数据结构与算法上课笔记。