菜鸟笔记之数据结构(2)

本文介绍了数据结构中的队列,遵循先入先出(FIFO)原则。通过数组模拟队列,详细讨论了如何使用两个变量front和rear来跟踪队列的头部和尾部,并指出当队列满或空时的特殊情况。接着提出了优化方案,即使用环形队列,调整front和rear的含义以实现空间复用,并给出了队列满和空的判断条件及元素个数的计算方式。
摘要由CSDN通过智能技术生成

数据结构与算法—队列


声明:以下都是学的尚硅谷网课所记的笔记。

特点

  • 队列是一个有序列表,可以用数组和链表实现;
  • 先入先出(FIFO原则);
  • 队首(front)取元素,队尾(rear)放元素。

数组模拟队列

  • 需要两个变量front(随数据的取出变化)和rear(随数据存入变化)分别记录队列的前后端下标,front和rear初始化为-1;
  • front == rear -> 表示空,队列中没有元素,不能取数据;
  • rear == maxSize - 1 -> 表示队列满了,不能存数据。

优化思路

上边的数组模拟队列的作用非常受限,为了让数组达到复用的效果,即:当我们从数组队列中取出了数据,那取出数据后后这个空间可以再次使用。下面写出优化思路(将数组的头和尾拼接起来,看成一个环形队列):

  1. front变量含义调整:front指向队列的第一个元素,arr[front]就是第一个,front不一定是数组的第一个元素下标;
  2. rear变量含义调整:rear指向队列的最后一个元素(最后一个元素即第一个元素的前一个元素)的后一个位置。空一个位置来做约定;
  3. 当队列满时,条件:(rear+1)% maxSize == front ;
  4. 当队列空时,条件:rear == front ;
  5. 队列中有效的数据个数(取模):(rear + maxSize - front)% maxSize 。

具体可以参考这篇的博文:图解&代码实现:数组模拟实现环形队列

---------------------------- 个人学习笔记----------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值