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

c语言单向链表

看如下代码,这是一个完整的可运行的c源文件,要注意的点:

  1. c语言程序运行不一定需要头文件
  2. NULL其实是 (void*)0,把指针赋值成(void*)0,就是防止程序员不想该指针被引用的时候被引用,引用地址为0的值程序会引起系统中断,程序会异常终止
  3. 可能会有人觉得,别人讲链表都是malloc,怎么这里没有malloc,malloc是用来申请内存的,比较灵活,可以自由改变链表长度,这里用赋值的方法是因为从最简单的开始讲,更能讲清楚原理
#define NULL (void*)0
struct list{int num;/*单向链表需要一个结构体指针指向下一个节点的地址,如果是尾巴节点,则是NULL*/struct list *next; 
};
int main()
{struct list n0 = {100, NULL};struct list n1 = {29, NULL};struct list n2 = {78, NULL};struct list n3 = {24, NULL};n0.next = &n1;n1.next = &n2; // 等价 n0.next->next = &n2n2.next = &n3; // 等价 n0.next->next->next = &n3return 0;
}

我们先执行完main函数里面前四句赋值语句,

用gdb查看n0, n1, n2, n3的地址,如下,他们的地址都是不一样的,因为他们在内存的不同的地方,他们也没有什么关系(你们运行出来的内存地址应该和我的不一样,无需产生疑惑)
在这里插入图片描述

他们在你的内存条里像这样分布,没什么特点,就是四个结构体,他们占用的大小一样,都是sizeof(struct list)
在这里插入图片描述

我们再查看他们的值,都是初始化的值,没错
在这里插入图片描述

执行 n0.next = &n1;

就是把n1的地址挂在n0的尾巴上(next指针),这样就可以通过n0.next来表示&n1,查看n0.next,发现变成了n1的地址
在这里插入图片描述

执行 n1.next = &n2;n2.next = &n3

经过上面的解释,这两句应该很好理解,就是把n2的地址挂在n1的next上,n3的地址挂在n2的next上,现在,就组成了一个简单的链表,就可以通过结构体n0(通常称之为头节点)访问这个链表上的任何数据

在这里插入图片描述
在这里插入图片描述

使用malloc申请内存的方式创建链表

#include <stdlib.h>
struct list{int num;struct list *next;
};
int main()
{struct list *tmp_node;struct list *head = (struct list*)malloc(sizeof(struct list));head->num = 10;head->next = NULL;/*添加节点*/tmp_node = (struct list*)malloc(sizeof(struct list));tmp_node->num = 3;tmp_node->next = NULL;head->next = tmp_node;/*添加节点*/tmp_node = (struct list*)malloc(sizeof(struct list));tmp_node->num = 5;tmp_node->next = NULL;head->next->next = tmp_node;/*添加节点*/tmp_node = (struct list*)malloc(sizeof(struct list));tmp_node->num = 80;tmp_node->next = NULL;head->next->next->next = tmp_node;return 0;
}

这段代码并不难看懂,就是创建一个节点,然后挂在head的尾巴上,可是这里有缺陷,就是每次都要自己记住有几个节点,然后用 head->next->next->next = tmp_node;的语句去接上节点,这样太麻烦了,我们可以再创建一个尾节点,来表示这个链表的尾巴节点。

#include <stdlib.h>
struct list{int num;struct list *next;
};
int main()
{struct list *tmp_node;struct list *head = (struct list*)malloc(sizeof(struct list));head->num = 10;head->next = NULL;/*刚开始头就是尾,这个能理解吧*/struct list *tail = head;/*添加节点*/tmp_node = (struct list*)malloc(sizeof(struct list));tmp_node->num = 3;tmp_node->next = NULL;tail->next = tmp_node; //接到尾巴上tail = tail->next; //因为后面有新的节点,尾巴要更新位置了,移到新节点了/*添加节点*/tmp_node = (struct list*)malloc(sizeof(struct list));tmp_node->num = 5;tmp_node->next = NULL;tail->next = tmp_node;tail = tail->next;/*添加节点*/tmp_node = (struct list*)malloc(sizeof(struct list));tmp_node->num = 80;tmp_node->next = NULL;tail->next = tmp_node;tail = tail->next;return 0;
}

