C语言学习笔记—链表(二)链表的静态添加及动态遍历

【C语言】链表 本篇文章将详细讲到有关链表的概念,链表节点,链表分类,链表的基本操作包括初始化链表,遍历链表,插入节点,删除节点,清空链表,销毁链表。 阅读详情

在这里插入图片描述

链表的静态添加及动态遍历

我们知道数组中的数据存储是有序的,而链表中的数据是无序的但是存在某种联系使之组成链表。
那么我们如果向一组数据中添加一个数据元素,对与数组来说比较的费劲,若是越界还得需要重新申请空间等方式满足数据元素的添加和存储。链表就比较简单了,只需要把对应的指针指向适合的节点地址即可。

#include <stdio.h>
//定义结构体
struct Test 
{
	int data;
	struct Test *next;//链表有一个指向自己的指针
};

int main()
{
	putchar('\n');
	//定义结构体变量
	struct Test t1 = {1,NULL};
	struct Test t2 = {2,NULL};
	struct Test t3 = {3,NULL};
	struct Test t4 = {4,NULL};
	struct Test t5 = {5,NULL};
	//指向对应节点地址形成链表
	t1.next = &t2;
	t2.next = &t3;
	t3.next = &t4;
	t4.next = &t5;
	//输出
	printf("%d %d %d %d %d \n",t1.data, t1.next->data, t1.next->next->data, t1.next->next->next->data, t1.next->next->next->next->data);
	return 0;
}

执行结果:在这里插入图片描述

我们优化一下上边程序的写法:

#include <stdio.h>
//定义结构体
struct Test 
{
	int data;
	struct Test *next;//链表有一个指向自己的指针
};
//输出链表数据
void printLink(struct Test *head)
{
	struct Test *piont = head;
	while(piont != NULL){
		printf("%d ",piont->data);
		piont = piont->next;
	}
	putchar('\n');
}
int main()
{
	
	//定义结构体变量
	struct Test t1 = {1,NULL};
	struct Test t2 = {2,NULL};
	struct Test t3 = {3,NULL};
	struct Test t4 = {4,NULL};
	struct Test t5 = {5,NULL};
	//指向对应节点地址形成链表
	t1.next = &t2;
	t2.next = &t3;
	t3.next = &t4;
	t4.next = &t5;
	//输出
	//printf("%d %d %d %d %d \n",t1.data, t1.next->data, t1.next->next->data, t1.next->next->next->data, t1.next->next->next->next->data);
	printLink(&t1);
	putchar('\n');
	
	return 0;
}

在这里插入图片描述

统计链表节点个数及链表查找

统计链表节点个数

接着用上边的例子:
思想:编写函数,设置一个计数器,通过传过来的链表头节点,查看其指向是否为空,不为空计数器加。

#include <stdio.h>
//定义结构体
struct Test 
{
	int data;
	struct Test *next;//链表有一个指向自己的指针
};

//获取列表节点数
int getLink(struct Test *head)
{
	int cnt = 0;
	struct Test *piont = head;
	while(piont != NULL){
		cnt++;
		piont = piont->next;
	}
	return cnt;
}

int main()
{
	
	//定义结构体变量
	struct Test t1 = {1,NULL};
	struct Test t2 = {2,NULL};
	struct Test t3 = {3,NULL};
	struct Test t4 = {4,NULL};
	struct Test t5 = {5,NULL};
	//指向对应节点地址形成链表
	t1.next = &t2;
	t2.next = &t3;
	t3.next = &t4;
	t4.next = &t5;
	int ret = getLink(head);
	printf("the link's is %d \n",ret);
	
	return 0;
}

执行结果:
在这里插入图片描述

链表数据查找
#include <stdio.h>
//定义结构体
struct Test 
{
	int data;
	struct Test *next;//链表有一个指向自己的指针
};
//查找数据
int searchLink(struct Test *head,int data)
{
	while(head != NULL){
		if(head->data == data){
		//如果输入的数据与链表里的某一项数据相等就返回1否则返回0
			return 1;
		}
		//跳到下一节点
		head = head->next;
	}
	return 0;
}


