0
点赞
收藏
分享

微信扫一扫

数组实现队列(循环队列)的思想以及简易代码


/*
* Copyright (c) 2020. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
* Vestibulum commodo. Ut rhoncus gravida arcu.
*/

package com.algorithm.tiger.queue;

import java.util.Arrays;

/**
* 用数组实现的队列(循环队列),队列容量保持恒定
* 先进先出FIFO
*
* @description: 队列
* @author: tiger
* @create: 2020-07-12 13:38
*/
public class MyQueue {

//队列的存储容器
private Integer[] array;
//队头指针
private Integer front;
//队尾指针
private Integer rear;
//队列实际元素数量
private Integer size;
//队列最大容量
private Integer maxSize;

public MyQueue(Integer capacity) {
this.array = new Integer[capacity];
front = 0;
rear = 0;
size = 0;
maxSize = capacity - 1;
}

/**
* 入队,只能加入队尾
*
* @param element 入队的元素
*/
public void enQueue(Integer element) throws Exception {

//判断队列是否已经满
if ((rear + 1) % array.length == front) {
throw new Exception("队列已满!");
}
//在原来队尾位置添加元素
array[rear] = element;
//重置队尾指针(循环移动)
rear = (rear + 1) % array.length;
//队列元素数量加1
size++;
}

/**
* 出队,只能将队头位置元素出队列
*/
public Integer deQueue() throws Exception {
//判断队列是否已空
if (front == rear) {
throw new Exception("队列已空!");
}
//原先队头元素
Integer deQueue = array[front];
//将队头元素指空
array[front] = null;
//重置队头指针
front = (front + 1) % array.length;
//队列元素数量减1
size--;
return deQueue;
}

public Integer[] getArray() {
return array;
}

public void setArray(Integer[] array) {
this.array = array;
}

public Integer getFront() {
return front;
}

public void setFront(Integer front) {
this.front = front;
}

public Integer getRear() {
return rear;
}

public void setRear(Integer rear) {
this.rear = rear;
}

public Integer getSize() {
return size;
}

public void setSize(Integer size) {
this.size = size;
}

@Override
public String toString() {
return "MyQueue{" +
"array=" + Arrays.toString(array) +
", front=" + front +
", rear=" + rear +
", size=" + size +
", maxSize=" + maxSize +
'}';
}

/**
* 测试
*
* @param args
*/
public static void main(String[] args) throws Exception {
//创建一个容量为6-1的队列
MyQueue myQueue = new MyQueue(7);
myQueue.enQueue(12);
myQueue.enQueue(23);
myQueue.enQueue(44);

System.out.println(myQueue);
myQueue.deQueue();
System.out.println(myQueue);
myQueue.deQueue();
System.out.println(myQueue);
myQueue.enQueue(66);
myQueue.enQueue(66);
myQueue.enQueue(77);
myQueue.enQueue(88);
System.out.println(myQueue);
myQueue.enQueue(3333);
System.out.println(myQueue);
myQueue.deQueue();
System.out.println(myQueue);
}
}

 

举报

相关推荐

0 条评论