Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >队列基本概念、循环队列【重点】

队列基本概念、循环队列【重点】

作者头像
孙晨c
发布于 2019-09-10 11:17:48
发布于 2019-09-10 11:17:48
6060
举报
文章被收录于专栏:无题~无题~

线性结构的两种常见应用之二:

  队列

    定义:

一种可以实现“先进先出”的存储结构,即“一端入,一端出”, 队首(front)出队,队尾(rear)入队(注:若front指向队首,则rear指向队尾最后一个有效元素的下一个元素;若rear指向队尾,则front指向队首第一个有效元素的下一个元素)

    分类:

      链式队列 --- 用链表实现

      静态队列 --- 用数组实现,静态队列通常都必须是循环队列

循环队列:

1. 静态队列为什么必须是循环队列?

   为了减少内存浪费。如果用传统意义的数组实现队列,无论入队还是出队,rear和front指针只能+不能-;比 F元素下标小的的数组元素下标就浪费了。

2.循环队列需要几个参数来确定?

  两个参数:front、rear 两个参数在不同场合有不同的含义

3.循环队列各个参数的含义

  1)队列初始化 front和rear的值都是零,初始化时队列就是空的。

   2)队列非空 front代表队列的第一个元素 rear代表了最后一个有效元素的下一个元素

  3)队列空 front和rear的值相等,但是不一定是零

4.循环队列入队伪算法 需要判断r是否指向数组最后一个元素。

   两步完成:

    1)将值存入r所指向的位置

    2)将r后移,正确写法是rear = (rear+1)%数组长度 错误写法:rear=rear+1;若rear已经在规定范围的队尾,就不能直接+1,否则越界

5.循环队列出队伪算法

  front = (front+1)% 数组长度,比如出队数组元素下标是0,数组长度是5,则front作为队首指向(0+1)%5 = 1,那么此时队首下标是1

6.如何判断循环队列是否为空?

   如果front与rear的值相等,则队列一定为空

7.如何判断循环队列是否已满?

  方法一:

    多增加一个表标识的参数

   方法二(常用):

    少用一个队列中的元素(才一个,不影响的),比如一共有N个元素的位置,规定N-1个为满,

    如果rear和front紧挨着(r的下一个位置是f),则队列已满。

    用C语言描述:

     if((r+1)%数组长度)==f)

      队列已满

     else

      队列不满

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
栈和队列详解(附相关面试题)
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。
二肥是只大懒蓝猫
2023/03/28
3130
栈和队列详解(附相关面试题)
【数据结构与算法】详解循环队列:基于数组实现高效存储与访问
循环队列的实现方式主要是基于数组的,但也可以采用其他数据结构,如链表。不过,在实际应用中,数组实现循环队列的方式更为常见和高效。
倔强的石头
2024/12/06
6620
【数据结构与算法】详解循环队列:基于数组实现高效存储与访问
循环队列出队-循环队列的c语言实现
  队列就是一个能够实现“先进先出”的存储结构,队列分为链式队列和静态队列。静态队列一般用数组来实现,但此时的队列必须是循环队列,否则会造成巨大的内存浪费;链式队列是用链表来实现队列的。说白了循环队列就是一个数组循环队列出队,我们把这个数组当成首尾相连来使用(写到数组的末尾后从头开始写)。
