链表遍历算法探究

C++图遍历算法的实现:深度优先与广度优先 🏆本文收录于「编程与技术实战」专栏,此专栏涵盖了C/C++编程、人工智能、数据结构、机器学习等技术领域的内容,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 阅读详情

1.有头结点的链表

#include <stdio.h>
#include <stdlib.h>
typedef struct Link{
	char elem;
	struct Link * next;
}link;
link * initLink();
void display(link * p);
int main(){
	link * c=initLink();
	display(c);
}
link * initLink(){
	int i;
	link * p=(link*)malloc(sizeof(link));
	link * temp=p;
	for(i=1;i<=4;i++){
		link * a=(link*)malloc(sizeof(link));
		temp->next=a;
		a->elem=i;
		a->next=NULL;
		temp=temp->next;
	}
	return p;
}
//有头结点的链表

233
(1)

void display(link * p){
	int i;
	link * a=p;
	a=a->next;
	while(a->next){
		printf("%d  ",a->elem);
		a=a->next;
	}
}

      输出结果为 1   2    3
      可以把while的条件当做一个句子放在循环的末尾。
      当循环遍历到首元结点时,首先输出首元结点的数据域,然后把a赋值为第二结点的地址。最后再进行while语句中的条件判断。While语句中判断的是第二结点的指针域是否是NULL。
      当循环到倒数第二个结点的时候,首先输出倒数第二个结点的数据域,然后把a赋值为倒数第一个结点的地址。While语句判断的是倒数第一个结点的指针域是否为NULL。判断结果是NULL。所以跳出循环。输出结果只输出到了倒数第二个结点,倒数第一个结点的数据域还没有输出。每次循环时,应当判断当前结点的指针域是否为NULL。可是上面的那个算法,却判断了下一个结点的指针域。
(2)

void display(link * p){
	int i;
	link * a=p;
	a=a->next;
	link * temp=a;
	while(temp->next){
		printf("%d  ",a->elem);
		temp=a;
		a=a->next;
	}
}

      输出结果为 1 2 3 4
      上面的算法中,temp储存了当前结点的地址。While判断的也是当前结点的指针域是否为NULL。当当前结点的指针域为NULL时,才停止输出。
(3)

void display(link * p){
	int i;
	link * a=p;
	while(a->next){
		a=a->next;
		printf("%d  ",a->elem);
	}
}

      输出结果为 1 2 3 4
      上面的算法中,输出的是当前指针域,while判断的也是当前指针域。所以算法是正确的。
(4)

void display(link * p){
	int i;
	link * a=p;
	a=a->next;
	while(a){
		printf("%d  ",a->elem);
		a=a->next;
	}
}

      上面的算法可以看为是算法(2)的升级版,输出的是当前结点的数据域,while判断的是当前结点的指针域。所以算法正确。
      思考循环的判断条件,并想想循环条件有哪些等价

2.不带有头节点的链表

#include <stdio.h>
#include <stdlib.h>
typedef struct Link{
	char elem;
	struct Link * next;
}link;
link * initLink();
void display(link * p);
int main(){
	link * c=initLink();
	display(c);
}
link * initLink(){
	int i;
	link * p=(link*)malloc(sizeof(link));
	p->elem=1;
	p->next=NULL;
	link * temp=p;
	for(i=2;i<=4;i++){
		link * a=(link*)malloc(sizeof(link));
		temp->next=a;
		a->elem=i;
		a->next=NULL;
		temp=temp->next;
	}
	return p;
}
//没有头结点的链表 

在这里插入图片描述
(1)

void display(link * p){
	link * a=p;
	while(a){
		printf("%d  ",a->elem);
		a=a->next;
	}
}

      输出结果为1 2 3 4
      上面的算法中,输出的是当前结点的数据域,while判断的是当前结点的指针域,算法正确
(2)

void display(link * p){
	link * a=p;
	link * temp=a;
	while(temp->next){
		printf("%d  ",a->elem);
		temp=a;
		a=a->next;
	}
}

      输出结果为1 2 3 4
      上面的算法中,输出的是当前结点的数据域,temp存储当前结点的地址,while判断的是当前结点的指针域,算法正确。


   综合以上的链表遍历算法分析,对于两种链表的遍历,算法:

