news 2026/6/16 14:23:29

顺序存储实现队列,增加额外的变量和不增加额外的变量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
顺序存储实现队列,增加额外的变量和不增加额外的变量

(一).不增加结构体中的额外变量进行队列的实现,队列是输入输入受限的线性表,只能从一端入队,从另一端出队

1.先创建一个结构体变量,结构体创建的时候是匿名声明,然后重新更改一个名字SeqQueue,里面有两个变量,一个对头front,一个队尾指针rear,两个指针对应数组下标,出队操作只和front有关,入队和rear有关

#include<stdio.h> #define MAXSIZE 10 typedef struct { int data[MAXSIZE];//数据 int front;//front对头 int rear;//rear队尾 }SeqQueue;//queue是队列SeqQueue

2。创建一个结构体类型的变量,传递参数的时候传递指针,进行初始化函数,初始化的时候只需要将rear和front的值设置为0,同时指向下标为0元素的地方.

int InitSQueue(SeqQueue* PQ) { PQ->front = PQ->rear = 0;//对头和队尾同时指向0数组,即将插入数据的那个数组 }

3.因为初始化的时候对头元素和队尾元素指向头一个空间,所以队列判空的条件是rear和front的值相等。

int Empty(SeqQueue* PQ) { return PQ->front == PQ->rear; }

4.入队操作也就是EnQueue操作,入队之前需要判断一下队列是不是满的,因为我们判断队空的条件是rear==front,所以队满的条件就要牺牲一个存储空间使得rear+1=front,rear指向的是即将插入数据的下标,一个数组有从对头元素出队,当数组前面的数据已经是空的但是队列已经跑到最大元素的位置了,如果让其从零开始继续入队,需要Mod运算,所以队列满的情况就是(rear+1)%Max==front,牺牲了一个存储空间,另外需要注意的是,rear指的是即将插入的数据,所以再进行插入操作的时候,先插入数据,然后再让rear增加1,同时也需要模运算,使得rear从头开始继续入队

int EnQueue(SeqQueue* PQ, int elem)//EnQueue入队操作 { if ((PQ->rear + 1) % MAXSIZE == PQ->front)//浪费了个内存空间 return 1; PQ->data[PQ->rear] = elem; PQ->rear =(PQ->rear+1)%MAXSIZE;//达到逻辑上的循环队列 return 0; }

5出队操作DeQueue,由于front指的是要出队的元素,所以出队的时候先把值赋值给临时变量,再自增1,自增的同时也需要模运算,达到逻辑上的循环

int EnQueue(SeqQueue* PQ, int elem)//EnQueue入队操作 { if ((PQ->rear + 1) % MAXSIZE == PQ->front)//浪费了个内存空间 return 1; PQ->data[PQ->rear] = elem; PQ->rear =(PQ->rear+1)%MAXSIZE;//达到逻辑上的循环队列 return 0; }

6.计算队列中有几个元素,如果一个队列不是循环,那么只需要rear-front即可,我们实现的是循环队列,所以在这个基础上我们应该这样做(rear+Maxsize-front)%Maxsize,得到循环队列的元素个数,这个运算,不管rear数组下标大于front的,还是小于的都是成立的,可以朝着这个方向多想几个数据进行验证

int Len(SeqQueue* PQ) { return (PQ->rear + MAXSIZE - PQ->front) % MAXSIZE; }

(二).多一个size变量,这个变量用来记录当前队列的容量,当队列等于0时为空队列,当队列为maxsize时为最大值,这个时候不能入队,多一个变量多了很多好处,最关键的一个就是,不用浪费一个空间进行操作了,每个空间都得到的利用,而且队列当前多少元素直接返回size的值即可

1.入队操作只需要判断队的size最大值即可

int EnQueue(SeqQueue*PQ,int elem) { if (PQ->size == MAXSIZE)//等于最大的容量说明此时队列已满 return 1; PQ->data[PQ->rear] = elem;//rear指的就是即将插入数据的那个数组,先入队再加加 PQ->size += 1;//size增加一个 PQ->rear = (PQ->rear + 1) % MAXSIZE;//和没有增加条件的一样,还是要让队列达到逻辑上的循环 return 0; }

2。出队只看四则是不是等于0即可,,特别注意当等于0的时候还继续出队的话会引起下溢出

int DeQueue(SeqQueue* PQ) { if (PQ->size == 0)//说明这个时候队列没有元素不能出队,回引起下溢出 return 1; int temp = PQ->data[PQ->front]; PQ->front = (1 + PQ->front) % MAXSIZE;//同样增加的时候需要关注取模运算 return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 4:34:45

Latex交叉引用功能:关联PyTorch图表与正文

LaTeX交叉引用与PyTorch-CUDA镜像协同实践&#xff1a;构建可复现的AI科研工作流 在深度学习研究日益工程化的今天&#xff0c;一篇高质量论文的价值不仅体现在模型性能上&#xff0c;更在于其结果的可追溯性、实验的可复现性以及文档的专业表达。然而现实中&#xff0c;许多团…

作者头像 李华
网站建设 2026/6/10 16:50:22

基于Uniapp + SpringBoot + Vue的智能健康饮食计划系统设计

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…

作者头像 李华
网站建设 2026/6/15 1:36:11

基于游戏化和AI技术的适老化电商平台设计与实现

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…

作者头像 李华
网站建设 2026/6/15 13:20:28

利率高达36%!微博借钱被指严重超出助贷新规标准

在当今金融科技蓬勃发展的背景下&#xff0c;微博借钱作为微博平台旗下的增值服务&#xff0c;本应成为用户便捷获取资金的渠道&#xff0c;然而&#xff0c;其实际运营中暴露出的种种问题&#xff0c;却让众多借款人深陷困境&#xff0c;引发了广泛的负面反响。微博借钱被指综…

作者头像 李华
网站建设 2026/6/14 6:10:33

AI日报 - 2025年12月15日

#本文由AI生成 &#x1f310; 一、【行业深度】 1. &#x1f31f; Skywork APP 5.0上线&#xff1a;实现多Agent并行协作&#xff0c;一键生成汇报材料 &#x1f525; 热点聚焦&#xff1a; 国产大模型厂商Skywork正式发布移动端APP 5.0版本&#xff0c;首次在消费级应用中实现…

作者头像 李华
网站建设 2026/6/14 9:39:21

中海达“天空地水工”一体化监测体系,赋能安徽水利数字化变革

为加快推进水利科技创新与应用转化&#xff0c;助力安徽水利高质量发展&#xff0c;近日&#xff0c;由安徽省水利技术转移中心主办的“2025年安徽省水利先进实用技术&#xff08;产品&#xff09;推介会”在合肥顺利召开。本次会议聚焦水利科技成果对接与行业数字化转型。中海…

作者头像 李华