C语言之单链表理解与应用
其实网上有好多关于单链表理解,其实知乎上有一篇写的很好,利用图形与代码结合,我觉得写的很好,大家也可以去查一下,每个人都有自己的想法与理解,这里主要看单链表概念,应用场景,举例。
1,单链表概念
单链表是一种线性数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。单链表只能从头到尾进行遍历,从头节点开始,沿着每个节点的指针逐个访问节点,直到到达最后一个节点。
在单链表中,头节点是第一个节点,它指向链表的第一个元素。最后一个节点称为尾节点,它没有指向其他节点的指针。
每个节点包含两个部分:数据部分和指针部分。数据部分存储实际的数据值,而指针部分存储下一个节点的地址。
以下是单链表的一些基本操作:
(1)插入:向链表的头部或尾部插入新节点。
(2)删除:从链表中删除一个节点。
(3)遍历:从头节点开始,逐个访问链表中的所有节点。
(4)查找:在链表中查找特定值的节点。
单链表的主要优点是它们可以动态地调整大小,因为可以在任何位置插入或删除节点。然而,单链表也有一些缺点,例如它们需要更多的内存来存储指针,并且访问链表中的元素可能需要更多的时间,因为需要从头节点开始逐个访问节点。
2,单链表适合哪些场景
(1)需要动态调整数据结构大小的场景:单链表可以动态地添加或删除节点,因此适用于需要经常修改数据结构大小的场景。
(2)需要频繁进行插入和删除操作的场景:单链表在插入和删除节点时,不需要移动其他节点,因此适用于需要进行频繁插入和删除操作的场景。
(3)需要按顺序访问数据元素的场景:单链表可以按顺序访问链表中的节点,因此适用于需要按顺序访问数据元素的场景。
需要注意的是,单链表不支持随机访问,因此如果需要随机访问数据元素的场景,可能需要使用其他数据结构,如数组或哈希表。
3 单链表的C语言代码示例,包括链表的创建、插入、删除、遍历和查找等基本操作:
#include <stdio.h>
#include <stdlib.h> // 定义链表节点结构体
struct Node { int data; struct Node* next;
}; // 创建链表节点
struct Node* createNode(int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode;
} // 在链表头部插入节点
void insertNode(struct Node** head, int data) { struct Node* newNode = createNode(data); newNode->next = *head; *head = newNode;
} // 在链表中删除指定节点
void deleteNode(struct Node** head, int data) { if (*head == NULL) { return; } if ((*head)->data == data) { *head = (*head)->next; return; } struct Node* current = *head; while (current->next != NULL && current->next->data != data) { current = current->next; } if (current->next != NULL) { current->next = current->next->next; }
} // 遍历链表并输出节点值
void printList(struct Node* head) { while (head != NULL) { printf("%d ", head->data); head = head->next; } printf("\n");
} // 在链表中查找指定节点并返回其位置,若不存在则返回-1
int findNode(struct Node* head, int data) { int position = 1; while (head != NULL) { if (head->data == data) { return position; } position++; head = head->next; } return -1;
} int main() { struct Node* head = NULL; // 初始化链表头指针为空指针 insertNode(&head, 3); // 在链表头部插入节点3 insertNode(&head, 2); // 在链表头部插入节点2 insertNode(&head, 1); // 在链表头部插入节点1 printList(head); // 输出链表:1 2 3 deleteNode(&head, 2); // 删除节点2 printList(head); // 输出链表:1 3 int position = findNode(head, 3); // 查找节点3的位置,返回2(从头节点开始计数) printf("Position of node with value 3: %d\n", position); // 输出:Position of node with value 3: 2 return 0;
}
相关文章:
C语言之单链表理解与应用
其实网上有好多关于单链表理解,其实知乎上有一篇写的很好,利用图形与代码结合,我觉得写的很好,大家也可以去查一下,每个人都有自己的想法与理解,这里主要看单链表概念,应用场景,举例…...
SpringBoot对PDF进行模板内容填充、电子签名合并
1. 依赖引入–这里只包含额外引入的包 原有项目包不含括在内 <!-- pdf编辑相关--> <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version> </dependency><de…...
Vue3快速上手笔记
Vue3快速上手 1.Vue3简介 2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王)耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址:https://github.com/vuejs/vue-next/release…...
LLM中的Prompt提示
简介 在LLM中,prompt(提示)是一个预先设定的条件,它可以限制模型自由发散,而是围绕提示内容进行展开。输入中添加prompt,可以强制模型关注特定的信息,从而提高模型在特定任务上的表现。 结构 …...
【算法Hot100系列】最长回文子串
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
KaiwuDB × 国网山东综能 | 分布式储能云边端一体化项目建设
项目背景 济南韩家峪村首个高光伏渗透率台区示范项目因其所处地理位置拥有丰富的光照资源,该区域住户 80% 以上的屋顶都安装了光伏板。仅 2022 年全年,光伏发电总量达到了百万千瓦时。 大量分布式光伏并网,在输出清洁电力的同时,…...
elasticsearch查询出现Limit of total fields 1000 has been exceeded
项目场景: 在项目中使用elasticsearch保存日志等相关数据,查询页面查询这些日志数据 问题描述 提示:这里描述项目中遇到的问题: 今天在检查日志数据时,发现数据出不来,检查后端日志,发现一直…...
TCP/IP详解——DHCP 协议
文章目录 1. DHCP 协议1.1 DHCP 概念1.2 DHCP 原理1.3 DHCP 续约1.4 DHCP 报文种类1.5 DHCP 报文格式1.6 DHCP 协议抓包分析1.6.1 Wireshark 抓包查看1.6.2 CSNAS 抓包分析 1.7 DHCP 的 Option1.8 思考 1. DHCP 协议 1.1 DHCP 概念 DHCP协议称为动态主机配置协议。 DHCP作用…...
牛客后端开发面试题3
阿里巴巴2021 1、通配符的含义 在字符串匹配时可以代替一定范围的字符。 2、死锁的基本知识 产生死锁的原因: 1.系统资源不足 2.进程运行推进方式不合理 3.分配资源不合理 (把幼儿园老师比作操作系统,幼儿园里的玩具比作系统资源,…...
Postman-脚本自动化及定时执行脚本(7)
一.postman脚本自动化(从postman至Newman可以一键执行脚本并生成报告:) Postman Newman 是一个 CLI(命令行界面)工具,可以使用它来运行 Postman 中的集合(Collection)和环境…...
基于SSM的影视企业全渠道会员管理系统(有报告)。Javaee项目
演示视频: 基于SSM的影视企业全渠道会员管理系统(有报告)。Javaee项目 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring S…...
【C++】 C++11 新特性探索:decltype 和 auto
▒ 目录 ▒ 🛫 问题描述环境 1️⃣ decltype推导变量类型推导函数返回类型 2️⃣ auto自动推导变量类型迭代器和范围循环 3️⃣ decltype 和 auto 同时使用🛬 结论📖 参考资料 🛫 问题 描述 C11 引入了一些强大的新特性ÿ…...
【Jeecg Boot 3 - 第二天】1.2、jar 包和 lib 依赖分离,部署包缩小100倍
一、场景 二、思路 三、实战 ▶ 2.1、项目 jar 包解压获取 lib config Stage 1:正常打包获取 jeecg-system-start-3.6.0.jar Stage 2:解压 获取如下文件 Stage 3:获取 lib config ▶ 2.2、获取简化版项目jar包 Stage 1࿱…...
电商平台的易聊集成:无代码开发,API连接,CRM支持
连接电商与客服:易聊的创新解决方案 在迅速变化的电子商务市场中,企业要想保持竞争力,就必须拥有高效灵活的客服体系。易聊,一家领先的AISaaS服务商,正是基于这一需求,推出了一系列创新产品。它们通过智能…...
Draw.io or diagrams.net 使用方法
0 Preface/Foreword 在工作中,经常需要用到框图,流程图,时序图,等等,draw.io可以完成以上工作。 official website:draw.io 1 Usage 1.1 VS code插件 draw.io可以扩展到VS code工具中。...
CAPL——发送自定义报文
文章目录 一、前言二、CANoe操作二、CAPL程序三、Trace结果一、前言 CAPL是CANoe自带的一个编程语言,基本语法基于C语言,通过CAPL可以发挥CANoe更高效、更强大的功能。CAPL最大的特点就是可以编程灵活的完成报文的发送,报文包括通信报文及诊断报文 本文讲述模拟一个报文周…...
接口自动化测试实操【设置断言思路】
1 断言设置思路 这里总结了我在项目中常用的5种断言方式,基本可能满足90%以上的断言场景,具体参见如下脑图: 在这里插入图片描述 下面分别解释一下图中的五种思路: 1) 响应码 对于http类接口,有时开发人…...
windows redis 允许远程访问配置
安装好windows版本的redis,会以服务方式启动,但是不能远程访问,这个时候需要修改配置。redis安装路径下会有2个配置文件,究竟需要怎么修改才能生效呢?看下图 这里的redis服务指定了是redis.windows-service.conf文件&…...
三、JS逆向
一、JS逆向 解释:在我们爬虫的过程中经常会遇到参数被加密的情况,这样只有先在前端搞清楚加密参数是怎么生成的才能继续我们的爬虫,而且此时我们还需要用python去执行这个加密的过程。本文主要讲怎么在浏览器调试JS,以及Python执…...
HBase 高可用集群详细图文安装部署
目录 一、HBase 安装部署 1.1 Zookeeper 正常部署 1.2 Hadoop 正常部署 1.3 HBase 安装 1.4 HBase 的配置文件 1.4.1 hbase-env.sh 1.4.2 hbase-site.xml 1.4.3 regionservers 1.4.4 创建目录 1.5 HBase 远程发送到其他节点 1.6 HBase 服务的启动 1.6.1 单点…...
3分钟搞定Mac外接显示器控制:MonitorControl完全指南
3分钟搞定Mac外接显示器控制:MonitorControl完全指南 【免费下载链接】MonitorControl MonitorControl/MonitorControl: MonitorControl 是一款开源的Mac应用程序,允许用户直接控制外部显示器的亮度、对比度和其他设置,而无需依赖原厂提供的软…...
Deepfake Offensive Toolkit Docker部署:跨平台解决方案详解
Deepfake Offensive Toolkit Docker部署:跨平台解决方案详解 【免费下载链接】dot The Deepfake Offensive Toolkit 项目地址: https://gitcode.com/gh_mirrors/dot/dot Deepfake Offensive Toolkit(简称dot)是一款功能强大的深度学习…...
如何高效使用抖音批量下载工具:3个技巧让视频收集效率提升90%
如何高效使用抖音批量下载工具:3个技巧让视频收集效率提升90% 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在短视频内容爆炸的时代,抖音作为国内领先的内容平台,每天产…...
别再ping IP了!手把手教你给ZeroTier虚拟网络里的设备起个‘好记’的名字(DNS/mDNS实战)
告别IP记忆困扰:ZeroTier网络中的智能命名方案实战指南 每次在ZeroTier虚拟网络中访问设备时,你是否也厌倦了反复查看和输入那串冗长的IP地址?想象一下,当你想连接家庭NAS时,只需输入nas.home就能立即访问,…...
SEER‘S EYE模型辅助计算机组成原理教学:概念可视化与问答
SEERS EYE模型辅助计算机组成原理教学:概念可视化与问答 计算机组成原理这门课,对很多学生来说,就像在学一门“外星语”。CPU、寄存器、流水线、缓存……这些词听起来就够抽象的,更别说理解它们是怎么协同工作的了。传统的教学方…...
当3D高斯遇上AIGC:手把手拆解G4SPLAT如何用视频扩散模型修复未观测区域
当3D高斯遇上AIGC:G4SPLAT如何用生成式AI重塑三维重建 在计算机视觉领域,三维场景重建一直是个令人着迷又充满挑战的问题。想象一下,你手持手机在房间里随意拍摄几段视频,AI就能自动生成这个房间的完整三维模型——包括那些你根本…...
效率飙升:借助快马平台生成全自动OpenClaw本地部署一体化工具
最近在折腾OpenClaw的本地部署时,发现传统方式实在太费时间了。每次都要手动查文档、拼命令、调环境,经常卡在某个依赖项版本冲突上。后来尝试用InsCode(快马)平台生成了一体化部署工具,效率直接翻倍。这里分享下具体实现思路和优化点&#x…...
使用PyTorch Lightning优化PETRV2-BEV模型训练流程
使用PyTorch Lightning优化PETRV2-BEV模型训练流程 如果你正在训练像PETRV2这样的BEV感知模型,可能已经体会过那种“一步一坑”的感觉。数据加载复杂、多GPU训练配置繁琐、日志记录混乱、实验难以复现……这些工程上的琐事,常常比模型本身更让人头疼。 …...
APISIX Dashboard实战:从零配置JWT认证网关(含Node.js后端对接)
APISIX Dashboard实战:从零构建JWT认证网关与Node.js后端深度集成 引言:为什么选择APISIX作为API网关? 在现代微服务架构中,API网关扮演着流量调度和安全防护的双重角色。APISIX作为云原生API网关的佼佼者,凭借其动态…...
二极管限幅与钳位电路设计原理与应用
基于二极管的限幅与钳位电路设计精解1. 二极管基础特性与工程应用1.1 单向导电特性分析二极管作为半导体器件的基础元件,其核心特性是单向导电性。当正向偏置电压超过导通阈值(硅管约0.7V)时呈现低阻态,反向偏置时则保持高阻态。这…...