int main()
{
	
	//定义结构体变量
	struct Test t1 = {1,NULL};
	struct Test t2 = {2,NULL};
	struct Test t3 = {3,NULL};
	struct Test t4 = {4,NULL};
	struct Test t5 = {5,NULL};
	//指向对应节点地址形成链表
	t1.next = &t2;
	t2.next = &t3;
	t3.next = &t4;
	t4.next = &t5;
	//定义、输入数据
	int num;
	scanf("%d",&num);
	int ret = searchLink(&t1,num);
	//结果返回
	if(ret){
		printf("have %d\n",num);	
	}else{
		printf("don't have %d\n",num);
	}
	
	return 0;
}

执行结果:
输入不存在的数据:
在这里插入图片描述
存在的数据:
在这里插入图片描述

C语言链表——增删改查 链表是一种数据结构,是一种数据存放的思想 阅读详情

相关推荐

EEGLAB安装、EDF数据导入、EEG预处理(Matlab)

目录下载和安装下载安装遇到问题及解决方案导入EDF数据EEG预处理 下载和安装 下载 链接:https://pan.baidu.com/s/17eMT6B7LgZ4PyqWvD5ixmg 提取码:12gz 安装 **第一步:**将下载下来的文件解压,修改名称为eeglab,将此文件夹存放在matlab的安装目录里的toolbox文件夹下,下图是我的路径,需要拷贝到自己相对应的路径中 第二步: 打开Matlab软件,点击主页中的设置路径 设置路径 点击添加并包含子文件夹,将eeglab文件夹添加进来,保

y18771025420的博客 1万+

静态链表和动态链表的区别

静态链表和动态链表的区别: 静态链表和动态链表是线性表链式存储结构的两种不同的表示方式。 1、静态链表是用类似于数组方法实现的,是顺序的存储结构,在物理地址上是连续的,而且需要预先分配地址空间大小。所以静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针。 2、动态链表是用内存申请函数(malloc/new)动态申请内存的,所以在链表的长度上没有限制。动态链表

我的博客 5万+

国产NAS哪家强?极空间&绿联&威联通&群晖对比

随着个人数据量暴增,传统网盘空间不足和下载速度慢问题愈发凸显。新势力NAS,作为数据管理领域的璀璨新星,正以其独特的互联网设计理念,引领家庭及小型办公用户向数据存储的新纪元。它不仅仅是一款产品,更是为初学者用户量身定制的贴心伙伴。其系统界面之简洁、操作流程之直观,让人一目了然,真正实现了“即插即用”的极致便捷。同时,新势力NAS在保持专业水准的同时,更提供了多样化的扩展性配置,轻松应对各种数据存储与管理需求,让家庭及小型办公场景下的数据管理变得前所未有的简单与高效。

专注大数据、云计算、人工智能、机器人领域技术传播 3646

【C】来用课间十分钟学会小难点~动态链表~

如果你对对动态链表感到有一丝迷茫,看不太懂,不妨进来看看对新手友好的动态链表教程(还不学习是想变成这样的懒羊羊嘛)。

weixin_65540858的博客 4269

【Qualcomm高通音频】音效调试_录音文件播放有杂音,如何定位原因?

一、录音播放数据处理过程介绍 (1)TX方向 麦克风(硅麦克风或者主机体麦克风)采集模拟音频信号,经过内部CODEC芯片中的adc转换为数字信号,在经过高通音频DSP处理音效后编码为wav/aac/amr/mp3等格式文件。 (2)RX方向 音频文件经过解码、重采样还原为pcm数据,经过DSP处理音效后送到内部CODEC,然后经过DAC转换为模拟信号,送到喇叭。 二、分析步骤 1...

crow_ch的博客 5971

linux入侵排查-综合日志分析

2.分析攻击者首次成功登录web管理后台的时间 还可以知道攻击者可能是通过10.2.4.11这个跳板服务器跳过来的,然后我们继续排查,可以发现日志中POST请求大多都是1047字节,然后往后大多是300字节,POST请求的响应状态码有200和302这两个,其中的302是爆破成功后持续爆破产生的日志,再1047字节和300字节中间夹着一个978字节,就是200响应和302响应的中间。7.分析攻击者留下的持久化后门的时间和后门执行情况 排查计划任务,发现有一个计划任务还是被加密的,应该是反弹shell的。