记住两点:

  1. 头节点一般不移动
  2. 每一次操作完毕后,尾节点都是指向最后一个节点的地址

取下/删除链表节点

增加链表节点

插入链表节点

待更新

相关文章:

c语言单向链表

看如下代码&#xff0c;这是一个完整的可运行的c源文件&#xff0c;要注意的点&#xff1a; c语言程序运行不一定需要头文件NULL其实是 (void*)0&#xff0c;把指针赋值成(void*)0,就是防止程序员不想该指针被引用的时候被引用&#xff0c;引用地址为0的值程序会引起系统中断&…...

『番外篇三』Swift “乱弹”之带索引遍历异步序列(AsyncSequence)

概览 在 Swift 开发中,我们往往在遍历集合元素的同时希望获得元素对应的索引。在本课中,我们将向小伙伴们展示除 enumerated() 方法之外的几种实现思路。在玩转普通集合之后,我们将用“魔法棒”进一步搞定异步序列带索引遍历的实现。 在本篇博主中,您将学到以下内容: 概…...

学习JVM

java虚拟机 流程&#xff1a;helloworld.java----(javac编译)----helloworld.class-------(java运行)——JVM——机器码JVM功能 *解释和运行 *内存管理 *即时编译&#xff08;跨平台-慢一点&#xff09;jit &#xff08;反复用到的代码 解释保存再内存里面&#xff09;…...

Oracle MongoDB

听课的时候第一次碰到&#xff0c;可以了解一下吧&#xff0c;就直接开了墨者学院的靶场 #oracle数据库 Oracle数据库注入全方位利用 - 先知社区 这篇写的真的很好 1.判断注入点 当时找了半天没找到 看样子是找到了&#xff0c;测试一下看看 id1 and 11 时没有报错 2.判断字段…...

Linux-RedHat系统-安装 中间件 Tuxedo

安装步聚 一、中间件安装包&#xff1a; tuxedo121300_64_Linux_01_x86 Tuxedo下载地址&#xff1a; Oracle Tuxedo Downloads 二、新建用户&#xff1a; &#xff08;创建Oracle用户时&#xff0c;需要root权限操作&#xff09; 创建用户&#xff1a; # useradd oracle …...

PHP中的依赖注入是怎样的?

依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;是一种设计模式&#xff0c;它用于解耦组件之间的依赖关系&#xff0c;提高代码的可维护性、可测试性和灵活性。在 PHP 中&#xff0c;依赖注入通常通过构造函数注入、方法注入或属性注入来实现。 以下是依…...

Python求小于m的最大10个素数

为了找到小于m的最大10个素数&#xff0c;我们首先需要确定m的值。然后&#xff0c;我们可以使用一个简单的算法来检查每一个小于m的数字是否是素数。 下面是一个Python代码示例&#xff0c;可以找到小于m的最大10个素数&#xff1a; def is_prime(n): if n < 1: …...

系统的安全性设计

要设计一个安全的系统&#xff0c;除了要了解一些前面讲到的常用的保护手段和技术措施外&#xff0c;还要对系统中可能出现的安全问题或存在的安全隐患有充分的认识&#xff0c;这样才能对系统的安全作有针对性的设计和强化&#xff0c;即“知己知彼&#xff0c;百战百胜”。 下…...

美容店预约小程序搭建指南

随着互联网的发展&#xff0c;越来越多的传统行业开始尝试将业务与互联网相结合&#xff0c;以提供更加便捷、高效的服务。美容行业也不例外。本文将通过使用第三方制作平台&#xff0c;如乔拓云网&#xff0c;指导您如何搭建一个美观实用的美容店预约小程序&#xff0c;帮助您…...

AI:ElasticSearch

ElasticSearch是一款开源的分布式搜索引擎和数据分析引擎&#xff0c;主要用于处理海量数据并提供近实时的搜索和分析功能。它具有全文检索、结构化检索和数据分析等特点&#xff0c;能够满足各种复杂的搜索需求。ElasticSearch使用Java编写&#xff0c;可以运行在多个服务器上…...