while(a){
		printf("%d  ",a->elem);
		a=a->next;
}

         更便于记忆。有头结点的链表只需将a指针指向首元结点即可。

二叉树遍历算法全解析与实践 二叉树通常被定义为具有以下属性的数据结构:节点:一个二叉树是由节点组成的集合。每个节点包含一个值(称为节点的键值)以及两个指向其子节点的指针(或引用)。根节点:二叉树中的第一个节点,没有指向上级节点的指针。叶子节点:没有子节点的节点,即叶子节点的左右指针都为空。父节点:指向下级节点的节点。兄弟节点:有相同父节点的节点。子树:一个节点的任何子节点以及其后代组成的二叉树。 阅读详情

相关推荐

RAG——RAG 索引(文档解析技术)

本文介绍了RAG系统中文档解析的关键技术,重点分析了如何通过LangChain的Document Loaders处理多种格式文档。文章指出高质量文档解析对RAG系统效果的决定性作用,并详细讲解了PDF、TXT、Word等常见格式的解析方法。作者提供了代码示例和Gitee开源项目链接,特别强调了PDF解析的深入方案,同时介绍了相关依赖库的安装配置。文章还展示了如何定义通用文档加载方法,为开发者提供了实用的技术参考。

小志的博客 751

链接表操作:遍历、插入和删除

什么是链表?链表是一种线性数据结构,包括一系列相连的结点。在这里,每个节点都存储数据和下一个节点的地址。例如:链表有多种类型:单链表、双链表和循环链表。这里仅介绍单链表。

ntr851217的博客 2012

Unity之OpenXR+XR Interaction Toolkit实现 Gaze眼部追踪

在虚拟现实(VR)和增强现实(AR)应用中,眼动追踪是一项强大而受欢迎的技术。它可以让开发者更好地理解用户的注意力和行为,并创造出更加沉浸和智能的体验。在本文中,我们将探讨如何使用 Unity OpenXR 实现Gaze眼部追踪功能。

TxNet 1751

【数据结构】链表进阶

带头双向循环链表

hhhkkksa的博客 389

22、预条件技术:矩阵分解与多项式预条件器

本文系统介绍了预条件技术中的不完全分裂法、多项式预条件器和近似逆预条件器。内容涵盖矩阵分解的基本原理、不完全LU和Cholesky分解的实现方法、基于填充水平和阈值策略的改进技术,以及多项式和近似逆预条件器的数学基础与应用。通过算法流程图和表格对比,展示了各类预条件器的适用场景与优缺点,同时探讨了其在迭代求解中的关键作用和未来发展方向。

theta的博客 95

华为OD机试双机位A卷 - 小明减肥 (C++ & Python & JAVA & JS & GO)

华为OD机试2025双机位A卷 小明减肥,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 705

数据结构与算法(六)--链表的遍历,查询和修改,删除操作

我们了解了链表的概念以及链表底层的搭建以及向链表中添加元素的操作。本次我们继续学习链表剩余的操作:遍历,查询和修改、删除操作。

学习不止境的博客 1308

连续相位调制通信调制方法的载波同步和定时同步研究及MATLAB仿真

本文将探讨CPM调制方法中的载波同步和定时同步问题,并提供MATLAB仿真源代码。本文讨论了连续相位调制通信中的载波同步和定时同步问题,并提供了相应的MATLAB仿真源代码。通过适当的载波同步和定时同步方法,可以实现对CPM信号的准确解调。希望本文对您理解连续相位调制通信调制方法的载波同步和定时同步问题有所帮助,同时也为您提供了一些MATLAB仿真实现的思路和示例代码。在CPM系统中,载波同步的主要任务是估计接收信号的载波频率偏移和相位偏移。在CPM系统中,常用的定时同步方法是基于自相关函数的峰值检测。

2301_79331230的博客 692

数据结构中链表结构原理及其算法实现

C语言数据结构中常见的一些基础的链表操作,原来这么简单!

一笑的博客 2678

yolov8 转华为昇腾om脚本

yolov8 转华为昇腾om脚本

jacke121的专栏 1601