chinese_cabbage0的博客 643

C语言—链表

【C语言】—链表 创建,遍历,增删改查 链表是一种数据结构,是一种数据存放的思想;

weixin_73588765的博客 2万+

爬虫Incapsula reese84加密案例:Etihad航空(纯算法)

爬虫Incapsula reese84加密案例:Etihad航空,本文就不再讲解如何找加密参数、定位加密参数,以及分析加密的一个过程。就直接从扣算法开始,扣算法前先看之前讲解的加密函数生成的过程,文章会一个函数一个函数的讲解扣算法。fiddler根据规则替换本地文件。调试过程中遇到部分环境不一样是正常的,具体还要根据自己调试的js为准,就像之前补环境时是有二十一个循环,这次扣算法多出一个循环,不过大部分环境是一样的第一个函数:通过document.addEventListener添加了很多事件。

老衲爱洗头的博客 1992

静态链表和动态链表

1. 静态链表和动态链表的区别: (1)静态链表放在栈区 (2)动态链表放在堆区,堆区数据必须要手工开辟,手工释放 2. 单链表定义 #include<stdio.h> #include<string.h> #include<stdlib.h> struct LinkNode { int num; //数据域 struct LinkNode *...

JCjunior的博客 2560

Java后端新人入职第一天,环境搭建,全看这篇就行了

本文主要是记录一下一个新人java后端开发来到一个新公司,如何快速完成环境搭建,本文意旨一个小时搞定所有环境搭建,让你更快加入到新环境。包括Java、Maven、Tomcat、idea、Redis、Mysql等等,还附带对应安装资源包,我这里就以目前比较流行的版本进行详细说明。

qi_ming88的博客 9279

YOLOv12环境配置,手把手教你使用YOLOv12训练自己的数据集和推理(附YOLOv12网络结构图),全文最详细教程

YOLO 系统尊嘟太卷了吧,YOLOv11 还没完明白,YOLOv12 就重磅来袭,YOLOv12 是由纽约州立大学联合中科院在 2025年2月19 日发布,从 YOLOv12 论文题目我们大概就知道做了那些更新 ,下图是YOLOv12 在 COCO 数据集上的性能表现引入区域注意力机制(area-attention):通过引入十字形窗口自我注意机制,沿水平和垂直条纹计算注意力机制,纵横交错的注意机制。如下图所示,区域注意力采用最多简单的等分方法,将特征地图垂直或水平划分为 L 个区域。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 6万+

C语言——静态链表和动态链表

超详细的静态链表和动态链表

qq_59990833的博客 1223

基于NARX和NARX-LSTM的模型辨识与MPC控制系统调试与优化

本文针对两输入单输出非线性系统,提出基于NARX和NARX-LSTM的模型辨识与MPC控制优化方案。系统输入为固定量u1和可调量u2(8.5-140),输出目标为-0.58。现有模型存在辨识精度不足、历史输出依赖过重、预测偏差等问题。解决方案包括:数据差分处理改善非平稳性、调整延迟阶数优化模型结构、引入注意力机制替代手动加权、改进损失函数消除预测偏差。MPC控制器将结合优化模型,考虑控制变量步长约束(≥2),实现输出稳定控制。通过系统性的模型调试与控制算法优化,最终形成完整的非线性系统辨识与控制框架。

huanghm88的专栏 128

C语言——链表

链表是一种数据结构,是一种数据存放的思想;链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构。

weixin_61226442的博客 5020

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

静态链表与动态链表

转载自 https://blog.youkuaiyun.com/zhengqijun_/article/details/78192888 静态链表和动态链表的区别: 静态链表和动态链表是线性表链式存储结构的两种不同的表示方式。 1、静态链表是用类似于数组方法实现的,是顺序的存储结构,在物理地址上是连续的,而且需要预先分配地址空间大小。所以静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅...

knaha的博客 3097

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

单链表的创建(静态链表,动态链表)

