当前位置: 首页 > news >正文

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语言之单链表理解与应用

其实网上有好多关于单链表理解&#xff0c;其实知乎上有一篇写的很好&#xff0c;利用图形与代码结合&#xff0c;我觉得写的很好&#xff0c;大家也可以去查一下&#xff0c;每个人都有自己的想法与理解&#xff0c;这里主要看单链表概念&#xff0c;应用场景&#xff0c;举例…...

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日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;https://github.com/vuejs/vue-next/release…...

LLM中的Prompt提示

简介 在LLM中&#xff0c;prompt&#xff08;提示&#xff09;是一个预先设定的条件&#xff0c;它可以限制模型自由发散&#xff0c;而是围绕提示内容进行展开。输入中添加prompt&#xff0c;可以强制模型关注特定的信息&#xff0c;从而提高模型在特定任务上的表现。 结构 …...

【算法Hot100系列】最长回文子串

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

KaiwuDB × 国网山东综能 | 分布式储能云边端一体化项目建设

项目背景 济南韩家峪村首个高光伏渗透率台区示范项目因其所处地理位置拥有丰富的光照资源&#xff0c;该区域住户 80% 以上的屋顶都安装了光伏板。仅 2022 年全年&#xff0c;光伏发电总量达到了百万千瓦时。 大量分布式光伏并网&#xff0c;在输出清洁电力的同时&#xff0c…...

elasticsearch查询出现Limit of total fields 1000 has been exceeded

项目场景&#xff1a; 在项目中使用elasticsearch保存日志等相关数据&#xff0c;查询页面查询这些日志数据 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 今天在检查日志数据时&#xff0c;发现数据出不来&#xff0c;检查后端日志&#xff0c;发现一直…...

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、死锁的基本知识 产生死锁的原因&#xff1a; 1.系统资源不足 2.进程运行推进方式不合理 3.分配资源不合理 &#xff08;把幼儿园老师比作操作系统&#xff0c;幼儿园里的玩具比作系统资源&#xff0c…...

Postman-脚本自动化及定时执行脚本(7)

一.postman脚本自动化&#xff08;从postman至Newman可以一键执行脚本并生成报告&#xff1a;&#xff09; Postman Newman 是一个 CLI&#xff08;命令行界面&#xff09;工具&#xff0c;可以使用它来运行 Postman 中的集合&#xff08;Collection&#xff09;和环境&#xf…...

基于SSM的影视企业全渠道会员管理系统(有报告)。Javaee项目

演示视频&#xff1a; 基于SSM的影视企业全渠道会员管理系统&#xff08;有报告&#xff09;。Javaee项目 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring S…...

【C++】 C++11 新特性探索:decltype 和 auto

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ decltype推导变量类型推导函数返回类型 2️⃣ auto自动推导变量类型迭代器和范围循环 3️⃣ decltype 和 auto 同时使用&#x1f6ec; 结论&#x1f4d6; 参考资料 &#x1f6eb; 问题 描述 C11 引入了一些强大的新特性&#xff…...

【Jeecg Boot 3 - 第二天】1.2、jar 包和 lib 依赖分离,部署包缩小100倍

一、场景 二、思路 三、实战 ▶ 2.1、项目 jar 包解压获取 lib config Stage 1&#xff1a;正常打包获取 jeecg-system-start-3.6.0.jar Stage 2&#xff1a;解压 获取如下文件 Stage 3&#xff1a;获取 lib config ▶ 2.2、获取简化版项目jar包 Stage 1&#xff1…...

电商平台的易聊集成:无代码开发,API连接,CRM支持

连接电商与客服&#xff1a;易聊的创新解决方案 在迅速变化的电子商务市场中&#xff0c;企业要想保持竞争力&#xff0c;就必须拥有高效灵活的客服体系。易聊&#xff0c;一家领先的AISaaS服务商&#xff0c;正是基于这一需求&#xff0c;推出了一系列创新产品。它们通过智能…...

Draw.io or diagrams.net 使用方法

0 Preface/Foreword 在工作中&#xff0c;经常需要用到框图&#xff0c;流程图&#xff0c;时序图&#xff0c;等等&#xff0c;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种断言方式&#xff0c;基本可能满足90%以上的断言场景&#xff0c;具体参见如下脑图&#xff1a; 在这里插入图片描述 下面分别解释一下图中的五种思路&#xff1a; 1&#xff09; 响应码 对于http类接口&#xff0c;有时开发人…...

windows redis 允许远程访问配置

安装好windows版本的redis&#xff0c;会以服务方式启动&#xff0c;但是不能远程访问&#xff0c;这个时候需要修改配置。redis安装路径下会有2个配置文件&#xff0c;究竟需要怎么修改才能生效呢&#xff1f;看下图 这里的redis服务指定了是redis.windows-service.conf文件&…...