【WorkBuddy专栏43】如何利用WorkBuddy开发一个PC网站(上)——环境选型、设计编码到部署上线

【WorkBuddy专栏43】如何利用WorkBuddy开发一个PC网站(上)——环境选型、设计编码到部署上线

AI人人懂 2237

C语言数据结构 单链表的建立、遍历、查找、插入和删除操作

链表(Linked List)是一种物理存储单元上非连续、非顺序的数据结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表由一系列结点(node,链表中每一个元素称为结点)组成,每一次为一个结构体 动态分配的内存空间,可称之为一个结点,每个结点之间可以是不连续的,但结点内是连续的。结点个数是不受限定的,可以随时删改,这是与数组相比的优点。.........

追求。 1万+

机器人外接 USB 音响完整配置指南

摘要:本文介绍了为机器人配置外接音响的方法。由于内置音响音量小且有散热噪音,建议使用Type-C接口外接音响。配置步骤包括:1)通过aplay -l命令查看音响端口信息;2)使用aplay命令测试音频播放;3)通过amixer命令设置音量。关键点在于正确识别音响的卡号(如card 2)和设备号(如device 0),并在命令中准确配置这些参数即可实现外接音响的正常使用。

m0_47999117的博客 356

线索二叉树构造及遍历算法

通过中序遍历来构造线索二叉树以及遍历线索二叉树

chenhehe11的博客 1134

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

二叉树遍历算法的应用

一、二叉树遍历算法的应用——二叉树的创建 1、按先序遍历序列建立二叉树的二叉链表 例如:已知先序序列为:ABCDEGF,按照二叉树先序方式建立可能会建立出两种不同的二叉树,如下图所示: 因此为了避免这种情况,我们可以补充一些空结点,补充空结点过后这两棵树接完全不一样了,因为补充的空结点的位置不一样。可用#号表示空结点。 2、对下图所示二叉树按下列顺序读入字符:ABC##DE#G##F### 算法描述: Status CreateBiTree(BiTree &am......

kxbdys的博客 3062

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【经典算法实现 32】图的遍历 --- 广度优先遍历算法

【经典算法实现 31】图的遍历 --- 广度优先遍历算法一、 广度优先遍历算法1.1 实现思路1.2 广度优先遍历算法代码实现二、完整代码2.1 运行结果 本文接着 《【经典算法实现 30】图的创建 — 十字链表法》, 《【经典算法实现 31】图的遍历 — 深度优先遍历算法》 本文,我们来实现图的广度优先遍历算法。 先上图 一、 广度优先遍历算法 深度优先遍历算法 与 广度优先遍历算法 最大的区别在于, 深度优先遍历算法 使用的栈,后进先出 广度优先遍历算法 使用的是队列,先进先出 1.1 实现

|~~~热爱生活、努力学习的小伙汁~~~| 3395

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

二叉树之存储结构及遍历算法【数据结构】

