当前位置:网站首页 > 编程语言 > 正文

环形队列是循环队列吗对吗(环形队列是什么)



/*使用数组模拟环形队列的思路分析

思路如下:

1.front变量的定义做一个调整:front指向队列的第一个元素,也就是说arr[front]就是队列的第一个元素

    front的初始值为0

2.rear变量的含义做一个调整:rear指向队列的的最后一个元素的后一个位置,因为希望空出一个空间作为约定

    rear的初始值为0

3.当队列满时,条件是 (rear + 1) % maxSize == front

4.队列为空的条件是 rear = front

5.当我们这样分析,队列中有效的数据的个数(rear + maxSize- front)%maxSize

*/

import java.util.Scanner;

public class circle_array {

    public static void main(String[] args) {

        circlearray arrque = new circlearray(4);//创建一个环形队列,这里设置4,其队列的有效数据最大为3

        char key = ' ';//接收用户输入

        Scanner scanner = new Scanner(System.in);//

        boolean loop = true;

        while(loop){

            System.out.println("s(show):显示队列");

            System.out.println("e(exit):退出程序");

            System.out.println("a(add):添加数据到队列");

            System.out.println("g(get):从队列里取数据");

            System.out.println("h(head):查看队列头数据");

            key = scanner.next().charAt(0);

            switch (key) {

                case 's':

                    arrque.showQueue();

                    break;

                case 'a':

                    System.out.println("输出一个数");

                    int value = scanner.nextInt();

                    arrque.addQueue(value);

                    break;

                case 'g': // 取出数据

                    try {

                        int res = arrque.getQueue();

                        System.out.printf("取出的数据是%d ", res);

                    } catch (Exception e) {

                        //TODO: handle exception

                        System.out.println(e.getMessage());

                    }

                    break;

                case 'h'://查看队列头数据

                    try {

                        int res = arrque.headQueue();

                        System.out.printf("队列头数据是%d ", res);

                    } catch (Exception e) {

                        //TODO: handle exception

                        System.out.println(e.getMessage());

                    }

                    break;

                case 'e'://退出程序

                    scanner.close();

                    loop = false;

                    break;

                default:

                    break;

            }

        }

        System.out.println("程序退出~~");

    }

}

class circlearray{

    private int maxSize; //表示数组的最大容量

    private int front; //指向队列头

    private int rear; //指向队列尾

    private int[] arr; //该数组用于存放数据,模拟队列

    //创建队列的构造器

    public circlearray(int ArrMaxSize){

        maxSize = ArrMaxSize;

        arr = new int [maxSize];

        front = 0;

        rear = 0;

    }

    //判断队列是否为满

    public boolean isFull(){

        return (rear + 1) % maxSize == front;

    }

    //判断队列是否为空

    public boolean isEmpty(){

        return front == rear;

    }

    //添加数据到队列

    public void addQueue(int n){

        //判断队列是否满

        if(isFull()){

            System.out.println("队列满,不能加入数据~~");

            return;

        }

        arr[rear] = n;

        rear= (rear+1)%maxSize;//rear后移,必须考虑取模

    }

    //获取队列的数据,出队列

    public int getQueue(){

        //判断队列是否空

        if(isEmpty()){

            //通过抛出异常

            throw new RuntimeException("队列空,不能取数据~~");

        }

        //这里需要分析出front是指向队列的第一个元素

        //1.先把front对应的值保存到一个临时变量2.将front后移3.将临时保存的变量返回

        int value = arr[front];

        front = (front+1)%maxSize;//front后移

        return value;

    }  

     //显示队列的所有数据

     public void showQueue(){

        if(isEmpty()){

            System.out.println("队列空,没有数据~~");

            return;

        }

        //从front开始遍历

        for(int i = front;i<front+size();i++){

            System.out.printf("arr[%d]=%d ", i%maxSize , arr[i%maxSize]);

        }

    }

   

    //求出当前队列有效数据的个数

    public int size(){

        return (rear + maxSize - front) % maxSize;

    }

    //显示队列的头数据,注意不是取出数据

    public int headQueue(){

        //判断队列是否空

        if(isEmpty()){

            throw new RuntimeException("队列空,没有数据~~");

        }

        return arr[front];

    }

}

到此这篇环形队列是循环队列吗对吗(环形队列是什么)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 十大最强法术(十大最强法术是什么)2025-11-30 22:45:12
  • 安装虚拟机的详细步骤是什么(安装虚拟机的详细步骤是什么)2025-11-30 22:45:12
  • 文件权限777(文件权限775)2025-11-30 22:45:12
  • bt601和bt656的区别(bt6009bk与b60bk的区别)2025-11-30 22:45:12
  • 电脑剪辑按什么键(电脑剪辑用什么快捷键)2025-11-30 22:45:12
  • yw77731域名查询(yw.52777.域名查询)2025-11-30 22:45:12
  • mt103报文怎么看(mt103报文怎么看款项到哪里了)2025-11-30 22:45:12
  • 抽奖小程序制作(抽奖小程序制作一个多少钱)2025-11-30 22:45:12
  • 重画什么意思(重重画的意思)2025-11-30 22:45:12
  • 免费二级域名解析平台(免费二级域名解析分发)2025-11-30 22:45:12
  • 全屏图片