如何用 Python 代码打包成一个可执行的 exe 文件?

将Python代码打包成可执行的EXE文件通常需要使用第三方工具&#xff0c;其中PyInstaller是一个流行的选择。PyInstaller可以将Python脚本打包成独立的可执行文件&#xff0c;无需用户安装Python解释器。 打包Python代码成EXE文件的步骤 步骤1&#xff1a;安装PyInstaller 首…...

【Hive】——CLI客户端(bin/beeline,bin/hive)

1 HiveServer、HiveServer2 2 bin/hive 、bin/beeline 区别 3 bin/hive 客户端 hive-site.xml 配置远程 MateStore 地址 XML <?xml version"1.0" encoding"UTF-8" standalone"no"?> <?xml-stylesheet type"text/xsl" hre…...

简约大气视频制作模板PR剪辑素材PR项目工程文件

Premiere Pro模板&#xff0c;简约大气视频剪辑素材PR项目工程文件&#xff08;包含手机竖屏分辨率&#xff09;&#xff0c;包含24个媒体占位符和9个文本占位符。可以编辑和自定义文本占位符和媒体占位符。用来展示照片视频制作。包含视频教程。 来自PR模板网&#xff1a;http…...

Guarded Suspension(担保挂起)设计模式

当线程访问某个对象时&#xff0c;发现条件不满足&#xff0c;暂时挂起等待条件满足时再次访问。Guarded Suspension模式是一个非常基础的模式&#xff0c;主要关注&#xff08;临界值&#xff09;不满足时将操作的线程正确挂起&#xff0c;以防止出现数据不一致或者操作超过临…...

禾匠榜店商城系统 RCE漏洞复现

0x01 产品简介 禾匠榜店商城系统是浙江禾匠信息科技有限公司的一套基于PHP和MySQL的商城系统。 0x02 漏洞概述 禾匠榜店商城系统的api/testOrderSubmit模块下的preview方法存在命令执行漏洞,攻击者可以向服务器写入木马文件,直接获取服务器权限 0x03 漏洞概述 FOFA:bod…...

Python移动未标注的图片数据集

Python移动未标注的图片数据集 前言前提条件相关介绍实验环境Python移动未标注的图片数据集情况一&#xff1a;有图&#xff0c;无标注文件代码实现输出结果 情况二&#xff1a;有图&#xff0c;有标注文件&#xff0c;但标注信息为空代码实现输出结果 情况一与情况二同时都考虑…...

判断css文字发生了截断,增加悬浮提示

示例&#xff1a; 固定显示宽度&#xff0c;溢出显示...&#xff0c;利用了css的属性&#xff0c;想要实现成下面这样&#xff1a; 针对溢出的文字&#xff0c;hover显示全部。 提示很好加&#xff0c;使用tooltip组件就行了&#xff0c;难点是如何判断是否发生了文字溢出。…...

day33-37-SpringBootV12(整合Spring,SpringMVC,Mybatis,日志,api测试等框架)

ssm spring --> applicationContext.xml配置文件 springmvc --> springmvc.xml配置文件 mybatis —> mybatis-config.xml配置文件 —> springboot优化了之前的框架配置,思想是约定大于配置 一、引言 1.1 初始化配置 为了使用SSM框架去开发&#xff0c;准备SSM…...

如何处理好面试中的“压力测试”?

作为一名求职者&#xff0c;在面试时有时遇到的是压力测试&#xff0c;有时则遇到的是一些无良企业单位&#xff0c;究竟如何把握忍耐的限度&#xff0c;才合格当一个能经受压力的员工&#xff0c;才能避免对无良单位的一味隐忍! 压力面试是指有意制造紧张&#xff0c;以了解求…...

大数据----31.hbase安装启动

二.Hbase安装 先前安装&#xff1a; Zookeeper 正常部署 首先保证 Zookeeper 集群的正常部署&#xff0c;并启动之。 三台机器都执行&#xff1a;zkServer.sh startHadoop 正常部署 Hadoop 集群的正常部署并启动。 主节点上进行 &#xff1a;start-all.sh 1.HBase 的获取 一定…...

