Java数据结构与算法-队列(详细实现)

package com.fc.queue;
/**

  • @ClassName SequentialQueue 顺序队列
  • @Description 保持队头始终在索引为0的位置
  • @Author Fclever
  • @Date 2021/7/2 15:59
    **/

public class SequentialQueue {

/**
 * 队列默认长度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 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();
}

}

你可能感兴趣的:(java)