循环队列

【数据结构】在运行循环队列的顺序表示是基本操作程序时出现错误:“QueueTraverse”: 不能将参数 2 从“QElemType”转换为“int (__cdecl *)(QElemType)” 在运行循环队列的顺序表示是基本操作程序时出现错误:“QueueTraverse”: 不能将参数 2 从“QElemType”转换为“int (__cdecl *)(QElemType)” 请大家指教! 定义时:Status QueueTraverse(SqQueue *Q,void((*visit)(QElemType e)) ) 调用时:QueueTraverse(&Q,d); 完整... 阅读详情
  • 理解上:我对于队列的一些理解:First on first off,先进先出,rear在尾,移动一次添加一个,front在头,移动一次减一个。

下面这个图,front和rear都是向右移动,很好理解。

  • 代码实现上:那么现在的难点就是在代码的实现上,当然,多练肯定可以会。加油!

#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXQSIZE 100//队列最大长度
typedef int Status;//Status其实就是int
typedef int QElemType;//QElemType也是int
typedef struct 
{
    QElemType *base;//用来存储
    int front;//队头
    int rear;//队尾
}SqQueue;

Status InitQueue(SqQueue &Q)//创建链表
{
    Q.base=(QElemTyoe *)malloc(MAXQSIZE*sizeof(QElemType));//malloc来申请空间
    If(!Q.base)//若分配失败,退出
        exit(OVERFLOW);
    Q.front=Q.rear=0;//初始值
    return OK;//成功创建则返回OK
}

Status ClearQueue(SqQueue &Q)//清为空队列
{
    if(!Q.base)
        exit(OVERFLOW);//未申请到空间则清除队列失败
    Q.rear=Q.front;//这个操作就行了嘿嘿
    return OK;//若成功清空队列则返回OK
}

Status QueueEmpty(SqQueue Q)
{
    if(Q.front==Q.rear)//若front=rear则队列为空
        return TRUE;
    else
        return FLASE;
}

int QueueLength(SqQueue Q)//求长度
{
    return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;//循环队列取模来求长度,
}

Status EnQueue(SqQueue Q,int e)//向队列队尾中插入元素
{
    if((Q.rear+1)%MAXQSIZE==Q.front)//若队列满则插入不了元素
        return ERROR;
    Q.base[Q.front]=e;//将e存入base数组中
    Q.rear=(Q.rear+1)%MAXQSIZE;//rear移一位
    return OK;//成功插入则返回OK
}

Status DeQueue(SqQueue &Q,QElemType &e)//删除元素并可以返回被删除的元素
{
    if(QueueEmpty(Q))return ERROR;//若队列为空则删除不了
    e=Q.base[Q.front];
    Q.front=(Q.front+1)%MAXQSIZE;//front移动则删除元素
    return OK;//成功删除则返回OK
}


int main()
{
    
    return 0;
}

 

【数据结构】循环队列 队列又称为"先进先出(FIFO)"线性表:插入操作只能在队尾进行,删除操作只能在队首进行。而循环队列是队列的一种特殊形式,循环队列(也被称为环形队列)是一种线性数据结构,其操作表现基于先进先出原则,并且队尾被连接在队首之后以形成一个循环。循环队列固定大小,空间能够重复利用。循环队列可以用数组或者链表实现,那下面我们来分析一下哪种方式更好:当我们想使用链表实现时,假设我们想要开辟的队列长度为k = 4;front表示队头指针,rear表示队尾指针:由上图可知,当rear和front 都指向同一个位置时队列为空 阅读详情

相关推荐

JAVA循环队列

关于自定义循环队列的实现原理和要点可以参见之前的博文系列:循环队列及C语言实现。这里主要对JAVA下的具体实现方式与原理进行说明。 一、JAVA 中已经自带了 Queue、DQueue、ArrayList、LinkedList 等常用的数据结构,为什么还要单独实现循环队列? 之所以使用自定义循环队列,出发点还是基于我们在实际应用中对于数据处理各种各样的需求。使用自定义数据结构的好处就在于可以更

SoldierJazz的专栏 4574

数据结构——队列

