线性表8:队列的链式存储——链队

线性表的链式存储 复习题(选择题) 现要删除指针p所指的结点,正确的语句序列是(D)。34、已知指针h指向一个带头结点的非空单循环链表,结点结构为(data,next),其中next是指向直接后继结点的指针,p是尾指针,q是临时指针。31、从一个具有n个结点的有序单链表中查找其值等于x的结点时,在查找成功的情况下,需要平均比较(D)个结点。26、在双向循环链表中,在 p 指针所指的结点后插入 q 所指向的新结点,其修改指针的操作是(C)。6、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入结点s,则执行(C) 阅读详情


从数据结构角度看,栈和队列也是线性表,只不过是操作受限的线性表。

队列:操作限制在两端的线性表,一端进行插入操作,称为队尾;另一端进行删除操作,称为队头。

1.链式队列的描述

有两组数据需要描述,结点数据和头尾指针数据。
描述结点: 数据域+next指针域
描述头尾指针: front保存队头的前一个位置,rear保存队尾的下标

typedef int datatype;

//数据的结点
typedef struct node{
	datatype data;
	struct node * next;
}Qnode, * QnodePtr;

//存放front和rear
typedef struct queue{
	QnodePtr front;//指向队头结点的前一个位置
	QnodePtr rear;//指向队尾结点
}LinkQueue, * LinkQueue_t;

2.基本操作

2.1创建空链队

在这里插入图片描述

LinkQueue_t createLinkQueue()

{
	//1.申请front和rear的空间
	LinkQueue_t Q = (LinkQueue_t)malloc(sizeof(LinkQueue));
	if(NULL == Q)
	{
		perror("malloc");
		return NULL;
	}

	//2.申请头结点的空间并交给front
	Q->front = (QnodePtr)malloc(sizeof(Qnode));
	if(NULL == Q->front)
	{
		perror("malloc");
		return NULL;
	}

	Q->front->next = NULL;
	//3.将rear也指向这个头结点
	Q->rear = Q->front;

	return Q;
}

2.2判空

int isEmpty(LinkQueue_t Q)
{
	return (Q->front == Q->rear)?1:0;
}

或者 判断一下头结点后面是不是空即可

int isEmpty(LinkQueue_t Q)
{
	return (Q->front->next == NULL)?1:0;
}

2.3入队

在这里插入图片描述

int inLinkQueue(LinkQueue_t Q, datatype x)
{
	//1.封装新结点
	QnodePtr pnew = (QnodePtr)malloc(sizeof(Qnode));
	if(NULL == pnew)
	{
		printf("入队:申请新结点空间失败\n");
		return -1;
	}

	pnew->data = x;
	pnew->next = NULL;

	//2.入队
	Q->rear->next = pnew;
	Q->rear = pnew;

	return 0;
}

2.4出队

在这里插入图片描述

int outLinkQueue(LinkQueue_t Q, datatype *x)
{
	//非空则出
	if(isEmpty(Q))
	{
		printf("队列已空");
		return -1;
	}

	//1.保存出队结点
	QnodePtr p = Q->front;
	Q->front = p->next;
	*x = Q->front->data;
	free(p);
	p = NULL;

	return 0;
}

2.5打印输出

void showLinkQueue(LinkQueue_t Q)
{
	QnodePtr p = Q->front;

	while(p->next != NULL)
	{
		printf("%d ", p->next->data);
		p = p->next;
	}
	printf("\n");
}

3.测试

	int i;
	datatype x;

	LinkQueue_t Q = createLinkQueue();
	if(NULL == Q)
	{
		printf("创建链式队列失败\n");
		return -1;
	}

	for(i = 0; i < 10; i++)
	{
		inLinkQueue(Q, i);
	}
	
#if 0
	while(!isEmpty(Q))
	{
		outLinkQueue(Q, &x);
		printf("%d ",  x);
	}
	printf("\n");