链表是一种很重要的数据结构,在实际工作中也有着很多的应用,这次我们先讨论一下最简单的单链表。        关于单链表的操作有很多,当然最基本的就是要创建一个单链表,对于单链表来说,可以按照类型分为静态链表和动态链表。 1.静态链表 静态链表指的是先确定节点个数,然后根据指定个数而创建的链表。既然是确定节点个数,我们首先要在程序中输入一个需要创建的节点个数,然后根据这个需要创建的节点个数,来

casky237的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【C语言】动态链表建立以及增删节点

本人学习动态链表的一些心得

DushsK的博客 2753

【C】C语言静态链表转动态链表的技术探讨与实现

本文详细探讨了C语言中静态链表转换为动态链表的过程,并通过实例代码展示了转换的具体实现。静态链表和动态链表各有优缺点,但在实际应用中,动态链表因其灵活性和高效性而更受青睐。通过本文的学习,读者可以理解并掌握将静态链表转换为动态链表的方法,以及动态链表的基本操作。希望这些内容能对读者在数据结构与算法的学习过程中提供有益的帮助。

kewaqi618的博客 1038

静态链表详解(C语言版)

7char data;int cur;}component;//将结构体数组中所有分量链接到备用链表中//初始化静态链表//向链表中插入数据,body表示链表的头结点在数组中的位置,add表示插入元素的位置,a表示要插入的数据//删除链表中含有字符a的结点//查找存储有字符elem的结点在数组的位置//将链表中的字符oldElem改为newElem//输出函数//从备用链表中摘除空闲节点的实现函数//将摘除下来的节点链接到备用链表上。

酒无忧的博客 2873

C语言实现动态链表

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 动态链表的C语言实现 结构体定义已经函数声明 节点结构体定义 typedef struct SNode{ void *pdata; ...

weixin_42617375的博客 3019

c语言——静态链表和动态链表

c语言——静态链表 链表结点类型定义 如何遍历链表 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> //链表结点类型定义 struct LinkNode { int data; struct LinkNode *next; }; void test() { struct LinkNode node1 = { 10, NULL };

mirana的专栏 407

16.链表静态添加和动态遍历

链表静态添加和动态遍历链表静态添加链表动态遍历示例 链表静态添加 直接在链表尾部加 struct Text* tn={x,NULL}; tn.next=&t(n+1) 链表动态遍历 void printLink(struct Test* phead) { struct Test* point=phead; while(point!=NULL) { printf("%d ",point->data); point=point->next; } putchar('\

黄色的拉拉的博客 204

C语言:链表中静态链表的使用

链表是一种基本的数据结构,由一系列的节点组成 ,每个节点包含数据域和一个或多个指针域,指向下一个节点(在单链表中)或前一个节点(在双链表中)。链表的特点是节点不一定在内存中是连续存储的,这使得链表在插入和删除操作上相比数组更加高效。int data;//数据域//指针域。

2401_88564278的博客 1201

静态链表和动态链表 区别

使用C语言描述静态链表和动态链表 静态链表和动态链表是线性表链式存储结构的两种不同的表示方式。 静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针,故仍具有链式存储结构的主要优点。 动态链表是相对于静态链表而言的,一般地,在描述线性表的链式存储结构时如果没有特别说明即默认描述的是动态链表。 下面给出它们的简单实现,关于线性表更为详尽的C语言的实现,可以参考http://www.cnblogs.com/choon/p/3876606.html 静态链表 .

微电子学与固体电子学-俞驰 737

C语言动态链表经典程序,C语言静态链表和动态链表

1. 静态链表结构体中的成员可以是各种类型的指针变量,当一个结构体中有一个或多个成员的基类型是本结构体类型时,则称这种结构体为“引用自身的结构体”。如:struct link{char ch;struct link *p;} a;p是一个可以指向 struct link 类型变量的指针成员。因此,a.p = &a 是合法的表达式,由此构成的存储结构如图1所示。图1 引用自身的结构体例1 一...

weixin_39972996的博客 276

基础链表(静态链表及动态链表的创建)

创建静态链表Creat_static_list()函数; 创建动态链表Creat_dynamic_list()函数;

Leeyuqq的博客 413
上一篇: C语言学习笔记—链表(一)
下一篇: C语言学习笔记—链表(三)链表的插入
Akzeptieren
博客等级 码龄8年 65粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值