宜轩
2022/12/29
7370
栈和队列---循环队列
(1)上面的这个就是一个普通的数据的入队和出队的过程我们正常情况下去实现这个入队和出队的过程,就是这个数据从这个队尾进入,从队头离开,但是这个加入的时候肯定是没有其他的问题的,直接在这个队尾插入数据就可以了,但是在队头把这个数据出队之后,我们想要保持这个队列的完整性,就需要使用循环把这个队列里面的数据向前进行移动,这个是增加了这个方法的时间复杂度;
阑梦清川
2025/02/24
1110
栈和队列---循环队列
美团一面:循环队列听说过么,怎么实现?
为了避免当只有一个元素时,队头和队尾重合使处理变得麻烦,所以这里引入了队头和队尾两个指针,假设 front 指针指向队头元素,rear 指针指向队尾元素的下一个位置,这样:
飞天小牛肉
2023/09/19
2470
美团一面:循环队列听说过么,怎么实现?
数据结构:循环队列(C语言实现)[通俗易懂]
生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题;从生活中,可以抽象出队列的概念,队列就是一个能够实现“先进先出”的存储结构。队列分为链式队列和静态队列;静态队列一般用数组来实现,但此时的队列必须是循环队列,否则会造成巨大的内存浪费;链式队列是用链表来实现队列的。这里讲的是循环队列,首先我们必须明白下面几个问题
全栈程序员站长
2022/09/05
6370
数据结构:循环队列(C语言实现)[通俗易懂]
数据结构——java实现队列
顺序队列: 概念: 队列是一种先进先出的线性表,只允许在一端插入,另一端删除。允许插入的一端称为队尾,允许删除的一端称为队头 顺序队列的实现: 1 import org.junit.jupiter.api.Test; 2 3 /** 4 * 顺序队列 5 * @author wydream 6 * 7 */ 8 9 public class QueueSequence { 10 11 private String[] arr;//队列数组 12 pr
说故事的五公子
2019/09/11
3030
数据结构——java实现队列
循环队列出队-队列,顺序队列与循环队列
  队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
宜轩
2022/12/29
7940
数据结构之循环队列C语言实现(详细)[通俗易懂]
因此,队列,又称为先进先出表(FIFO),类似于生活中的排队,先来的排在前头,后来的排在后头,一个一个办理业务。
全栈程序员站长
2022/09/01
8860
【数据结构】循环队列
你想想,如果你今天去教室上课,因为是水课,后面3排都坐满了人,而前排还有很多空位,你会怎么做?直接走出教室,并告诉自己后面没有座位可坐了?
修修修也
2024/04/01
1510
【数据结构】循环队列
【算法与数据结构】队列的实现详解
front和rear都指向-1,表示队列中没有数据。size为0,表示队列中没有元素。
学习起来吧
2024/03/16
2750
【算法与数据结构】队列的实现详解
队列的顺序存储结构之循环队列
一、队列的定义 队列( queue )是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。如图所示:
全栈程序员站长
2022/08/31
6920
队列的顺序存储结构之循环队列
LeetCode——622设计循环队列
. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。
小李很执着
2024/06/15
1140
栈和队列就是这么简单
一、前言 上一篇已经讲过了链表【Java实现单向链表】了,它跟数组都是线性结构的基础,本文主要讲解线性结构的应用:栈和队列 如果写错的地方希望大家能够多多体谅并指正哦,如果有更好的理解的方式也希望能够
Java3y
2018/04/02
7590
栈和队列就是这么简单
Java实现基本数据结构(三)——队列
阅读本文前,最好先学习顺序表和栈的基本操作和实现原理,也就是弄清楚数组和栈的原理,点击Java实现基本数据结构(一)——数组,Java实现基本数据结构(二)——栈。先学习前置内容,学习效果更好哦!
星如月勿忘初心
2020/08/02
6830
数据结构学习笔记——队列
线性表有顺序存储和链式存储,栈是线性表,所以有这两种存储方式。同样,队列作为一种特殊的线性表,也同样存在这两种存储方式。
蜻蜓队长
2018/08/03
3290
数据结构学习笔记——队列
数据结构之——Python实现循环队列
栈是先入后出,与之相反的是队列,队列是先进先出的线性结构。队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。允许插入的一端称为队尾,允许删除的一端称为队头。
py3study
2020/01/07
2.1K0
队列和栈
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
政采云前端团队
2024/01/03
2120
队列和栈
循环队列出队-栈和队列的实现
  此外,当返回栈顶元素时循环队列出队,最后插入的元素会被返回,因此,栈的特点是“后进先出”
宜轩
2022/12/29
3410
面试官让手写各种队列,俺差点点没写出来
栈和队列是一对好兄弟,前面我们介绍过一篇栈的文章(栈,不就后进先出),栈的机制相对简单,后入先出,就像进入一个狭小的山洞,山洞只有一个出入口,只能后进先出(在外面的先出去,堵在里面先进去的就有点倒霉)。而队列就好比是一个隧道,后面的人跟着前面走,前面人先出去(先入先出)。日常的排队就是队列运转形式的一个描述!
bigsai
2021/05/17
3410
面试官让手写各种队列,俺差点点没写出来
推荐阅读
相关推荐
栈和队列详解(附相关面试题)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档