#endif

	showLinkQueue(Q);
	
    return 0;
栈与队列详解 目录申明1. 栈的定义1.1 栈的定义1.2 进栈出栈变化形式2. 线性表的抽象数据类型3. 线性表的顺序存储结构3. 1 顺序存储定义3. 2 顺序存储方式3. 3 数据长度与线性表长度区别3. 4 地址计算方法4. 顺序存储结构的插入与删除4.1 获得元素操作4.2 插入操作4.3 删除操作4.4 线性表顺序存储结构的优缺点5. 线性表的链式存储结构5.1 顺序存储结构不足的解决方法5.2 线性表链式存储结构定义5.3 头指针与头节点的异同5.4 线性表链式存储结构代码描述6. 单链表的读取7. 单链表 阅读详情

相关推荐

群晖NAS下docker安装MySql

本文将一步一步讲解如何在群晖NAS的docker中启用一个MySQL容器 , 算是初学者对问题解决的一个记录.

qq_46375248的博客 5978

头歌链队——课上练

【代码】头歌链队——课上练。

m0_62901089的博客 2111

[pcie]gen6 下 L0p

000b~100b: 触发L0p 操作流程协商工作link width 到target link width.为111b:link width 硬件动态调整。硬件动态:Device control 3 register.target link width=111b当pcie链路检测到空闲状态时,设备可以主动进入L0p状态。L0p 是pcie gen6 新引入的链路状态,是L0的子状态。(5)LINK WIDTH:当LINK WIDTH CHANGE.cmd为Request时表示请求的链路宽度。

BIG_APPLE1的博客 1679

【数据结构】建立一个链队,实现该链队的入队和出队操作。

/* 实验4:输入一组整型元素序列,建立一个链队,实现该链队的入队和出队操作。 */ #include #include #define OK 1; #define ERROR 0; typedef int Status; typedef int QElemType; typedef struct QNode{ QElemType data; struct QNode *next; }Q

NCITS的专栏 1万+

FOC-滑膜控制器SMC/滑膜观测器SMO

三相PMSM是一个非线性、强耦合的多变量控制系统,对于外界的扰动或者电机自身的参数发生变化时,传统的PI控制并不能满足实际的要求。因此可以引入滑模控制SMC,它对扰动和参数不敏感,响应速度也够快。简单来说就是,滑膜观测器就是通过采样与坐标变换得到的Ualpha,Ubeta,Ialpha,Ibeta四个参数值,获取。SMO叫滑膜观测器(Sliding Mode Observer),用于获取转子位置信息与转速信息。2、作为滑膜观测器SMO,获取电机角度与转速信息。之间的误差来设计滑膜观测器,并通过该误差。

小胡同学的工程师学习之路 1万+

AI 赋能测试全生命周期:多 Agent 协同的自动化提效方案

本文提出了一种基于Coze平台的多Agent协同测试解决方案,旨在解决软件测试中PRD解析不清晰、测试点覆盖不全、用例编写效率低、代码生成耗时等痛点。通过PRD优化、测试点生成、测试用例生成和单元测试框架生成四个Agent的协同工作,结合Cursor工具实现从需求到代码的全链路自动化。以电商平台登录模块为例,展示了从模糊PRD到标准化测试用例和可执行Java单元测试代码的完整转化流程。该方案通过AI赋能显著提升测试效率,减少人工干预,实现测试覆盖率≥95%,为快速迭代的软件研发提供了高效的测试自动化支持。

QINJIEEE的博客 1104

头歌:链栈——课上练

头歌:链栈——课上练

专注于AI领域前沿知识,业余爱好开发软件 2979

单片机毕业设计-基于STM32单片机的智能镜系统-仿真设计

