数据结构——栈和队列(队列的定义、顺序队列以及链式队列的基本操作)
目录
队列(queue)的定义
顺序队——队列的顺序表示和实现
顺序队列(循环队列)的类型定义
顺序队列上溢问题的解决方法
编辑
循环队列的基本操作
队列的基本操作——队列的初始化
队列的基本操作——求队列的长度
队列的基本操作——循环队列入队
队列的基本操作——循环队列出队
队列的基本操作——取队头元素
队列的基本操作——取队尾元素
链队——队列的链式表示和实现
链队列的类型定义
链队列的基本操作
链队列的基本操作——链队列初始化
链队列的基本操作——链队列销毁
链队列的基本操作——将元素e入队
链队列的基本操作——将元素e出队
队列(queue)的定义
顺序队——队列的顺序表示和实现
- 队列和栈一样,也是限定只能在表的“端点”进行的线性表。
- 队列在插入的时候,只能在表尾进行插入,在删除的时候,只能在表头进行删除。(先进先出),表尾即队尾,表头即队头。
- 栈和队列是线性表的子集(是插入和删除位置受限的线性表)
- 由于队列的操作具有先进先出的特性,使得队列成为程序设计中解决类似排队问题的有用工具。
- 队列的逻辑结构与同线性表相同,仍为一对一关系。
- 队列的存储结构有顺序队和链队,以循环顺序队列更常见。
- 关键是掌握入队和出队操作,具体实现依顺序队或链队的不同而不同。
顺序队列(循环队列)的类型定义
- 队列的顺序表示——用一维数组base[MAXQSIZE]
#define MAXQSIZE 100 //最大队列长度
typedef struct
{QElemType* base; //初始化的动态分配存储空间int front; //头指针(队头元素的下标)int rear; //尾指针(队尾元素的下标)
}SqQueue;
顺序队列上溢问题的解决方法
初始:front = rear = 0
入队:base[rear] = x; rear++;
出队:x = base[front]; front++;
空队标志:front == rear
上面的假设存在什么问题呢?有下面的两种情况:


解决上溢出的方法
1、将队中元素依次向队头方向移动。
缺点:浪费时间,每移动一次,队中元素都要移动。
2、将队空间设想成一个循环的表,即分配给队列的m个存储单元可以循环使用,当rear为maxqsize时,若向量的开始端空着,又可以从头使用空着的空间。当front为maxqsize时,也是一样。
解决假上溢的方法——引入循环队列
base[0]接在base[MAXQSIZE-1]之后,若rear+1==M,则令rear = 0;
实现方法:利用%运算
插入元素
Q.base[Q.rear] = x; //base为动态分配的一维数组
Q.rear = (Q.rear + 1) % MAXQSIZE;
删除元素
x = Q.base[Q.front];
Q.front = (Q.front + 1) % MAXQSIZE;
将上述方法想象成循环队列,如下图:

如果这样操作的话就会出现新的问题,就是队空和队满的时候,front = rear
那么如何解决这个问题呢,我们接下面往下分析:
解决方案:
1、另外设一个标志以区别队空、队满
2、另设一个变量,记录元素个数
3、少用一个元素空间循环队列解决队满时判断方法——少用一个元素空间:

