数据结构——队列

【数据结构】队列(顺序队列、循环队列、链队列) 文章目录 前言 一、队列的定义 二、队列的顺序存储结构 1.顺序队列的定义 2.循环队列定义 3.循环队列的基本操作 三、队列的链式存储结构 1.链队列的定义 2.链队列的基本操作 前言 队列也是一种线性表,其特殊性在于队列的基本操作是线性表的子集。队列按“先进先出”的规则进行操作,故称其为操作受限的线性表。 一、队列的定义 队列(queue)是只允许在一端进行插入操作,在另一端进行删除操作的线性表,简称“队”。 队列是一种先进先出(First In First Out)的 阅读详情

概述


队列:只允许在一段进行插入删除操作,而在另一端进行删除操作的线性表。
队列是一种先进先出(FIFO)的线性表,允许插入的一端为队尾,允许插入的一端为队头。

循环队列


头尾相接的顺序存储结构为循环队列。
为防止溢出,通常保留一个空闲单元在队满时。

队满的条件:
(队尾 + 1) %队列长度 = 队头
通用的队长值为:
(队尾 - 队头 + 队列长度) % 队列长度 

C定义


typedef int QElemType;
typedef struct
{
    QElemType data[MAXSIZE];
    int front;
    int rear;
}SqQueue;


入队操作


int EnQueue(SqQueue *Q, QElemType e)
{
    if ((Q->rear + 1) % MAXSIZE == Q->front) {
        return 0;
    }
    Q->data[Q->rear] = e;
    Q->rear = (Q->rear + 1) % MAXSIZE;
    return 1;
}


出队操作


int DeQueue(SqQueue *Q, QElemType *e)
{
    if (Q->rear == Q->front) {
        return 0;
    }
    *e = Q->data[Q->front];
    Q->front = (Q->front + 1) % MAXSIZE;
    return 1;
}


链队列


特殊的单链表:尾进头出

C定义


typedef struct QNode
{
    QElemType data;
    struct QNode *next;
}QNode, *QueuePtr;

typedef struct {
    QueuePtr front,rear;
}LinkQueue;


入队操作


int EnLinkQueue(LinkQueue *Q, QElemType e)
{
    QueuePtr s = (QueuePtr)malloc(sizeof(QNode));
    s->data = e;
    s->next = NULL;
    Q->rear->next = s;
    Q->rear = s;
    return 1;
}


出队操作


int DeLinkQueue(LinkQueue *Q, QElemType *e)
{
    QueuePtr p;
    if (Q->front == Q->rear) {
        return 0;
    }
    p = Q->front->next;
    *e = p->data;
    Q->front->next = p->next;
    if (Q->rear == p) {
        Q->rear = Q->front;
    }
    free(p);
    return 1;
}


总结


同大多数顺序和链式数据结构一样,如果队列长度在预知可控范围内,推荐使用循环队列;
如果不能控制队列长度,则推荐使用链式队列。

【数据结构】——队列 队列(Queue)的抽象数据结构类型 //基本操作: InitQueue (&Q) //构造一个空队列Q。 //以下前提条件为队列已经存在 Des t royQueue (&Q) //队列Q被销毁, 不再存在。 ClearQueue (&Q) //将Q清为空队列。 QueueEmpty (Q) //若Q为空队列,则返回true, 否则返回false。 QueueLength(Q) //返回Q的元素个数,即队列的长度。 EnQueue (&Q, e} // 阅读详情

相关推荐

数据结构学习:队列

数据结构与算法学习:队列

kkbbaaii的博客 1109

数据结构_队列

队列类似于日常生活中的排队,它也是一种特殊的线性表。队列和栈有相反的逻辑,但是却属于同类结构。

weixin_43853178的博客 1038

《实战指南 | MES业务顾问蓝图设计方案:避免90%项目踩坑,从战略到落地的全攻略》

《MES业务顾问蓝图设计方案》干货分享:制造业高管常遇MES系统沦为"摆设"的困境,根源在于蓝图设计阶段未抓准业务痛点。本文系统梳理了6大关键点:1)战略定位上承ERP下接设备;2)通过现场蹲点挖掘真实需求;3)构建可扩展技术架构;4)建立数据闭环管理;5)组织保障分步实施;6)持续量化KPI优化。方案强调从业务价值出发,避免"纸上谈兵",通过数据驱动实现"计划-执行-反馈"闭环,最终让MES成为企业数字化的核心资产。

「东哥说MES」 专注于MES制造执行系统,为你拆解核心架构、功能模块及与ERP/PLC的集成逻辑。提供从入门到精通的系列干货、精选行业报告与实用工具,构建你的数字化知识体系,关注我,用实战经验照亮你的数字化之路。 1334

linux r队列,Wait_Queue------linux内核等待队列机制

案例:当串口设备不可读的时候(没有数据可读),那么应用程序应该怎么办?案例:当按键设备没有操作时(按键数据不可读),那么应用程序应该怎么办?答:应用程序对设备的这种状态(数据不可用的状态),应用程序要不就轮询读取设备的数据直到读到有效的数据,当然这种方法相当的糟糕,这种操作方式其实也是一种忙等待。当然还可以通过睡眠的等待,就是当设备数据不可用时,由底层驱动来检测,检查,识别设备数据可用不可用,如果...

weixin_28846405的博客 423

