【队列的顺序表示,链式表示】

news2024/12/22 23:50:31

文章目录

  • 队列的表示和实现
    • 相关术语
    • 队列的表示
    • 链队的表示
      • 链队的定义
      • 链队的初始化
      • 销毁链队列
    • 链队列的入队
      • 出栈

队列的表示和实现

相关术语

  • 队列(Queue)是仅在表尾进行插入操作,在表头进行删除操作的线性表。
  • 表尾即an端,称为队尾;表头即在a1端,称为对头。
  • 是一种先进先出的线性表。
    在这里插入图片描述
    插入元素称为入队,删除元素称为出队。
    队列的存储结构为链队或顺序对(常用循环顺序对)。

队列的表示

队列的顺序表示-----用一维数组base[MAXQSIZE]。

//定义队列
typedef struct {
	int* base;//初始化的动态分配内存空间
	int front;//头指针
	int rear;//尾指针
}SqQueue;
}

在这里插入图片描述
初始:front = rear = 0;
在这里插入图片描述
J1,J2,J3入队
入队:base[rear] = x;
rear++;
在这里插入图片描述
J1,J2出队
出队:x = base[front];
front++;
空对标志:front = rear;
在这里插入图片描述
这里的J6已经满了,J3,J4还能入队吗?
当rear=MAXQSIZE时,发生溢出。

  1. 当front = 0;
    rar = MAXQSIZE时再出队真溢出.
    在这里插入图片描述

  2. 当front!=0;rear = MAXQSIZE时,再入队,假溢出。
    在这里插入图片描述
    解决上溢的方法----引入循环队列
    base[0]接在base[MAXQSIZE-1]之后,若rear+1 == M,则令rear= 0;
    实现方法:利用模运算(mod)。
    插入元素:Q.base[Q.rear] = x;
    Q.rear = (Q.rear+1) % MAXQSIZE;
    删除元素:x = Q.base[s.front]
    Q.front = (Q.front+1) % MAXQSIZE;
    在这里插入图片描述
    这里引发了一个二义性,就是front= rear为空队列。需要进行讨论。
    循环队列解决对满时的判断方法----少用一个元素空间。
    在这里插入图片描述
    队空:front == rear;

队满:(rear+1)%MAXQSIZE == front;

链队的表示

若用户无法估计所用队列的长度,则宜采用链队列。
在这里插入图片描述

链队的定义

//链队列的类型队列
typedef struct Qnode {
	int data;
	struct Qnode* next;
}QNode,*QueuePtr;
typedef struct {
	QueuePtr front;//队头指针
	QueuePtr rear;//对尾指针
}LinkQueue;

链队的初始化

//初始化
void InitQueue(LinkQueue Q) {
	Q.front = Q.rear = new QNode;//生成新结点作为头结点,队头和队尾指针指向此结点
	Q.front->next = NULL;//将空结点的next域置空
}

销毁链队列

在这里插入图片描述

void DestroyQueue(LinkQueue Q) {
	while (Q.front)
	{
		QueuePtr p;
		p = Q.front->next;
		free(Q.front);
		Q.front = p;
	}
}

链队列的入队

在这里插入图片描述

//将元素e入队
void EnQueue(LinkQueue Q, int e) {
	QueuePtr q = new QNode;
	if (!q) {
		exit(0);
		q->data = e;
		q->next = NULL;
		Q.rear->next = p;
		Q.rear = p;
	}
}

出栈

