Java语言怎么编写环形队列的插入和删除的演示代码

Java语言怎么编写环形队列的插入和删除的演示代码?环形队列一定要用链表实现的么?还是可以使用循环链表

(循环)链表、数组都行,数组的话使用取模的方式获得下标。找了个简单实现,供参考:https://blog.csdn.net/qq_38186465/article/details/123676814

都可以的,给你个例子:

public class CircularQueue {
    private int[] queue;
    private int front;
    private int rear;
    private int size;
    private int count;

    public CircularQueue(int size) {
        this.size = size;
        queue = new int[size];
        front = 0;
        rear = -1;
        count = 0;
    }

    public boolean isEmpty() {
        return count == 0;
    }

    public boolean isFull() {
        return count == size;
    }

    public void enqueue(int item) {
        if (isFull()) {
            System.out.println("Queue is full. Cannot enqueue " + item);
            return;
        }

        rear = (rear + 1) % size;
        queue[rear] = item;
        count++;
        System.out.println("Enqueued " + item);
    }

    public int dequeue() {
        if (isEmpty()) {
            System.out.println("Queue is empty. Cannot dequeue.");
            return -1;
        }

        int item = queue[front];
        front = (front + 1) % size;
        count--;
        System.out.println("Dequeued " + item);
        return item;
    }

    public int peek() {
        if (isEmpty()) {
            System.out.println("Queue is empty. No peek.");
            return -1;
        }

        return queue[front];
    }

    public static void main(String[] args) {
        CircularQueue queue = new CircularQueue(5);

        queue.enqueue(10);
        queue.enqueue(20);
        queue.enqueue(30);
        queue.enqueue(40);
        queue.enqueue(50);
        queue.enqueue(60); // Will display queue full message, as the size is exceeded

        System.out.println("Front: " + queue.peek());

        queue.dequeue();
        queue.dequeue();
        queue.dequeue();
        queue.dequeue();
        queue.dequeue();
        queue.dequeue(); // Will display queue empty message, as elements are dequeued

        System.out.println("Is queue empty? " + queue.isEmpty());
        System.out.println("Is queue full? " + queue.isFull());
    }
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/1089448
  • 这篇博客也不错, 你可以看下Java 实现快速乘 快速幂算法 从比较容易理解的快速乘过渡到快速幂
  • 除此之外, 这篇博客: 如何用java实现图的存储【邻接矩阵】中的 表示图中的边有两种方法,邻接矩阵和邻接表。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    如图:
    邻接矩阵
    邻接表
    前者适合稠密图,后者适合稀疏图。
    这里介绍用邻接矩阵实现:

    在图中,一条边得由两个顶点决定。因此,要表示一条边,得注明两边的顶点是哪些;

    所以我们用二维数组来存储边,二维数组的行数和列数都是顶点的个数,二维数组中的值代表该行(某顶点)该列(某顶点)下的边的情况。

    这里,我用0代表两顶点间无边,大于0的树值代表边的权值。

  • 您还可以看一下 汪翠老师的java项目实战之欢乐斗地主游戏开发教程 毕业项目课程设计带源码课程中的 接收从服务器端群发回来的消息并添加地主牌小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    使用链表来实现环形队列的插入和删除操作是一种常见的做法。可以通过循环链表来代替普通的链表,因为循环链表的尾结点指向头结点,形成一个闭环,可以方便地实现环形队列的插入和删除操作。

    下面是用Java语言实现环形队列的插入和删除操作的代码示例:

    public class CircularQueue {
        private Node head;  // 头结点
        private Node tail;  // 尾结点
    
        // 定义链表节点
        private class Node {
            int value;
            Node next;
    
            public Node(int value) {
                this.value = value;
                this.next = null;
            }
        }
    
        // 初始化环形队列
        public CircularQueue() {
            head = null;
            tail = null;
        }
    
        // 插入元素到队列尾部
        public void enqueue(int value) {
            Node newNode = new Node(value);
            if (head == null) {
                head = newNode;
            } else {
                tail.next = newNode;
            }
            tail = newNode;
            tail.next = head;  // 将尾结点指向头结点,形成闭环
        }
    
        // 删除队列头部的元素
        public void dequeue() {
            if (head == null) {
                System.out.println("Queue is empty!");
                return;
            }
            if (head == tail) {
                head = null;
                tail = null;
            } else {
                head = head.next;
                tail.next = head;  // 更新尾结点的指向
            }
        }
    }
    

    使用示例:

    CircularQueue queue = new CircularQueue();
    
    // 插入元素到队列尾部
    queue.enqueue(1);
    queue.enqueue(2);
    queue.enqueue(3);
    
    // 删除队列头部的元素
    queue.dequeue();
    
    // 输出队列中的元素
    Node node = queue.head;
    while (node != null) {
        System.out.println(node.value);
        node = node.next;
    }
    

    以上代码通过循环链表来实现环形队列的插入和删除操作,使得队列的输出和输入可以从前后端分别处理。其中,front变量记录队列前端的下标,rear变量记录队列后端的下标,可以实现插入和删除操作的环形移动。

    需要注意的是,以上代码仅为示例,具体的实现需要根据具体需求和场景进行适当修改。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^