概念 队列简称队,它也是一种运算受限的线性表,其限制仅允许在表的一端进行插入,而在表的另一端进行删除。把进行插入的一端称做队尾(rear),进行删除的一端称做队首或队头(front)——先进先出。 顺序存储 定义 队列的顺序存储结构 typedef struct { QElemType* base;//初始化的动态分配存储空间 int front;//队头元素下标,头指针 int rear;//队尾元素下标,尾指针 }SqQueue;//不是指针类型 初始:front=rear 入队:base[re

m0_56046092的博客 262

嵌入式Linux Qt/QML开发实战:从Buildroot配置到应用部署

本文详细介绍了嵌入式Linux Qt/QML开发全流程,从Buildroot系统配置、交叉编译工具链搭建到应用部署与调试。以RK3506开发板为例,提供实战指南,帮助开发者高效完成嵌入式应用开发,解决常见环境配置与性能优化问题。

m2n3o4p5的博客 229

C语言--队列的基本操作

C语言—队列的基本操作

MZYYZT的博客 5143

跟着团子学SAP CO:熟练使用结果分析码实现各个场景下收入成本的匹配(一) KKA2/CJ88

PS模块中对财务顾问最难的点在于项目结算,特别是销售型的项目结算。针对客户型项目结算我列举了以下常见的收入成本匹配的一些场景: (1)在项目执行过程中会多次开票,但由于各期成本浮动很大(如前期可能只涉及一些人工、中期全是比较金额较大的材料费),所以希望开票的时候能通过合理的一些指标进行主营业务成本与主营业务收入的匹配。 (2)项目过程中会多次开票,开票确认主营业务收入时,直接将累计发生的实际成本结转为主营业务成本。 (3)项目过程中虽多次开票,但不确认收入,所有发生的实际成本月末计算为在制品,最后项目一次性

Lucas1211的博客 9536

【LaTex】LaTex的下载与安装(2025新手小白超详细、超简洁 Windows系统)

安装地点(1)texlive的安装:首先打开下载好的安装包,找到这个文件前面缺少了一页emm我去截取其他人的作为示范然后点击安装安装时间较久,大概要一个小时左右。具体要看个人电脑性能情况。如图显示如上图,则安装成功。图中是TeXstudio 4.8.7版本针对不同操作系统和使用场景的安装包 ,区别如下:(按需求下载)

爱学习的capoo的博客 5106

数据结构之循环队列的操作

#include<iostream> #include<stdio.h> #include<stdlib.h> using namespace std; #define MAX 100 typedef int QElemType; typedef int Status; typedef struct { QElemType *base; int front;...

weixin_43424154的博客 354

STM32 Nucleo-144开发板开箱bring-up

最近做项目,用到STM32F446ZET6这款MCU,为了赶进度,前期软件需要提前开发,于是在某宝买了对应主控的官方开发板,为了避免遗忘,后面能翻出来回忆一些细节,就形成了本篇的主要内容,同时也希望能够帮助刚上手的小伙伴少走弯路,如果对你有帮助请点赞、收藏、转发,谢谢!

汽车电子软件领域知识分享 2680

数据结构第三章C语言———队列

1.什么是队列 队列是另一种操作受限的线性表,是指只允许在表的一端进行插入操作的数据结构,具有“先进先出”的特点。 队列有分为两种,循环队列和链队列 2.循环队列 下面是普通队列,但有一个问题,那就是rear和front一起移动到最上面,即使队列中没有元素也会判断为满并溢出。所以很聪明建一个循环队列就可以解决这个问题 在循环队列中,当队列为空时,有front=rear,而当所有队列空间全占满时...

qq_43813182的博客 377

Cheat Engine实战:多级指针逆向破解游戏内存的5个关键步骤(附C++模拟代码)

本文详细解析了使用Cheat Engine进行多级指针逆向破解游戏内存的完整流程。通过5个关键步骤,从定位动态地址到逐层追踪指针链,最终构建稳定指针路径。文章结合C++模拟代码,深入剖析了指针链的底层汇编原理,并提供了高级排查技巧,帮助读者掌握逆向工程中的核心内存追踪技术。

weixin_29239279的博客 307

手把手教你学Simulink——基于全桥 LLC 谐振变换器的双向 DC-DC 建模与仿真

本文详细介绍了基于Simulink的双向全桥LLC谐振变换器建模与仿真方法。内容涵盖:1)LLC谐振变换器背景与双向化挑战;2)系统架构设计及关键数学推导(FHA增益分析、双向控制逻辑);3)Simulink建模步骤(功率级搭建、PWM生成、同步整流实现);4)仿真结果分析(正向/反向工作验证、ZVS特性);5)工程实践建议(增益微调、代码生成与HIL测试)。通过手把手教学,帮助读者掌握950V↔48V双向LLC变换器的完整设计流程,实现高效率能量双向流动的同时保持软开关特性,适用于储能系统、车载充电等应用