二叉树存储结构二叉树的顺序存储案例对应的二叉树二叉树的链式存储遍历算法递归遍历算法非递归算法二叉树遍历算法的应用案例案例树代码 二叉树存储结构 二叉树的顺序存储 按结点层次编号,依次存放。 特点:结点间关系蕴含在其存储位置中。 浪费空间,适合存满二叉树和完全二叉树。 案例 对应的二叉树 二叉树的链式存储 定义结点类型: typedef struct BiNode{ TElemT...

liudachu的博客 2255

<基于递归实现线索二叉树的构造及遍历算法探讨>

基于递归实现线索二叉树的构造及遍历算法探讨。

m0_57859086的博客 1182

Python算法系列—深度优先遍历算法【二叉树】

深度优先遍历算法之二叉树一、什么是深度优先遍历二、二叉树1. 二叉树简介2.二叉树类型3.二叉树相关术语4. 二叉树的节点代码5. 二叉树遍历顺序6.深度优先遍历和广度优先遍历三、面试题+励志 ``这不就是二叉树吗?嗯,风景都在提示我该学学二叉树了``` 一、什么是深度优先遍历 深度优先遍历算法是经典的图论算法。从某个节点v出发开始进行搜索。不断搜索直到该节点所有的边都被遍历完,当节点v所有的边...

TianYao 7922

6.4遍历算法应用

6.4遍历算法应用 二叉树的遍历运算是一个重要的基础。一是重点理解访问根结点操作的含义,二 是注意对具体的实现时是否需要考虑遍历的次序选择要求 1.输出二叉树中的结点 【算法思想】 输出二叉树中的结点并无次序要求,因此可用三种遍历算法中的任何一种 完成,只需将访问操作具体变为输出操作即可。 下面给出采用先序遍历实现的算法。 【算法描述】 /* 先序遍历输出二叉树结点, root 为指向二叉树根结点的指针 */ { if (root!=NULL) { printf (root ->da

WithoutEndFree的博客 819

建立二叉树的二叉链表存储结构并在此结构上实现二叉树的三种遍历算法

实验目的: 进一步掌握指针变量的含义;掌握二叉树的结构特征及存储实现;掌握二叉树的遍历思想及在链式存储结构上的实现。 实验条件:计算机一台,vc++6.0 实验内容与算法思想: 内容: 建立二叉树的二叉链表存储结构并在此结构上实现二叉树的三种遍历算法。 算法思想: 创建一个二叉链表的二叉树结构体,data指向该结点的信息,LChild指向左孩子,RChlid指向右孩子。用先序遍历序列创建二叉树,再分别创建递归先序、中序、后序遍历二叉树,并进行输出。其中T指向二叉树(或某一子树)根节点的指针,其中再主函数中定

Alan_King79的博客 3932

树形结构--二叉树的遍历算法应用(十九)

若有错误,欢迎指正批评,欢迎评论。 每文一句:欲戴王冠,必承其重。哪有什么好命天赐,不都是一路披荆斩棘才换来的。

花狗Fdog的博客 1737

先序遍历算法的2种实现方式(C语言完整实现)

所谓先序遍历,指的是从根结点出发,按照以下步骤访问二叉举个简单的例子,下图是一棵二叉树:图 1 二叉树先序遍历这棵二叉树的过程是:访问根节点 1;进入 1 的左子树,执行同样的步骤:访问结点 2;进入 2 的左子树,执行同样的步骤:访问结点 4;结点 4 没有左子树;结点 4 没有右子树;进入 2 的右子树,执行同样的步骤:访问结点 5;结点 5 没有左子树;结点 5 没有右子树;进入 1 的右子树,执行同样的步骤:访问结点 3;

zdoeo的博客 1691

图的存储结构及遍历算法

一、图的存储结构 1.1 邻接矩阵     图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。     设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为:          看一个实例,下图左就是一个无向图。          从上面可以看出,无向图的边数组是一

执迷不悔 4421

第7章树和二叉树:二叉树遍历算法的应用

本文介绍了二叉树的几种基本操作算法:1) 二叉链表的创建,通过先序遍历递归构建,用"#"表示空结点;2) 二叉树复制,采用类似先序遍历的递归方式;3) 计算二叉树深度,基于后序遍历比较左右子树深度;4) 统计结点总数,递归累加左右子树结点;5) 统计不同度(0,1,2)的结点数量,通过递归遍历判断子结点情况。所有算法均采用递归实现,体现了二叉树操作的典型递归特性。

计算机科学、人工智能、数据分析和大数据方向的研发和教学。 763

图遍历算法全面解析:深度优先与广度优先的优劣对比

在当今信息化时代,图数据结构在各种复杂问题的解决中扮演着至关重要的角色。无论是社交网络分析、路径规划,还是网络爬虫,图的遍历算法如深度优先搜索(DFS)和广度优先搜索(BFS)都广泛应用于这些领域。本篇文章将详细介绍图的基础知识,并深入探讨两种主要的图遍历算法——DFS和BFS的原理、实现及常见问题。同时,文章还将分享如何在实际项目中根据应用场景选择合适的算法,并结合示例代码展示其高效应用。无论你是图数据结构的初学者,还是需要解决复杂问题的开发者,都能从中获得实用的技术启示。

吴师兄大模型的博客 992
上一篇: C语言结构体指针
下一篇: C语言makefile文件
cookie_plus
博客等级 码龄7年 52粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值