Unity 代码混淆<混淆插件(Obfuscator Pro 3.9.4)>

Unity 代码混淆<混淆插件(Obfuscator Pro 3.9.4)> 插件导入项目 导入后打开OPS/Obfuscator/Obfuscator Pro Settings 打开后可以看到界面如下 可以在上面界面中选择你需要混淆的类,方法,字段,属性,事件,参数。需要混淆的程序集的选择。如果有些程序集混淆后会有问题也可以添加到白名单里不被混淆 根据自己需求取选择 这个界面是是否添加添加随机代码的 如果使用了上面的插件可以使用 插件下载网址:https://download.cs

Xing_Cheng_Yun的博客 5099

从零开始利用MATLAB进行FPGA设计(一):建立脉冲检测模型的Simulink模型2

上一期分析了MATLAB的黄金算法原理,这一期进行Simulink模块分析。

WZT725的博客 2086

关于优先级队列的实现

           这几天一直在搞关于优先级队列的实现,因为要考虑到线程的安全,所以PriorityQueue就不适用了。经朋友的指点,终于想到一个非常简单的实现方法,那就是把优先级比较好的插入一个队列,优先级低的插入另一个队列,取数的时候先在优先级高的队列上取数。这有个缺点就是如果优先级别越多的话,队列就越多。        因为要线程安全,队列采用ConcurrentLinkedQu

反ㄋ方向 . 4163

强化学习-动态规划

动态规划(dynamic programming)是程序设计算法中非常重要的内容,能够高效解决一些经典问题,例如背包问题和最短路径规划。动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到目标问题的解。动态规划会保存已解决的子问题的答案,在求解目标问题的过程中,需要这些子问题答案时就可以直接利用,避免重复计算。本章介绍如何用动态规划的思想来求解在马尔可夫决策过程中的最优策略。

qq_45481856的博客 2113

数据结构——队列的详解

队列和栈相反,队列(queue)是一种先进先出(FIFO:first in first out)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。队列和我们日常生活中的排队是一致的,最早进入队列的元素最早离开。在队列中,允许插入的一端叫队尾(tear),允许删除的一端称为队头(front)

晴空๓ 5635

解决Android UVCCamera stopPreview 报错 崩溃 闪退 问题

在使用libuvccamera库的UVCCamera时,经常在调用stopPreview关闭预览的时候,app直接崩溃闪退了,经过综合各种修改源码的方案,已解决这个问题,以下请参考: 首先找到android_usbfs.c,linux_usbfs.c两个原文件,在两个文件中都可以找到这段代码,按如下示例修改: 修改前: for (i = 0; i < num_urbs; i++) { if (urb == tpriv->iso_urbs[i]) { urb_idx = i + 1;

hanye2020的博客 3576

Allegro中调整差分对等长的步骤介绍

【代码】Allegro中调整差分对等长的步骤介绍。

qq_30882617的博客 3833

数据结构之队列

在C语言中,(Queue)是一种先进先出(FIFO, First In First Out)的数据结构。它只允许在队列 的),在另一端(队头)进行删除操作(出队)例如:医院排队挂号入队:队伍新增一个挂号的人。(应当要排在队伍最后面)出队:有一个挂完号离开队伍。(应当是队伍第一个人)

2403_84775671的博客 1272

JavaFx 教程

JavaFx 教程

2012年开始工作,全栈开发老兵,目前已是一个老师,分享这么多年的心得体会 784

【数据结构】—— 队列

队列的链式存储结构,队列的顺序存储结构(循环队列)

ElvInR的博客 3010

宇树G1开发实践--PPT汇报(遥控版)

本文介绍了一种基于遥控器交互的机器人演示控制系统。系统通过DDS中间件接收遥控器信号,采用位掩码边沿检测技术实现按键精准响应,将不同按键映射为播放控制命令(暂停/重播、跳转、跳过等)。核心交互逻辑包含主播放循环、命令处理和暂停机制,支持播放过程中的实时控制。与自动顺序播放版相比,该系统显著提升了演示灵活性,适用于需要人机互动的演讲场景。使用前需确保网络连接和设备安全,并熟悉按键功能映射。该系统实现了专业级的人机协同演示体验。

m0_47999117的博客 680

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【队列】数据结构队列的实现

队列的实现

m0_56069910的博客 1139

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【数据结构之队列系列】队列详解

前面我们学习了一种数据结构:栈,栈是一种只允许在一端尽进行插入删除的数据结构,而今天我们将学习另一种数据结构:队列,队列是一种支持在一端进行插入,在另一端进行删除的数据结构。

胡坚涛的博客 4266

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数据结构之队列详解

数据结构之队列详解 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录数据结构之队列详解前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内

艾小方的博客 2032

【数据结构】队列

队列(Queue) 是一种遵循先进先出(First In, First Out, FIFO)原则的线性数据结构,元素的插入和删除操作分别在队列的两端进行。

2301_80541270的博客 1594

数据结构中的队列_数据结构中的队列类型

数据结构中的队列Queue is an important structure for storing and retrieving data and hence is used extensively among all the data structures. Queue, just like any queue (queues for bus or tickets etc.) follows...

culing2941的博客 1323
上一篇: 算法——素数判定方法
下一篇: 数据持久化方法——Core Data
RannieR
博客等级 码龄14年 180粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值