java 数据结构 环形数组队列的理解

本文探讨了Java中环形数组队列的概念,包括队列的构造、属性如最大容量、队列头和队列尾的初始值及含义。通过具体的例子解释了如何判断环形队列是否满或空,以及rear指针为什么指向最后一个元素的后一个位置,强调了取余运算在环形队列操作中的关键作用。
摘要由CSDN通过智能技术生成

java 数据结构 环形数组队列的理解

已经有很多博客都贴出了代码了,代码基本都和尚硅谷里的大同小异,下面分析下思路。
首先编写一个类,类应该包含:
属性:最大容量maxsize,队列头front,队列尾rear,模拟队列的数组arr[];
构造器,
类的方法:判断队列是否满,队列是否空,添加数据到队列,获取队列的数据,显示队列所有数据。

front:初始值为0,指向队列的第一个元素,arr[front]就是队列的第一个元素。

rear:初始值为0,rear指向队列的最后一个元素的后一个位置(也就是进来一个元素11,此时arr[0]=11,rear此时为1,再进来一个元素12,arr1[1]=12,rear就为2,数组的最大容量为maxsize,数组可以从arr[0]~arr[maxsize-1],但是环形数组队列的最大有效数据长度只能为maxsize-1,选maxsize为4时,有效数据长度就为3,再进来一个数13时,arr[2]=13,rear为3,此时可通过判断队列是否满的情况来分析)

取出元素: front = (front + 1)% maxsize
增加元素: rear = (rear+1) % maxsize
判断环形队列是否为空:front == rear
环形队列有效数据长度: (rear - front + maxsize)% maxsize

判断环形队列是否为满 :①(rear + 1)%maxsize == front (接着上面例子,front为0时,rear=3,此时可判断出队列是满,取出一个元素,front=1,增加一个元素14,arr[3]=14,rear=0,仍然可通过上式判断队列是否为满) ② 简洁明了的方法:直接判断队列中的有效数据长度是否等于最大有效数据长度maxsize-1,是的话则满。

rear指向队列的最后一个元素的后一个位置,因为环形链表的很多操作都会涉及到取余运算(x%maxsize)maxsize为数组的长度。x%maxsize的取值范围是[0,maxsize-1],所以让链表最大长度为maxsize-1时,就必须对数组空出一个位置,rear就指向队列的最后一个元素的后一个位置,如果让链表最大长度为maxsize,rear指向队列的最后一个元素的位置,当环形链表的很多操作取余数后,环形队列很多方法无法通过取余来判断。

import java.util.Scanner;
public class Circle {
   
    public static void main(String[] args) {
   
        System.out.println("测试数组模拟环形队列的案例~~~");

        // 创建一个环形队列
        circleArray queue = new circleArray(4); //说明设置4, 但是队列的有效数据最大是3
        char key = ' '; // 接收用户输入
        Scanner scanner = new Scanner(System.in);//
        boolean loop = true;
        // 输出一个菜单
        while (loop) 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值