java实现环形队列的顺序存储

队列:是一种操作受限的线性表,仅允许在表的一端进行插入,在表的另一端进行删除。
把进行插入的一端称作队尾,进行删除的一端称作队首或队头。
向队列插入新元素称为进队或入队,新元素进队后就成为新的队尾元素;
从队列中删除元素称为出队或离队,元素出队后,其直接后继元素就成为队首元素

特点:先进先出

java实现环形队列的顺序存储_第1张图片

实现代码如下

package 数据结构;
// 环形队列的顺序结构实现:只能在一端插入,另一端进行删除操作。在队尾插入元素,队首删除元素。
// 特点:先进先出
// rear front 
public class ArrQueue { 
    private final int MAXSIZE = 4;       // 最大容量
    private int front = 0;              // 队首
    private int rear = 0;               // 队尾
    String[] arr = new String[MAXSIZE];  
    /**
     * 进队(在队尾插入)
     * @param value
     */
    public boolean enQueue(String value) {
        // 判断环形队列是否已满
        if((rear +1) % MAXSIZE  == front) {
            return false;
        }
        // 队尾指针rear++
        rear = (rear + 1) % MAXSIZE;
        arr[rear] = value;     
        return true;
    }
    /**
     * 出队(在队首删除)
     */
    public String deQueue() {
        // 判断环形队列是否是空的
        if(rear == front) {
            return null;
        }
        return arr[++front];
    }
    /**
     * 判断是否为空
     * @return
     */
    public boolean isEmpty() {
        return rear == front;
    }
    public static void main(String[] args) {
        ArrQueue queue = new ArrQueue();
        System.out.println(queue.isEmpty());            // 判断队列是否为空
        System.out.println(queue.enQueue("zhangsan"));  // 进队
        System.out.println(queue.enQueue("lisi"));     
        System.out.println(queue.enQueue("wangwu"));   
        System.out.println(queue.enQueue("zhaoliu"));   // 出队
        System.out.println(queue.deQueue());
        System.out.println(queue.isEmpty());
    }

}


运行结果如下

true
true
true
true
false
zhangsan
false

你可能感兴趣的:(算法与数据结构,java)