循环队列的基本操作
-
队列的基本操作——队列的初始化
#define MAXQSIZE 100
typedef int QElemType;
Status InitQueue(SqQueue& Q) //C++中的引用操作,不是单纯的值拷贝,类似给变量取别名,还是同一块内存
{Q.base = new QElemType[MAXQSIZE]; //分配数组空间,利用C++关键字new实现//.base = malloc(MAXQSIZE*sizeof(QElemType)); //C语言实现if (!Q.base)exit(OVERFLOW);Q.front = Q.rear = 0;return OK;
}
-
队列的基本操作——求队列的长度
int QueueLength(SqQueue Q)
{return ((Q.rear-Q.front+MQXQSIZE)%MAXQSIZE);
}
-
队列的基本操作——循环队列入队
Status EnQueue(SqQueue& Q, QlemType e)
{if ((Q.rear + 1) % MAXQSIZE == Q.front)return ERROR; //队满Q.base[Q.rear] = e; //新元素加入队尾Q.rear = (Q.rear + 1) % MAXQSIZE;//队尾指针+1return OK;
}
-
队列的基本操作——循环队列出队
Status EnQueue(SqQueue& Q, QlemType &e)
{if ((Q.rear = Q.front)return ERROR; //队空e = Q.base[front]; //保存队头元素Q.front = (Q.front + 1) % MAXQSIZE;//队头指针+1return OK;
}
-
队列的基本操作——取队头元素
SElemType GetHead(SqQueue Q)
{if(Q.front!=Q.rear) //队列不为空return Q.base[Q.front];//返回队头指针元素的值,队头指针不变
}
-
队列的基本操作——取队尾元素
链队——队列的链式表示和实现
若用户无法估计所用队列的长度,则宜采用链队列
链队列的类型定义
#define MAXQSIZE 100 //最大队列长度
typedef struct Qnode
{QElemType data;struct Qnode* next;
}QNode,*QueuePtr; //一个是结点类型,一个是指向结点的指针typedef struct
{QueuePtr front;//队头指针QueuePtr rear; //队尾指针
}LinkQueue; //链式队列
链队列的基本操作
-
链队列的基本操作——链队列初始化
Status InitQueue(LinkQueue& Q)
{Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));Q.front->next = NULL;return OK;
}
-
链队列的基本操作——链队列销毁