int DeQueue(LinkQueue Q, int e) {
	if (Q.front == Q.rear) {
		return 0;
	}
	QueuePtr p = Q.front->next;
	e = p->data;
	Q.front->next = p->next;
	delete p;
	return 1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1148021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式锁其实很简单,6行代码教你实现redis分布式锁

一、前言 分布式锁是一种用于协调分布式系统中多个节点之间对共享资源进行访问控制的机制。它可以确保在分布式环境下,同一时间只有一个节点能够获取到锁,并且其他节点需要等待释放锁后才能获取。 以下是使用分布式锁的几个常见场景和原因:…

ChatGPT 驱动软件开发:AI 在软件研发全流程中的革新与实践

目录 内容简介作者简介专家推荐读者对象目录直播预告 计算机技术的发展和互联网的普及,使信息处理和传输变得更加高效,极大地改变了金融、商业、教育、娱乐等领域的运作方式。数据分析、人工智能和云计算等新兴技术,也在不断地影响和改变着各…

misc学习(4)Traffic(流量分析)-

感悟:回想起自己学的计算机网络和网络协议分析,有所感悟:计算机网络好比将一群人区分开来(局域网),为了能够使得不同部分的人能够沟通(wireshark中的数据包),就设置了网络…

高级深入--day43

通过Fiddler进行手机抓包 通过Fiddler抓包工具,可以抓取手机的网络通信,但前提是手机和电脑处于同一局域网内(WI-FI或热点),然后进行以下设置: 用Fiddler对Android应用进行抓包 打开Fiddler设置 在Conne…

DIANA算法c++实现

第一步对具有最大直径的簇中每个点计算平均相异度找出最大的点放入splinter group&#xff0c;其余放在放入splinter group 第二步 在old party里找出到splinter group中点的最近距离 < 到old party中点的最近距离的点&#xff0c;并将该点加入splinter group 重复第二步的…

共用体开发案例

有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、号码性别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务。要求用同一个表格来处理。 #include <stdio.h>struct Person {char name[32];int age;char zhiYe;char addr[32];union {int class;…

Ubuntu系统编译调试QGIS源码保姆级教程

在之前的文章中&#xff0c;我详细介绍了怎么在Windows下编译QGIS源码&#xff0c;也得到了不错的反馈。但是不足的是Windows下只能编译QGIS的Release模式和RelWithDebInfo模式&#xff0c;想要分析源码&#xff0c;“断点调试”肯定是少不了的&#xff0c;但是这两种模式虽然也…

论文写作框架示例:论软件系统建模方法及其应用

标题 前言题目要求写作框架(1)摘要(300~330字)(2)正文(2000~2500字,2200字左右为宜)(3)收尾(200字左右)前言 本章内容参考了51cto的薛老师的《软考论文高分特训与范文10篇》的内容,是帮助初学者打开写作思路的工具,而不是必须要遵循的模式。建议软考人多读多看…

集丰照明|灯光布局没做好,几百万装修也拯救不了

俗话说拍照要看灯光的位置&#xff0c;我们在装修的时候也要注重灯光的摆放&#xff0c;不然可能你花了很多钱的装修&#xff0c;结果就会因为灯光的布局不合理&#xff0c;导致效果大打折扣。 装修也是一样&#xff0c;忽略掉灯光&#xff0c;可能就会发生花了几十万&#xff…

08. 按键输入

08. 按键输入 按键原理图代码编写GPIO驱动代码按键驱动代码主函数 加上清除BSS段&#xff0c;代码不运行 按键原理图 按键KEY0连接到了UART1_CTS上。默认情况下&#xff0c;KEY0为高&#xff0c;当按下KEY0后&#xff0c;UART1_CTS为低电平 代码编写 在bsp下创建一个key和一个…

减少磁盘读/写中延迟时间的方法(交替编号,错位命名)

目录 1.延迟时间的优化空间2.交替编号3.磁盘地址结构的设计1.若物理地址结构是&#xff08;盘面号&#xff0c;柱面号&#xff0c;扇区号&#xff09;2.若物理地址结构是&#xff08;柱面号&#xff0c;盘面号&#xff0c;扇区号) 4.错位命名 关于磁盘延迟时间的概念请看博主的…

AQS 关于锁与队列的关系

前面的文章中又介绍的在争用激烈的场景下&#xff0c;使用基于CAS自旋实现的轻量级锁有两个大的问题: (1)CAS恶性空自旋会浪费大量的CPU资源。 (2)在SMP架构的CPU上会导致“总线风暴”。 解决CAS恶性空白旋的有效方式之一是以空间换时间&#xff0c;较为常见的方案有两…

leetCode 229. 多数元素 II + k值摩尔投票法 + 进阶 + 优化空间

229. 多数元素 II - 力扣&#xff08;LeetCode&#xff09; 给定一个大小为 n 的整数数组&#xff0c;找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 进阶&#xff1a;尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题。 &#xff08;1&#xff09;哈希表 class …

“RG-SMP 安全管理平台” 优化

全局添加ICO图标 管理强制重定向https <!-- \SMP\jboss\server\default\deploy\smp.war\common common_js.jsp --> <link rel"shortcut icon" href"data:image/x-icon;base64,AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAA…

通俗易懂的GPT原理简介

GPT是自然语言处理领域中最受欢迎的模型之一。GPT全称为Generative Pre-trained Transformer&#xff0c;是一种基于Transformer模型的预训练语言模型。在接下来的文章中&#xff0c;我们将详细介绍GPT的原理。 一、前置知识 在了解GPT原理之前&#xff0c;需要了解以下一些基…

【2023年冬季】华为OD统一考试(B卷)题库清单(已收录345题),又快又全的 B 卷题库大整理

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治递归…

【Linux】-进程控制(深度理解写时拷贝、exit函数、return的含义以及makefile编译多个程序)-进程创建、进程终止、进程等待、进程程序替换

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

基于SSM的品牌手机销售信息系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

dash--项目的前端展示简单基础

1.前置工作 创建虚拟环境&#xff1a; sudo apt-get install python3-venv # 安装 python3 -m venv venv # 在本目录下创建venv虚拟环境&#xff08;也是一个文件夹。如果用不到这个虚拟环境以后就rm -rf venv&#xff09; source venv/bin/activate # 激活虚拟环境临时使用清华…

精通Nginx(01)-产品概览

Nginx是当今使用最广泛的 Web 服务器之一。2021年W3Techs 宣布&#xff0c; Nginx市场份额超越 Apache HTTP Server 成为全球最常用的 Web 服务器&#xff0c;最新Web Server排名如图所示&#xff08;实际超过4亿站点实用Nginx&#xff09;。 Nginx由Igor Sysoev在2001年创建&…