MHD0815的博客 179

循环队列+OJ题之设计循环队列

学了普通的队列,循环队列也该拿下了

adcxhw的博客 1241

VTK 显示大量点云数据及交互(点云拾取、着色、测量等)功能

VTK (Visualization Toolkit) 是一个强大的开源可视化库,非常适合处理点云数据。下面将介绍如何使用 VTK 显示大量点云数据,并实现点云拾取、着色、测量等功能。

深之JohnChen的专栏 2001

队列文档之循环队列

循环队列就是将顺序队列臆造成一个环状的空间(实际上不是,只是把它看成是环状的),即把存储队列元素的顺序表从逻辑上视为一个环。

二木成林 8957

几种负载均衡策略(DNS、NAT、重定向、反向代理)

摘要:本文对比了四种负载均衡技术:DNS负载均衡通过域名解析分发IP,用户直连服务器;NAT负载均衡通过VIP转发流量,所有流量经过负载均衡器;HTTP重定向通过302跳转实现分流;反向代理则隐藏后端服务器,统一转发请求。DNS简单但调度不精准,NAT精准但有带宽瓶颈,HTTP重定向延迟高,反向代理性能好但需专用设备。适用场景各异,DNS适合异地分流,NAT适合内网集群,HTTP重定向适合简单分流,反向代理适合高并发场景。核心区别在于层级(3层/7层)和流量走向(直连/中转)。

echo的博客 74

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

循环队列的实现

环形队列的实现

2302_76314368的博客 3160

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

循环队列详解

这里我们用数组来模拟实现循环队列int *data;//动态数组int front;//队头指针int rear;//队尾指针//最大容量。

Forward♞的博客 8531

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

循环队列的判断

实际中我们有时还会使用一种队列叫循环队列。如操作系统课程讲解生产者消费者模型时可以就会使用循环队列。环形队列通常使用数组实现。下标最前再往前(offset小于1.定义usedSize长度;2.标记;3.浪费一个空间来区分。(b)满的循环队列为了能够更好地区分队空还是队满,我们常常认为Q.rear=Q.front为空;Q。rear=Q.front为满。

2401_86415114的博客 2278

一文读懂循环队列的实现细节

数据结构,算法,循环队列

虾米Life 2434

python循环队列

队列是一种先进先出的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头,如下图所示。普通的顺序队列我们设置队头指针(front)和队尾指针(rear)来描述队列里的数据存储位置。初始两个指针都指向0号元素,如下图所示。当入队时,rear指针向尾部移动,front指针则依旧指向首元素,如下图所示。当出队时,front指针向下一个元素移动,释放出队元素,尾指针不变,入下图所示。这就是所谓的队列“假溢出”现象,所造成得空间浪费,所以我们需要使用循环队列来解决。

HYSliuliuliu的博客 1万+

数据结构——循环队列

概念 基于队列的先进先出的原则,在确定了队列长度的前提下,另队列首尾相接而实现的一种结构。 循环队列的作用 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/design-circular-queue 题目 设置循环队列 注意事项 .

yue152152的博客 1万+

循环队列之循环队列长度和头尾指针关系

1、为什么会引入循环队列?        对于顺序队列,头指针和尾指针开始时刻都指向数组的0下标元素。当加入新元素以后,尾指针向后移动,指向最后一个元素的下一个位置。 但是尾指针不能超过数组的最大范围。当有元素删除时,头指针向后移动。但是头指针不能低于数组的0下标。这样就会引入一种“假溢出”现象, 数组中存在空余的空间,但是由于尾指针已经在最大位置,不能加入元素。 2、循环队列是什么样的队

jessica0510的博客 3万+
上一篇: 数组中的两个栈
下一篇: RoboMaster怎么设计新步兵悬挂
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值