当前位置: 首页 > news >正文

地产网站建设公司一个网站的主题和设计风格

地产网站建设公司,一个网站的主题和设计风格,免费网站在线观看,小程序开发指南数组模拟环形队列 实现逻辑 创建一个固定大小的数组作为队列的存储空间,同时定义队列的头部和尾部指针(front和rear)。初始时,将头部和尾部指针都设置为0,表示队列为空。入队操作(enqueue)&am…

数组模拟环形队列

实现逻辑

  1. 创建一个固定大小的数组作为队列的存储空间,同时定义队列的头部和尾部指针(front和rear)。
  2. 初始时,将头部和尾部指针都设置为0,表示队列为空。
  3. 入队操作(enqueue):
    • 首先,判断队列是否已满。如果队列已满,无法再添加新的元素,直接返回。
      • 队列满的判断:
        • 公式:(rear + 1) % N == front
        • 说明:当队列满时,尾部指针的下一个位置就是头部指针的位置。
        • 解释:由于环形队列的特性,当尾部指针到达数组的末尾时,需要将尾部指针重新设置为数组的起始位置,即尾部指针加1后取模。当取模运算的结果与头部指针相等时,表示队列已满。
    • 如果队列未满,将新元素添加到尾部指针所指向的位置,并将尾部指针后移一位。
    • 注意:如果尾部指针已经到达数组的末尾,需要将尾部指针重新设置为数组的起始位置,实现循环利用。
  4. 出队操作(dequeue):
    • 首先,判断队列是否为空。如果队列为空,无法进行出队操作,直接返回。
      • 队列空的判断:
        • 公式:front == rear
        • 说明:当队列为空时,头部指针和尾部指针指向同一个位置,即队列中没有有效元素。
        • 解释:由于队列的初始状态是空的,所以头部指针和尾部指针都初始化为0。当进行出队操作时,头部指针会递增,当头部指针和尾部指针相等时,表示队列为空。
    • 如果队列不为空,将头部指针所指向的元素取出,并将头部指针后移一位。
    • 注意:如果头部指针已经到达数组的末尾,需要将头部指针重新设置为数组的起始位置,实现循环利用。
  5. 队列长度(size):
    • 队列的长度可以通过尾部指针减去头部指针来计算,但这个结果可能为负数或超过数组的大小。
    • 为了得到正确的队列长度,需要进行取模运算。具体做法是先计算尾部指针减去头部指针的差值,然后对数组的大小取模。
      • 队列中的有效元素个数:
        • 公式:(rear - front + N) % N
        • 说明:计算尾部指针和头部指针之间的差值,并对数组大小取模,得到队列中的有效元素个数。
        • 解释:当进行入队操作时,尾部指针会递增;当进行出队操作时,头部指针会递增。通过计算尾部指针减去头部指针的差值,可以得到队列中的有效元素个数。由于差值可能为负数或超过数组的大小,所以需要对数组大小取模,确保结果在合法范围内。

为什么需要用到取模运算实现?

取模运算的作用是将超出数组大小的索引重新映射到数组的合法索引范围内,实现队列的循环利用。

在环形队列中,当尾部指针后移时,需要考虑数组的边界情况。如果不进行取模运算,当尾部指针达到数组的末尾时,无法再继续后移,导致队列无法正常工作。

通过取模运算,可以将尾部指针重新定位到数组的起始位置,使得队列能够形成环形结构。具体来说,取模运算可以将尾部指针的值限制在合法范围内,即在
0 到 (maxSize-1) 的范围内循环。

例如,假设数组的大小为5,且当前尾部指针的位置为4(即指向数组的最后一个元素)。如果不进行取模运算,将直接将尾部指针加1,即 4 + 1 = 5,超出了数组的索引范围。但是,如果进行取模运算,即 (4 + 1) % 5 = 0,尾部指针会重新定位到数组的起始位置,形成环形结构。

因此,通过取模运算,可以确保尾部指针始终在合法的索引范围内,使得环形队列的入队操作能够正常进行。

同样的道理,对于头部指针的后移操作也需要进行取模运算,以保证在环形队列中正确移动。

代码实现

1:定义环形队列

public class CircularQueue {private int[] queue;  // 存储队列元素的数组private int front;    // 头部指针private int rear;     // 尾部指针private int maxSize;  // 队列的最大容量public CircularQueue(int capacity) {maxSize = capacity + 1;  // 预留一个位置用于判断队列满queue = new int[maxSize];front = 0;rear = 0;}// 入队操作public void enqueue(int element) {if (isFull()) {System.out.println("队列已满,无法入队!");return;}queue[rear] = element;rear = (rear + 1) % maxSize;  // 尾部指针后移并取模}// 出队操作public int dequeue() {if (isEmpty()) {System.out.println("队列为空,无法出队!");return -1;}int element = queue[front];front = (front + 1) % maxSize;  // 头部指针后移并取模return element;}// 判断队列是否为空public boolean isEmpty() {return front == rear;}// 判断队列是否已满public boolean isFull() {return (rear + 1) % maxSize == front;}// 获取队列中的有效元素个数public int size() {return (rear - front + maxSize) % maxSize;}
}

2:使用环形队列

public class Main {public static void main(String[] args) {CircularQueue queue = new CircularQueue(5);  // 创建容量为5的环形队列queue.enqueue(1);  // 入队操作queue.enqueue(2);queue.enqueue(3);queue.enqueue(4);queue.enqueue(5);System.out.println("队列是否为空:" + queue.isEmpty());  // 判断队列是否为空System.out.println("队列是否已满:" + queue.isFull());  // 判断队列是否已满System.out.println("队列中的有效元素个数:" + queue.size());  // 获取队列中的有效元素个数while (!queue.isEmpty()) {int element = queue.dequeue();  // 出队操作System.out.println("出队元素:" + element);}}
}
http://www.yayakq.cn/news/281560/

相关文章:

  • clo3d代做网站网站域名过期还能用吗
  • 杭州做服装电商拿货的网站wordpress上传小视频
  • 网关高性能 网站建设加强网站硬件建设方案
  • 算命手机网站开发无货源一件代发平台
  • 公司网站内容规划45岁一级建造师没人要了
  • 广州我网站制作网站备案更改
  • 公司网站建设价格贵吗中国贸易网站
  • 做期权关注哪个网站凡科网站建设怎么去掉极速建站
  • 揭阳网站建设antnw重庆网站建设就选承越
  • 佛山网站建设企业国外网站设计
  • 如何做视频网站流程图网站认证金额怎么做分录
  • 汕头网站开发服务郑州网站建设定制开发
  • 留学网站模板企业网站建设策划
  • 电子商务网站建设的相关流程旅游系统
  • 芜湖龙湖建设工程有限公司网站福建网站优化
  • 推动门户网站建设不断优化升级google网站搜索
  • 网站怎样和首页做链接seo专员是指什么意思
  • 大连省建设厅网站wordpress数据 架构
  • 品牌网站建设信息wordpress怎么设置语言
  • 协会网站建设哪里实惠有名的公关公司
  • 信誉好的企业网站建设用asp做的网站打开页面很慢
  • 冠县做网站哪里好小程序注册申请多少钱
  • 学校做网站方案上海好的网站有哪些
  • 鹿泉城乡建设局网站哈尔滨专业网站建设定制
  • 国内永久免费域名申请网站武安城乡建设网站
  • 重庆网站开发公司就业信息网页设计论文
  • 国外做健康的网站网站建设 用ftp上传文件
  • 商务网站建设规划心得wordpress文章关联
  • 宁波网站建设优化排名深圳网站建公司
  • 头像设计易做图网站微信表情包制作网站