Status DestroyQueue(LinkQueue& Q)
{while (Q.front) {p = Q.front->next;//指针p指向头结点的下一结点free(Q.front); //释放头结点Q.front = p; //把指针指向的结点变为新的头结点}
}
-
链队列的基本操作——将元素e入队
Status EnQueue(LinkQueue& Q, QElemType e) {p = (QueuePtr)malloc(sizeof(QNode));if (!p) exit(OVERFLOW);p->data = e;p->next = NULL;Q.rear->next = p;Q.rear = p;return OK;
}
-
链队列的基本操作——将元素e出队
思路:
p=Q.front->next; //暂存头结点的下一个,也就是第一结点
e=p->data; //将要删除的队头的数据存下来
Q.front->next=p->next; //将头结点指向第二结点
delete p; //释放要删除的元素的内存空间代码实现:
Status DeQueue (LinkQueue &Q,QElemType &e)
{if(Q.front==Q.rear) return ERROR;p=Q.front->next;e=p->data;Q.front->next=p->next;if(Q.rear==p) Q.rear=Q.front;delete p;return OK;
}
-
链队列的基本操作——求链队列的队头元素
Status GetHead (LinkQueue Q QElemType &e)
{if(Q.front==Q.rear) return ERROR;e=Q.front->next->data;return OK;
}
相关文章:
数据结构——栈和队列(队列的定义、顺序队列以及链式队列的基本操作)
目录 队列(queue)的定义 顺序队——队列的顺序表示和实现 顺序队列(循环队列)的类型定义 顺序队列上溢问题的解决方法 编辑 循环队列的基本操作 队列的基本操作——队列的初始化 队列的基本操作——求队列的长度 队列的…...
el-table 的单元格 + 图表 + 排序
<el-table border :data"tableDataThree" height"370px" style"width: 100%"><el-table-column :key"activeName 8" width"50" type"index" label"序号" align"center"></el…...
FPGA第 9 篇,Verilog 中的关键字和基数
前言 在 Verilog 中,关键字(Keywords)和基数(Radix)是语言的重要组成部分,它们有助于描述和定义硬件设计。上期分享了 Verilog 的基本使用,以及数据类型、逻辑值和算数运算符的简单应用&#x…...
什么是单元测试?怎么做?
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是单元测试? 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小…...
论文复现--基于LeNet网络结构的数字识别
前言 一直就听说学习深度学习无非就是看论文,然后复现,不断循环,这段时间也看了好几篇论文(虽然都是简单的),但是对于我一个人自学,复现成功,我感觉还是挺开心的 本人初学看论文的思路:聚焦网络…...
Vue3 响应式工具函数isRef()、unref()、isReactive()、isReadonly()、isProxy()
isRef() isRef():检查某个值是否为 ref。 isRef函数接收一个参数,即要判断的值。如果该参数是由ref创建的响应式对象,则返回true;否则,返回false。 import { ref, isRef } from vue const normalValue 这是一个普通…...
数据结构之简单选择排序介绍与举例
简单选择排序 简单选择排序是一种排序算法,其基本思想是:通过n-i次关键字间的比较,从n-i1个记录中选出关键字最小的记录,并和第i个记录交换之。 举例: 给定数组 [64, 25, 12, 22, 11],进行简单选择排序。…...
九、Redis 的实际使用与Redis的设计
一、多级缓存架构 在线上系统中,一定不会单纯的只部署一个Redis集群,而是使用Redis结合其他的多级缓存应用进行架构。 使用多级缓存架构的优点就是可以使不同类型的数据分布在不同的应用中,比如redis的热点key可以存储到nginx本地缓存、服务…...
乔拓云模板助力,微信小程序快速上线无需愁备案
想要快速打造并上线自己的微信小程序吗?乔拓云平台是您的不二之选!无需担心复杂的备案流程,乔拓云提供免费服务,远程协助您轻松完成微信小程序的备案工作。 只需简单几步,您的小程序就能闪亮登场:首先&…...
Android命令行查看CPU频率和温度
在 Android 设备上,你可以通过命令行工具 adb 来查看 CPU 温度和 CPU 频率,并确定是否有降频情况。以下是具体步骤: 1. 查看 CPU 频率 你可以使用以下命令来查看 CPU 各个核心的当前频率: adb shell cat /sys/devices/system/c…...
力扣: 翻转字符串里的单词
文章目录 需求分析代码结尾 需求 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:输入字符…...
Wophp靶场寻找漏洞练习
1.命令执行漏洞 打开网站划到最下,此处的输入框存在任意命令执行漏洞 输入命令whoami 2.SQL注入 搜索框存在SQL注入,类型为整数型 最终结果可以找到管理员账户和密码 3.任意文件上传漏洞 在进入管理员后台后,上传木马文件 访问该文件&…...
国内智能运维厂商月度动态 202408
作为市场人员,虽然也添加了各类行业媒体、同行厂商的关注,但被同事问起业内动向时,常常也是记忆模糊、拍破脑袋也说不完整一件事。 所以找机会翻看了一下各大厂商的公号,先做个简单的8月汇总。 格式暂时是这样的: 整…...
C++ 左值与右值浅谈
左值与右值 序言概念左值和右值的划分理解右值引用常量左值引用与右值引用 移动语义引用折叠完美转发 参考资料 序言 虽然平常都算是了解左值,右值的用法,但是好记性不如烂笔头,记下来供大家评鉴,有错改错,有善赞善&a…...
oracle 如何查死锁
在Oracle中查看死锁通常涉及查询数据字典视图和动态性能视图。以下是一个基本的查询示例,用于检测和显示最近的死锁: SELECT dd.inst_id, dd.name, o.object_id, o.object_type, s.sid, s.serial#, s.username, p.spid, s.program,d.xidusn,d.xidslot,d…...
如何编写ChatGPT提示词
为ChatGPT编写有效的提示需要实施几个关键策略,以使文本到文本生成 AI 工具产生所需的输出。您可以使用 ChatGPT 提示(也称为 ChatGPT 命令)来增强您的工作或提高您在各个行业的表现。例如,营销人员可以提示 ChatGPT 为社交媒体帖…...
java项目之基于Spring Boot智能无人仓库管理源码(springboot+vue)
项目简介 智能无人仓库管理实现了以下功能: 基于Spring Boot智能无人仓库管理的主要使用者分为: 管理员的功能有:员工信息的查询管理,可以删除员工信息、修改员工信息、新增员工信息 💕💕作者:…...
大厂前端常见的笔试题目
https://zhuanlan.zhihu.com/p/488383397前端面试手写题目总结-CSDN博客 大厂前端面试中常见的手写代码题目涵盖了多个方面,包括但不限于算法、数据结构、JavaScript 基础知识、DOM 操作、异步编程等。以下是一些常见的手写代码题目及其简要说明: 1. 排…...
网络插件 Cilium 更换 Calico
网络插件 Cilium 更换 Calico 集群使用 submariner ,通过网络检测发现 Cilium 插件可能兼容性不太好 subctl diagnose allCilium 彻底卸载 helm uninstall cilium -n kube-system# 检查集群中的所有 CNI 插件(集群的每个节点都需要删除) s…...
SpringSecurity原理解析(二):认证流程
1、SpringSecurity认证流程包含哪几个子流程? 1)账号验证 2)密码验证 3)记住我—>Cookie记录 4)登录成功—>页面跳转 2、UsernamePasswordAuthenticationFilter 在SpringSecurity中处理认证逻辑是在UsernamePas…...
【ComfyUI】Qwen-Image-Edit-F2P 环境配置全攻略:Anaconda创建独立Python环境
ComfyUI Qwen-Image-Edit-F2P 环境配置全攻略:Anaconda创建独立Python环境 你是不是也遇到过这种情况:好不容易找到一个好用的AI图像编辑模型,比如Qwen-Image-Edit-F2P,兴冲冲地准备在ComfyUI里跑起来,结果第一步安装…...
Qwen2.5-Coder-1.5B代码修复实战:常见Bug自动诊断与修复
Qwen2.5-Coder-1.5B代码修复实战:常见Bug自动诊断与修复 你有没有过这样的经历?深夜赶项目,代码跑起来一堆红字,对着报错信息一头雾水,查了半天文档还是找不到问题在哪。或者,接手一个老项目,里…...
Cursor Free VIP:突破AI编程助手限制的完整解决方案
Cursor Free VIP:突破AI编程助手限制的完整解决方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial…...
2003-2024年上市公司政府补助数据+stata代码
政府补助数据2003-2024 范围:2003 - 2024年,全部A股上市公司 原始数据来源于国泰安,有计算代码和原始数据,可复现出计算结果 政府补贴,政府补助,政府津贴,2024数据全 计算结果:d…...
80地理学院校2026考研复试线汇总【持续更新】
80地理学院校2026考研复试线汇总,已更新60多所高校复试线,其余学校持续更新中~武汉大学2026年地理学方向复试线:2026年中科院新疆生态与地理研究所复试线2026年中国矿业大学资源与地球科学学院复试线陕西师范大学2026年地理科学与旅游学院复试…...
Comsol 中微环谐振腔的环形波导耦合:波束包络与波动光学模块对比
Comsol微环谐振腔,环形波导耦和。 对比波束包络和波动光学两个不同模块。在光学领域,微环谐振腔因其独特的光学特性在众多应用中发挥着关键作用,比如光滤波、光传感等。而 Comsol 作为一款强大的多物理场仿真软件,为我们深入研究微…...
Mac能够连接校园网,但是无法上网
Mac电脑能够正常连接校园网,但是无法上网解决步骤:打开系统设置,网络,WI-FI,DNS把现有的删掉重置它。原因分析:应该是在使用代理时、访问什么网站被自动篡改了 DNS 设置,导致连接的 DNS 无法解析…...
Sqoop性能调优之 --fetch-size:小参数,大作用
Sqoop性能调优之 --fetch-size:小参数,大作用1. 引言:被忽视的"隐形冠军"2. 什么是 --fetch-size?2.1 基本定义2.2 核心作用3. 底层原理:从逐行到批量3.1 没有 --fetch-size 的情况(逐行读取&…...
收藏!AI大模型产品经理学习路线(2026最新),从零基础到专家,收藏这一篇就够
一、AI产品经理和和通用型产品经理的异同: 市面上不同的公司对产品经理的定位有很大的差别,一名合格的产品经理是能对软件产品整个生命周期负责的人。 思考框架相同: AI产品经理和通用型软件产品经理的底层思考框架是一样的,都是…...
测试用例设计-XMind
🚀 一、XMind 用例设计核心思路👉 和传统Excel不同,XMind强调:以“功能模块”为主干 以“用户场景”为分支 以“测试点”为叶子节点👉 本质结构:模块 → 场景 → 用例点 → 具体测试数据/预期📌…...