可通过MQ-2监测当前烟雾浓度可通过温湿度传感器监测当前温湿度可通过光照强度传感器监测光照强度可通过蜂鸣器进行烟雾报警可通过语音识别模块进行反馈播报状态可通过按键设置阈值三个继电器控制灯、加湿、风扇标签:STM32单片机、OLED112864、DHT11、BH1750、继电器、SU-03T、MQ-2、蜂鸣器题目扩展:智能家居安防、智能大棚控制系统、智能环境检测系统项目编号:ZL-32-240604-FZ。

bsdog11的博客 968

3.3.2【链式队列 有头单向链表】

/ 定义 链式队列 结点结构体} LLN, *LL;// 定义 操作 链式队列 的结构体LL front;// 队头结点指针(LLN * front)(struct LinkListNode *)LL rear;// 队尾结点指针} LQ;

weixin_52770821的博客 349

C语言试题一之计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和

1、题目 计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和 2、源代码实现 #include <stdio.h> #include <math.h> double fun1(int n) { if (n <= 0) return 0; int i; double sum = 0.0; for (i = 1; i <= n;...

码莎拉蒂 1万+

PCL Super4PCS算法实现点云粗配准(版本一)【2025最新版】

Win11系统下实现[Super4PCS: Fast Global Pointcloud Registration via Smart Indexing一文中的配准算法。

点云侠的博客 3378

链式栈操作

存储结构不同,顺序栈是顺序存储,空间连续,用数组构建,也就是用顺序表构建栈。链式栈,链式存储,空间不连续,需要通过指针连接,也就是用链表构建。顺序栈用顺序表实现,链式栈用链表实现。顺序栈的长度受限制,而链式栈不会。操作:创建、入栈、出栈、清空。1)创建一个新的链式栈。7)判断栈有效数据长度。顺序栈和链式栈的区别?2.2 代码操作实现。

m0_74937538的博客 339

“守望先锋”网络同步分析

守望先锋”(Overwatch)是一款由暴雪娱乐开发的团队基础第一人称射击游戏(FPS),于2016年正式发布。游戏以其独特的角色设计、丰富的游戏模式和高度的团队合作性而受到广泛欢迎。类型:第一人称射击(FPS)/多人在线战斗竞技场(MOBA元素)平台玩家人数:每场比赛由两个六人队伍组成,共12名玩家。客户端/服务器模型:在这种模型中,客户端负责处理用户输入和表现逻辑,而服务器则负责游戏的核心逻辑和状态管理。客户端与服务器之间通过网络进行通信,确保游戏状态的一致性。强同步机制。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 429

探索数据结构:链式队与循环队列的模拟、实现与应用

C语言队列作为数据结构中的重要组成部分,在算法和程序设计中扮演着关键角色。本文将深入探讨C语言队列的原理、操作方法以及实际应用场景,帮助读者全面了解队列的概念和实现原理。通过学习队列的相关知识,读者将能够更好地应用队列来解决实际问题,提高程序效率和性能。

Bettysweetyaaa的博客 2539

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数学建模模型总结

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

C语言 队列(循环队列和链队初始化进出队等基本操作)

循环队列、链队的初始化、进队和出队等基本操作-----

m0_73070900的博客 2万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数据结构——线性表(链式存储结构)

链表的13种操作 实现思路和代码

qq_55869380的博客 6672

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数据结构:队列(顺序存储和链式存储)

主要介绍了队列的概念和结构,还有队列的顺序存储实现和链式存储实现的详细说明和代码实现,最后再对比队列的顺序存储结构和链式存储结构的优缺点

2301_79601095的博客 3162

队列的顺序存储与链式存储

队列就是我们日常生活中的排队,队列也是一种线性表,与堆栈相反,队列的入列必须在队尾,出列必须在队头。与一般的线性表不同,队列的操作只能在两端,一端插入一端删除,先进先出。(堆栈只能在一端进行操作,所以先进后出)。队列的存储方式这里讲两种,首先第一种是用数组的方式实现队列的顺序存储。用一个一维数组来存储队列的数据,对队列执行操作时,插入和删除分别是对数组头和数组尾进行操作,所以还要有两个变量来指示数...

