Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3657363
  • 博文数量: 365
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2522
  • 用 户 组: 普通用户
  • 注册时间: 2019-10-28 13:40
文章分类

全部博文(365)

文章存档

2023年(8)

2022年(130)

2021年(155)

2020年(50)

2019年(22)

我的朋友

分类: Java

2021-07-27 17:18:04

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];

        // 其他往前移动

        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();

    }

}

阅读(1123) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~