package com.fc.queue;
/**
- @ClassName SequentialQueue 程序队列
- @Description 放弃队头始终在索引为0的地位
- @Author Fclever
- @Date 2021/7/2 15:59
**/
public class SequentialQueue<T> {
/** * 队列默认长度10 */ private static final int MAXLEN = 10; /** * 存储数据数组 */ Object[] queueData; /** * 队尾索引 * 队列为空,指向-1,否则,始终指向队尾元素n */ int tail; public SequentialQueue() { } /** * 1. 初始化队列 */ public void initQueue() { // 初始化存储数组 this.queueData = new Object[MAXLEN]; // 设置队尾 this.tail = -1; } /** * 2. 销毁队列 */
// public void destroyQueue() {
//
// }
/** * 3. 清空队列 */ public void clearQueue() { for (int i = 0; i<=this.tail;i++){ this.queueData[i] = null; } this.tail = -1; } /** * 4. 判断队列是否为空 * @return */ public boolean queueEmpty() { return this.tail == -1; } /** * 5. 获取队头元素 * @return */ public T getHead() { return (T) this.queueData[0]; } /** * 6. 入队 * @param data 入队元素 */ public void enQueue(T data) { // 判断队列是否满 if (this.tail + 1 == this.MAXLEN) { throw new OutOfMemoryError(); } // 插入元素 this.queueData[++this.tail] = data; } /** * 7. 出队 * @return 返回队头元素 */ public T deQueue() { if (this.queueEmpty()) { return null; } // 返回值 T data = (T) this.queueData[0]; // [贝宝](https://www.gendan5.com/wallet/PayPal.html)其余往前挪动 System.arraycopy(this.queueData, 1, this.queueData, 0, this.tail); this.queueData[this.tail--] = null; return data; } /** * 8. 获取队列理论元素个数 * @return */ public int queueLength() { return this.tail+1; } /** * 9. 遍历元素 */ public void getAll() { for (int i=0;i<=this.tail;i++){ System.out.printf("第%d个元素为:%s\n",i,this.queueData[i]); } }
}
测试
package com.fc.queue;
import org.junit.Test;
import static org.junit.Assert.*;
/**
- @ClassName SequentialQueueTest
- @Description
- @Author Fclever
- @Date 2021/7/5 13:20
**/
public class SequentialQueueTest {
@Test public void testSequentialQueueTest() { SequentialQueue<String> sequentialQueue = new SequentialQueue<>(); sequentialQueue.initQueue(); sequentialQueue.enQueue("1"); sequentialQueue.enQueue("2"); sequentialQueue.enQueue("3"); sequentialQueue.enQueue("4"); sequentialQueue.enQueue("5"); System.out.println(sequentialQueue.queueLength()); sequentialQueue.deQueue(); sequentialQueue.deQueue(); sequentialQueue.getAll(); }
}