1.2.1-2部分数据结构的说明02_链表
(1)链表数据结构:
概念:
将列表中相互连接的节点不连续的存储在内存中。与数据不同,我们无法再恒定时间内访问任何元组,如果遍历所有则花费时间与元素总数n成正比。插入和删除1个元素的时间复杂度都是O(n)。链表中每个块成为一个节点,每个节点有两个字段,一个存储数据,另一个存储下一个节点的地址(链接字段)。


特点:
(1) 每个节点由2个字段构成,1个存储数据,另1个存储下一个节点的地址。
(2) 下一个节点的名称与上一个节点的link一致。
(3)存整数型的数组(array)占4字节,而链表因存储地址故所需8字节。对于大量数据,链表比数组所需的内存要小,原因是数组要预留很多空的内存空间。

(2)C语言中表述



(1)逻辑代码——插入第1个节点
typedef struct Node {int data; // 用于存储数据struct Node* link; // 指向下一个节点的指针,仅仅是指针,不包含数据
} Node;//(1) 创建指针
Node* A; //声明指向节点的指针 A
A = NULL; //最初列表为空,指针 A 不指向任何位置//(2) 插入节点。用malloc函数创建内存块,参数是内存块所需字节数
Node* temp = (Node*)malloc(sizeof(Node));
//说明:malloc返回void指针,该指针为我们提供分配的内存块地址
//说明:我们把它保存在名为temp的变量里,最后需要类型转换(由于返回void指针)//(4) 把数据写入该节点,并调整链接。#if 0
(*temp).data = 2;
//说明:向 A 写入地址,以及调整新创建节点的链接字段。为此必须解引用指针(也就是刚创建的变量temp)。
//说明:变量前加"*"可解引用并可以修改地址的值(也就是内容)。
(*temp).link = NULL;
//说明:我们这个临时变量temp指向这个节点,此时这个节点是第一个也是最后一个节点,所以链接不是是NULL#else
temp->data = 2;
temp->link = NULL;
#endifA = temp;
//说明:把新创建节点的地址写入 A
//说明:temp事实用来暂时存储节点地址,一旦链接调整完成,temp就可用于其他目的
//A和temp都是指针,都是指向malloc分配的这个内存地址,只是temp是临时变量。
(2)逻辑代码——遍历后再链表最后插入第1个节点
typedef struct Node {int data; struct Node* link;
} Node;//(1) 创建指针
Node* A;
A = NULL; //(2) 构建第1个节点,并写入数据和地址
Node* temp = (Node*)malloc(sizeof(Node));
temp->data = 2;
temp->link = NULL;//(3)把新节点的地址写入原本为NULL的此前尾节点的link
A = temp;//(4)遍历节点地址后,插入新节点
Node* temp1 = A;
while(temp1->link != NULL){ //用最后一个节点地址为空,作为判断temp1 = temp1->link;
}//(5)创建新节点,并在新节点内写入数据
Node* newtemp = (Node*)malloc(sizeof(Node));
newtemp->link = NULL;
newtemp->data = 3;//(6)把新节点的地址写入原本为NULL的此前尾节点的link
temp1->link = newtemp;
(3)逻辑代码——从头部开始插节点
#include <stdio.h>
#include <stdlib.h>typedef struct Node{int data;struct Node* next;
}Node;struct Node* head; //声明Node*类型的一个结构体指针为headvoid Insert(int x){Node* temp = (Node*)malloc(sizeof(Node)); //分配一个新内存,并把地址赋给temptemp->data = x; //解指针后改写在结构内data//以下两行的数据不能错,一定是先连接后面的节点,然后才是前面的节点temp->next = head; //就是把原本头节点的地址先写入解指针*temp的next里head = temp; //把新的头节点地址赋值给head(这条把2种可能性都考虑:1. head != NULL,2. head ==NULL)
}void Print(){Node* temp = head;printf("List is: ");while(temp != NULL){printf(" %d", temp->data); //遍历地址temp = temp->next; //输出数据}printf("\n");
}int main(){head = NULL;printf("How many number?\n");int n, i, x;scanf("%d", &n);for(i = 0; i < n; i++){printf("Enter the number");scanf("%d", &x);Insert(x);Print();}
}


(3)备注:
(1)int *p = &a的含义就是 p存储了 &a,然后p的类型是 int*
截图参考来自,很好的视频
相关文章:
1.2.1-2部分数据结构的说明02_链表
(1)链表数据结构: 概念: 将列表中相互连接的节点不连续的存储在内存中。与数据不同,我们无法再恒定时间内访问任何元组,如果遍历所有则花费时间与元素总数n成正比。插入和删除1个元素的时间复杂度都是O(n…...
vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。
vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。 1.设计思路:2.设计细节3.详细代码实现 1.设计思路: 左侧button列表是要拖拽的组件。中间是拖拽后的流程图。右侧是拖拽后的数据列表。 我们拖动左侧组件放入中间的流…...
linux上使用cmake编译的方法
一、hello 例程仅基于一个cpp文件 C文件或工程进行编译时可以使用g指令(需要对每一个程序和源文件分别使用g指令编译),当程序变大时,一个工程文件往往会包含很文件夹和源文件,这时我们需要的编译指令将越来越长&#…...
如何实现el-select多选下拉框中嵌套复选框并加校验不为空功能呢?
如何实现el-select多选下拉框中嵌套复选框并加校验不为空功能呢? 要实现的效果图选择部分品牌但不选选项效果问题概述实现方案el-select组件与el-checkbox组件无缝衔接给form表单加自定义校验规则 要实现的效果图 选择部分品牌但不选选项效果 问题概述 相信大家看到…...
源码理解 UE4中的 FCookStatsManager::FAutoRegisterCallback RegisterCookStats
官方文档:https://dev.epicgames.com/documentation/zh-cn/unreal-engine/API/Runtime/Core/ProfilingDebugging/FCookStatsManager文档中的注释: When a cook a complete that is configured to use stats (ENABLE_COOK_STATS), it will broadcast this…...
Android 根据内存大小显示MTP模式连接PC时的名称
项目有两种内存,要求根据连接电脑拷贝文件时的盘符名称根据内存大小显示不同名称。 frameworks/base/media/java/android/mtp/MtpDatabase.java//mh import android.app.ActivityManager; ...-894,7 896,19 public class MtpDatabase implements AutoCloseable {p…...
不只是mini-react第一节:实现最简单mini-react
项目总结构: ├─ 📁core │ ├─ 📄React.js │ └─ 📄ReactDom.js ├─ 📁node_modules ├─ 📁tests │ └─ 📄createElement.spec.js ├─ 📄App.js ├─ 📄in…...
前端路由layout布局处理以及菜单交互(三)
上篇介绍了前端项目部署以及基本依赖的应用,这次主要对于路由以及布局进行模块化处理 一、 创建layout模块 1、新建src/layout/index.vue <template><el-container class"common-layout"><!-- <el-aside class"aside">&l…...
小结:DNS,HTTP,SMTP,IMAP,FTP,Telnet,TCP,ARP,ICMP
DNS(Domain Name System,域名系统) 是互联网的重要组成部分,它负责将人类易读的域名(如 www.google.com)转换为机器可以识别的 IP 地址(如 142.250.72.206)。这一过程被称为域名解析…...
【C++】P2550 [AHOI2001] 彩票摇奖
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式:输出格式:输入输出样例: 💯题解思路1. 问题解析 💯我的实现实现逻辑问题分析 💯老…...
并发服务器框架——zinx
zinx框架 Zinx 是一个用 Go 语言编写的高性能、轻量级的 TCP 服务器框架,它被设计为简单、快速且易于使用。Zinx 提供了一系列的功能,包括但不限于连接管理、数据编解码、业务处理、负载均衡等,适用于构建各种 TCP 网络服务,如游戏…...
Unity 中计算射线和平面相交距离的原理
有此方法 能够计算射线和平面是否相交以及射线起点到平面交点的距离 代码分析 var dot Vector3.Dot(ray.direction, plane.normal);计算射线和平面法线的点积,如果大于等于0,则说明射线和平面没有相交,否则,说明射线和平面相交…...
浅谈棋牌游戏开发流程七:反外挂与安全体系——守护游戏公平与玩家体验
一、前言:为什么反外挂与安全这么重要? 对于任何一款线上棋牌游戏而言,公平性和玩家安全都是最重要的核心要素之一。如果游戏环境充斥着各式各样的外挂、作弊方式,不仅会毁坏玩家体验,更会导致游戏生态崩塌、口碑下滑…...
《无力逃脱》V1.0.15.920(59069)官方中文版
艾丹是一名三臂赏金猎人,他必须追捕银河系中最危险、最难以捉摸的割喉者。 有些悬赏是金钱,有些则是有价值的信息。艾丹可以利用这些信息找到让他走上这条路的人,同时也会卷入一个全银河系的阴谋中。 拥有三条手臂可以让你同时对付更多的敌…...
六种主流服务器的选择与使用
网络的运行离不开各种服务器,它们各司其职,为我们提供稳定的网络服务。本文带大家了解6种常见服务器类型。 服务器的六大种类 第一种:Web服务器 Web服务器是互联网的核心。当你打开一个网站,比如百度或淘宝,浏览器会…...
TiDB 升级至高版本提示'mysql.tidb_runaway_watch' doesn't exist 问题处理
作者: asd80703406 原文来源: https://tidb.net/blog/90394c97 背景 近期发现很多人从低版本升级至TiDB v7 或者v8版本,均遇到了tidb-server启动失败,提示报错如下: ["get runaway watch record failed"…...
GRU-PFG:利用图神经网络从股票因子中提取股票间相关性
“GRU-PFG: Extract Inter-Stock Correlation from Stock Factors with Graph Neural Network” 论文地址:https://arxiv.org/pdf/2411.18997 摘要 股票预测模型可以分为两个主要类别:第一类,例如GRU和ALSTM,这些模型仅基于股票…...
数字化供应链创新解决方案在零售行业的应用研究——以开源AI智能名片S2B2C商城小程序为例
摘要: 在数字化转型的浪潮中,零售行业正经历着前所未有的变革。特别是在供应链管理方面,线上线下融合、数据孤岛、消费者需求多样化等问题日益凸显,对零售企业的运营效率与市场竞争力构成了严峻挑战。本文深入探讨了零售行业供应…...
安卓Activity执行finish后onNewIntent也执行了
测试反应投屏时下一集可能播放不成功。 首先看一下日志: onCompletion onCast handlerMessage: 2 finish: PlayerActivityabc7fdc onPause: PlayerActivityabc7fdc onNewIntent: PlayerActivityabc7fdc onResume: PlayerActivityabc7fdc onPause: PlayerActivityab…...
数据结构.期末复习.学习笔记(c语言)
《数据结构》复习概要 一、概论 二、基础1. 基本概念2. 四种逻辑结构及特点3. 算法的概念、特性4. 算法设计的4个要求 三、线性结构1.顺序表2.单链表3.循环链表双向链表4.栈(后进先出)5.队列(先进先出) 四、树和二叉树1.树2.二叉…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...