大力海棠的博客 4924

【数据结构】线性表(九)队列:链式队列及其基本操作(初始化、判空、入队、出队、存取队首元素)

本文实现了一个基本的链式队列,主要包括队列的初始化、判空、入队、出队和获取队首元素等操作。

天地玄黄 魑魅魍魉 风花雪月 商角徵羽 2053

【数据结构与算法】(8):顺序队列、链式队列和循环队列

链式队列的实现,顺序队列的实现,循环队列的实现

更新C/C++,数据结构与算法,计算机视觉,深度学习,目标检测 1927

线性表数据结构-队列

我们把队列中允许插入的一端称为「队尾(rear)」;把允许删除的另一端称为「队头(front)」。当表中没有任何数据元素时,称之为「空队」「插入操作」和「删除操作」。队列的插入操作又称为「入队」。队列的删除操作又称为「出队」。简单来说,队列是一种「先进先出(First In First Out)」的线性表,简称为「FIFO 结构」。第一个方面是「线性表」。队列首先是一个线性表,队列中元素具有前驱后继的线性关系。队列中元素按照 a1,a2,...,ana_1, a_2, ... , a_na。

Raink老师的博客 1529

队列(顺序队列,循环队列,链式队列)超详细讲解

本文是队列(包括顺序队列,循环队列,栈式队列的详细讲解)

m0_56992713的博客 5725

数据结构之线性表,栈和队列

因此,为了表示每个数据元素ai与其直接后继元素ai+1之间的逻辑关系,对数据ai来说,除了存储其本身的信息之外,还需要存储一个指示其直接后继的信息(即直接后继的存储位置)。只要确定好了存储线性表的起始位置,线性表中任一数据元素都可以随机存取,所以线性表的顺序存储结构是一种随机存取的储存结构,我们通常用动态内存开辟的方法来开辟顺序表内存。采用顺序存储时,逻辑上相邻的元素,对应的物理存储位置也相邻。而采用链式存储时,逻辑上相邻的元素,物理存储位置则不一定相邻,对应的逻辑关系是通过指针链接来表示的。

2301_79407040的博客 1422

3.8队列的定义与队列的链式存储

3.8队列的定义与队列的链式存储 1、队列的定义 队列 (Queue) 是另一种限定性的线性表,它只允许在表的一端插入元素,而在另一端删除元素,所以队列具有先进先出 (Fist In Fist Out,缩写为FIFO)的特性。 在队列中,允许插入的一端叫做队尾(rear); 允许删除的一端则称为队头(front)。 队列的抽象数据类型定义 ADT Queue 数据元素:可以是任意类型的数据,但必须属于同一个数据对象。 关系:队列中数据元素之间是线性关系。 基本操作: (1) InitQueue(&a

WithoutEndFree的博客 374

【数据结构C/C++】顺序与链式队列详解(附代码)

文章目录前言一、顺序队列二、链式队列1.引入库2.读入数据总结 前言 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First Input First Ouput),的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。 既然是线性表,那么就可以分为顺序存储结构和链式存储结构。 队列存储结构的实现有以下两种方式: 顺序队列:在顺序表的基础上实现的队列结构; 链队列:在链表的基础上实现的队列结构;

Zhangsama1的博客 1万+

数据结构笔记3 队列(队列的顺序存储、链式存储)

队列(Queue):具有一定操作约束的线性表 插入和删除操作:只能在一端插入,而在另一端删除。可进行插入的一端称为队尾(Rear),可进行删除的一端称为队头(Front)。 数据插入:入队列(AddQ) 数据删除:出队列(DeleteQ) 先来先服务 先进先出:FIFO

Lora青蛙的博客 1403
上一篇: 线性表7:队列的顺序存储——顺序队列
下一篇: 二叉树的链式存储
hellohelloe
博客等级 码龄8年 18粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值