队列:从普通队列到循环队列

队列的定义:
队列(queue)是允许在一端进行插入操作,在另一端进行删除操作的线性表。允许插入的一端称为队尾(rear),允许删除的一端称为队头(front)。插入操作称为入队或进队(enqueue),删除操作称为出队或离队(dequeue)。
队列的主要特点是“先进先出”,因此也称为先进先出表。
如:在饭堂某个窗口排队打饭的若干个同学,就可以看成是一个队列。


实现

因为队列也是线性表的一种,因此可以采用顺序存储结构或链式存储结构实现。

1. 顺序表实现

1.普通的队列
普通队列的类型声明:

typedef struct
{ElemType data[MaxSize];int front, rear;
}

其中设置两个指针front和rear,分别用来指向队头和队尾。初始时front = rear = -1。元素进队时,rear向上移动,指向新进队元素;元素出队时,front向上移动,指向刚刚出队的元素,显然当front = rear时队列为空。当rear = 数组长度 - 1的时候队列满。
这样的队列会造成假溢出的问题,即当第一次队满后再出队元素,rear仍然指向数组的最后一个元素,表现为队满,而实际上队列因出队元素有空位置。


2. 使用循环队列
为了解决假溢出问题,考虑将队列的首尾相连,使用模运算实现。
具体操作是:首尾指针采用循环增1的方法移动
队尾指针移动:rear = (rear + 1) % MaxSize;
队首指针移动:front = (front + 1) % MaxSize;
判断队满:(rear + 1) % MaxSize == front;
判断队空:front == rear;

2. 链表实现

数据结点使用单链表结构,另外定义一个结点类型,其包含队首和队尾指针,因为是链式存储结构,所以不考虑队满的情况。
因为当队列中有一个元素时,front和rear指向同一元素,所以判断队空的代码应为:

rear == NULL;
//或:
front == NULL;

两个结点类型的声明如下:

//队列元素结点
typedef struct node
{ElemType data;struct node *next;
}LQueueNode;
//首尾指针结点
typedef struct
{LQueueNode *front;LQueueNode *rear;
}LinkQueue;

数据结构_队列:从普通队列到循环(circular)队列相关推荐

  1. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

  2. 【数据结构】队列-顺序队列、循环队列、链队、双端队列

    定义 队列是只允许在一端进行插入,而在另一端进行删除的线性表. 队头(Front):允许删除的一端,又称为队首. 队尾(Rear): 允许插入的一端. 先进入队列的元素必然先离开队列,即先进先出(Fi ...

  3. #中队列的数据结构_数据结构与算法拓展(一)

    栈与队列 申明:由于篇幅限制,文章可能有些简略,如果大家想要详细了解,请一定要百度一下,并阅读例题,完成习题 绪言:计算机科学在过去的数十年内发展飞速,各种新颖的技术纷至沓来:5G,VR,AI:大数据 ...

  4. 【霍洛维兹数据结构】栈和队列 | 动态循环队列 | 迷宫问题 | 表达式 | 多重栈多重队列

    前言: 最近在读霍罗维兹的<数据结构基础>(Fundamentals of Data Structures in C),本篇博客为阅读笔记和知识总结. 目录 Ⅰ. 栈(STACKS) 0x ...

  5. 队列的基本操作c语言代码大全,数据结构――队列(循环队列)的基本操作(实现链队列逐一取出c语言代码)...

    队列 队列是一种重要的线性结构,与栈相同也需要顺序表或者链表作为基础.队列是先进先出(first in first out)FIFO的线性表. 所有数据从队列的一端进入,从另一端离开. 队列中允许插入 ...

  6. abap判断包含字符当中包含小数点_剑指Offer整理3 -- 栈和队列 + 数学和字符串

    专题3 栈和队列 + 数学和字符串 专题3-1 栈和队列 1. 栈的压入弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字 ...

  7. Java数据结构与算法(第四章栈和队列)

    2019独角兽企业重金招聘Python工程师标准>>> 本章涉及的三种数据存储类型:栈.队列和优先级队列. 不同类型的结构 程序员的工具 数组是已经介绍过的数据存储结构,和其他结构( ...

  8. 学习JavaScript数据结构与算法(一):栈与队列

    本系列的第一篇文章: 学习JavaScript数据结构与算法(一),栈与队列 第二篇文章:学习JavaScript数据结构与算法(二):链表 第三篇文章:学习JavaScript数据结构与算法(三): ...

  9. JS 数据结构之旅 :通过JS实现栈、队列、二叉树、二分搜索树、AVL树、Trie树、并查集树、堆

    JS 数据结构之旅 栈 概念 栈是一个线性结构,在计算机中是一个相当常见的数据结构. 栈的特点是只能在某一端添加或删除数据,遵循先进后出的原则 实现 每种数据结构都可以用很多种方式来实现,其实可以把栈 ...

  10. 【Java数据结构与算法】第一章 稀疏数组和队列

    第一章 稀疏数组和队列 文章目录 第一章 稀疏数组和队列 一.线性结构和非线性结构 1.线性结构 2.非线性结构 二.稀疏数组 三.队列 1.队列 2.环形队列 一.线性结构和非线性结构 1.线性结构 ...

最新文章

  1. Java学习笔记27
  2. 数据结构 - 二叉排序树
  3. Cento7 PHP5.6 升级 PHP7.0.0
  4. VsCode 配置 C/C++ 开发环境,真的很简单
  5. oracle中noguarantee,关于undo guarantee
  6. 被骂后,才知道找的年终总结模板都是错的
  7. tablueau地图标记圆形_高德地图实现自定义小蓝点 自定义点标记 绘制多边形/圆形区域 根据地图的移动显示或者隐藏自定义点标记的相关实现...
  8. CoreData 从入门到精通(五)CoreData 和 TableView 结合
  9. 如何查电脑ip地址_摄像机地址不对连不上网?教你快速更改IP地址
  10. MVC.NET:提供对字体文件.woff的访问
  11. 对话框的数据交换--MFC深入浅出
  12. 万兆交换机用什么网线_现在国内没有万兆宽带,那为什么有万兆网线呢?
  13. DISCUZ论坛管理员密码破解
  14. 深入理解Builder模式(转载)
  15. 如何做一个企业网站制作
  16. 20230206 作业
  17. anaconda中的包如何传到pycharm中使用?
  18. 如何查找qq看点里用户的qq号
  19. 同步已有数据库到Django框架报错
  20. 基于W5500的实时远程温湿度监控系统

热门文章

  1. 网络通 永久免费 内网端口映射
  2. 实现一个简单的trim函数,用于去除一个字符串,头部和尾部的空白字符
  3. 【Android数据存储】ContentProvider详细介绍(附实例源码)
  4. 黑马程序员_图形用户界面GUI_简单应用
  5. w3cshool之JavaScript对象_Date
  6. 基于python实现利用DEM数据计算坡度、坡向
  7. Centos7下磁盘空间的扩容(超详细)
  8. 【264期】面试官问:Spring Boot 启动时自动执行代码方式有哪几种?解释一二!...
  9. 图解 | 工信部网络与数据安全57项“执法事项清单”来了
  10. 自采集电脑壁纸网站PHP源码vV2.0+自适应WAP端