设计循环队列(java实现)

设计循环队列(JAVA 实现)

设计自己的循环队列

  • add (入队,添元素)
  • remove (出队,删除队首元素并返回)
  • element (查看,查看队首元素)
  • show (显示数据(遍历))
 private int maxSize;//表示数组的最大容量
    private int front;// 队列的第一个元素 front=0;
    private  int rear;//队列尾
    private int[] arr;

    public circlequeue(int arrMaxSize){
        maxSize = arrMaxSize;
        arr = new int[maxSize];
    }

    //判断队列是否满
    public  boolean isFull(){
        return (rear+1)%maxSize ==front;
    }
    //判断是否为空
    public boolean isEmpty(){
        return rear == front;
    }

    //添加数据元素
    public void add(int n){
        if (isFull()){
            System.out.println("队列已满 不可添加");
            return;
        }
        arr[rear] = n;
        rear = (rear+1)%maxSize;
    }

    //出队
    public int remove(){
        if (isEmpty()){
            throw new RuntimeException("队列空,不可取数据");
        }
        //创建临时变量 1将front 保存上,2再将front后移,3将临时变量返回
        int val = arr[front];
        front = (front+1)%maxSize;
        return val;
    }
    //显示数据
    public void showQueue(){
        if (isEmpty()){
            System.out.println("队列为空 没有输出");
            return;
        }
        //遍历
        for (int i = front; i< front+size(); i++){
            System.out.printf("arr[%d]=%d\n",i%maxSize,arr[i%maxSize]);
        }
    }
    public  int size(){
        return (rear+maxSize-front)%maxSize;//有效元素的个数
    }
    //element
    public int element(){
        if (isEmpty()){
            System.out.println("队列为空,没有数据");
        }
        return arr[front];// 是因为front 是头元素;
    }
class MyCircularQueue {
    private int maxSize;
    private int front;
    private int rear;
    private int[] arr;
    int sign =0;

    public  MyCircularQueue(int k) {
        arr = new int[k];
       maxSize = k;
    }

    public boolean enQueue(int value) {//add
        if (isFull()){
           return false;
        }
        arr[rear] = value;
        rear = (rear+1)%maxSize;
        sign=1;
        return true;
    }

    public boolean deQueue() {//remove
        if (isEmpty()){
            return false;
        }
        front = (front+1)%maxSize;
        sign =0;
        return true;
    }

    public int Front() {
        if (isEmpty()){
            return -1;
        }
            return arr[front];

    }

    public int Rear() {//获取队尾元素
        if (isEmpty()){
            return -1;
        }
        if(front==rear){
            int temp=rear-1;
            if(temp<0) temp=maxSize+temp;
            return arr[temp];
        }
        else {
            if(rear-1<0){
                return arr[maxSize+(rear-1)];
            }
            else return arr[rear-1];
        }
    }

    public boolean isEmpty() {
        if(sign==0 && front==rear) return true;
        else return false;
    }

    public boolean isFull() {
        if(sign==1 && front==rear) return true;
        else return false;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现循环队列可以使用数组来实现,具体实现方法如下: 1.定义一个数组和两个指针front和rear,分别指向队列的头和尾。 2.在队列为空时,front和rear都指向-1。 3.在队列中加入元素时,先判断队列是否已满,如果已满则无法加入元素,否则将rear指针向后移动一位,并将元素加入rear指针所指向的位置。 4.在队列中删除元素时,先判断队列是否为空,如果为空则无法删除元素,否则将front指针向后移动一位,并返回front指针所指向的元素。 5.在判断队列是否为空时,如果front和rear指针都指向-1,则队列为空。 6.在判断队列是否已满时,如果rear指针已经指向数组的最后一个位置,且front指针不在数组的第一个位置,则队列已满。 下面是Java实现循环队列的代码示例: ```java public class CircularQueue { private int[] queue; private int front; private int rear; private int size; public CircularQueue(int k) { queue = new int[k]; front = -1; rear = -1; size = k; } public boolean isEmpty() { return front == -1 && rear == -1; } public boolean isFull() { return (rear + 1) % size == front; } public void enQueue(int data) { if (isFull()) { System.out.println("Queue is full!"); return; } if (isEmpty()) { front = 0; rear = 0; } else { rear = (rear + 1) % size; } queue[rear] = data; } public int deQueue() { if (isEmpty()) { System.out.println("Queue is empty!"); return -1; } int data = queue[front]; if (front == rear) { front = -1; rear = -1; } else { front = (front + 1) % size; } return data; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值