Phi-3-vision-128k-instruct黑马点评项目AI升级:实现菜品图片智能识别与推荐

Phi-3-vision-128k-instruct黑马点评项目AI升级&#xff1a;实现菜品图片智能识别与推荐 1. 引言&#xff1a;餐饮应用的智能化痛点 在餐饮行业数字化浪潮中&#xff0c;"黑马点评"作为一款广受欢迎的美食点评应用&#xff0c;面临着用户需求升级的挑战。传统模式下…...

OFA视觉问答模型实战教程:与OCR模块串联实现图文联合问答流程

OFA视觉问答模型实战教程&#xff1a;与OCR模块串联实现图文联合问答流程 1. 教程概述 今天我们来探索一个非常实用的技术方案&#xff1a;如何将OFA视觉问答模型与OCR模块串联&#xff0c;实现真正的图文联合问答流程。这个方案能让你的AI应用不仅看懂图片内容&#xff0c;还…...

FireRedASR-AED-L赋能在线教育:实时语音转写与错误检测实践

FireRedASR-AED-L赋能在线教育&#xff1a;实时语音转写与错误检测实践 在线教育的课堂里&#xff0c;老师正对着屏幕滔滔不绝。突然&#xff0c;一个关键的知识点口误了——“光合作用的原料是二氧化碳和水&#xff0c;产物是氧气和...呃...葡萄糖&#xff1f;” 屏幕另一端的…...

Java全栈开发工程师的实战面试经历:从基础到微服务的深度探讨

Java全栈开发工程师的实战面试经历&#xff1a;从基础到微服务的深度探讨 1. 面试官开场介绍 面试官&#xff1a;你好&#xff0c;欢迎来到我们的面试环节。我是今天的面试官&#xff0c;负责对候选人的技术能力进行评估。我看到你的简历上写着有5年的Java全栈开发经验&#…...

Python3.9实战应用:数据分析环境搭建与常用库安装指南

Python3.9实战应用&#xff1a;数据分析环境搭建与常用库安装指南 1. 引言 Python作为数据科学领域的首选语言&#xff0c;其3.9版本在性能和功能上都为数据分析工作提供了坚实基础。本文将带你从零开始搭建一个专业的数据分析环境&#xff0c;涵盖Miniconda环境配置、Jupyte…...

Hearthstone-Script:炉石传说自动化脚本的革新实践

Hearthstone-Script&#xff1a;炉石传说自动化脚本的革新实践 【免费下载链接】Hearthstone-Script Hearthstone script&#xff08;炉石传说脚本&#xff09;&#xff08;2024.01.25停更至国服回归&#xff09; 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-S…...

Mamba模型实战:如何用S6替代Transformer处理长文本(附代码示例)

Mamba模型实战&#xff1a;如何用S6替代Transformer处理长文本&#xff08;附代码示例&#xff09; 在自然语言处理领域&#xff0c;Transformer架构因其强大的注意力机制而长期占据主导地位。然而&#xff0c;当面对长文本处理任务时&#xff0c;Transformer的二次方计算复杂度…...

XUnity.AutoTranslator技术指南:从入门到精通的游戏翻译解决方案

XUnity.AutoTranslator技术指南&#xff1a;从入门到精通的游戏翻译解决方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 一、核心价值&#xff1a;打破语言壁垒的游戏翻译引擎 &#x1f680; 在全球…...

5步突破:用RVC变声器从零到专业音色转换的实战指南

5步突破&#xff1a;用RVC变声器从零到专业音色转换的实战指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI 语音数据小于等于10分钟也可以用来训练一个优秀的变声模型&#xff01; 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Co…...

OpenClaw隐私保护方案:百川2-13B本地化部署处理敏感数据实战

OpenClaw隐私保护方案&#xff1a;百川2-13B本地化部署处理敏感数据实战 1. 为什么选择本地化部署处理敏感数据 去年我在帮一家小型律所做文档自动化改造时&#xff0c;遇到了一个棘手问题。他们需要从大量客户合同中提取关键条款&#xff0c;但合同内容涉及大量商业机密和客…...