三、JS逆向

一、JS逆向 解释&#xff1a;在我们爬虫的过程中经常会遇到参数被加密的情况&#xff0c;这样只有先在前端搞清楚加密参数是怎么生成的才能继续我们的爬虫&#xff0c;而且此时我们还需要用python去执行这个加密的过程。本文主要讲怎么在浏览器调试JS&#xff0c;以及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 单点…...

新手福音:在快马平台零基础上手加速库,轻松提速深度学习训练

新手福音&#xff1a;在快马平台零基础上手加速库&#xff0c;轻松提速深度学习训练 作为一个刚接触深度学习的新手&#xff0c;最头疼的莫过于环境配置和性能优化。最近我在InsCode(快马)平台上发现了一个超实用的功能——预置加速库的深度学习项目模板&#xff0c;让我这个小…...

VitePress 博客主题定制与美化实战

1. VitePress主题美化的核心思路 很多开发者在使用VitePress搭建博客时&#xff0c;都会遇到一个共同的问题&#xff1a;默认主题虽然简洁&#xff0c;但缺乏个性。我在实际项目中发现&#xff0c;通过CSS变量覆盖、自定义组件和插件扩展这三个维度&#xff0c;可以打造出极具辨…...

STM32F103C8T6 DHT11温湿度监测系统 HAL库 CubeMX实战(避坑指南)

1. 项目背景与硬件选型 温湿度监测是物联网领域最基础也最实用的功能之一。我最近用STM32F103C8T6和DHT11搭建了一个环境监测节点&#xff0c;整个过程踩了不少坑&#xff0c;也积累了一些实战经验。这个方案特别适合需要低成本、快速上手的场景&#xff0c;比如智能家居、农业…...

如何用stressapptest进行高效内存和磁盘压力测试?实战案例分享

如何用stressapptest进行高效内存和磁盘压力测试&#xff1f;实战案例分享 在服务器运维和硬件性能评估中&#xff0c;内存和磁盘的稳定性直接关系到系统的可靠性。想象一下&#xff0c;当你的服务器在凌晨三点突然因为内存错误崩溃&#xff0c;或者磁盘在高峰期出现读写异常&a…...

springboot框架健康饮食营养管理信息系统

目录需求分析与系统设计技术栈选型与环境搭建核心功能实现数据可视化与报告生成测试与部署项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作需求分析与系统设计 明确健康饮食营养管理系统的核心需求&#xff0c;包括用户注册登录…...

墨语灵犀在互联网产品设计中的应用:用户需求分析与PRD生成

墨语灵犀在互联网产品设计中的应用&#xff1a;用户需求分析与PRD生成 每次产品评审会前&#xff0c;你是不是也经历过这样的夜晚&#xff1f;面对一堆零散的用户反馈、模糊的市场数据和脑子里盘旋的初步想法&#xff0c;要在短短几天内把它们梳理成一份逻辑清晰、结构完整的产…...

掌握Nemo文件管理器:Cinnamon桌面环境的高效文件管理利器

掌握Nemo文件管理器&#xff1a;Cinnamon桌面环境的高效文件管理利器 【免费下载链接】nemo File browser for Cinnamon 项目地址: https://gitcode.com/gh_mirrors/ne/nemo Nemo作为Cinnamon桌面环境的默认文件管理器&#xff0c;不仅仅是一个简单的文件浏览器&#xf…...

基于智能体(Agent)的自动化图像工作流:Wan2.2-I2V-A14B与任务编排

基于智能体&#xff08;Agent&#xff09;的自动化图像工作流&#xff1a;Wan2.2-I2V-A14B与任务编排 1. 引言&#xff1a;当图像生成遇上智能体 想象一下这样的场景&#xff1a;你需要为电商平台制作一组节日主题的广告图&#xff0c;包含特定风格的背景、商品展示和人物互动…...

Win11官方下载与优化:为FLUX小红书V2准备最佳运行环境

Win11官方下载与优化&#xff1a;为FLUX小红书V2准备最佳运行环境 1. 准备工作与环境检查 在开始安装FLUX小红书V2之前&#xff0c;我们需要确保系统环境达到最佳状态。这个图像生成工具对硬件和系统都有一定要求&#xff0c;特别是对GPU的性能比较敏感。 首先检查一下你的硬…...

AR.js终极指南:在Web浏览器中实现高效增强现实的完整解决方案

AR.js终极指南&#xff1a;在Web浏览器中实现高效增强现实的完整解决方案 【免费下载链接】AR.js Image tracking, Location Based AR, Marker tracking. All on the Web. 项目地址: https://gitcode.com/gh_mirrors/arj/AR.js AR.js是一个轻量级JavaScript库&#xff0…...