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

数据结构之【链表简介】

1.引入

上一期我们了解到,在顺序表中,

(1)单个数据头部或者中间插入,时间复杂度为O(N)

(2)realloc申请空间时,如果原数据量较大,异地扩容的成本较高

(拷贝数据,释放空间……)

(3)扩容一般是呈2倍的增长,难免造成空间浪费

原来200个存储单元,扩容至400个

如果只用205个,那浪费就很大了

链表就可以很好的解决上述问题

2.概念及结构

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

物理存储结构 是指 现实情况中,数据存储的真实结构

逻辑顺序 则是 为了方便理解,想象出来的

(1)链表由一系列节点(Node)组成,

每个节点包含数据部分(data)和指向下一个节点的指针(next)等.

(2)节点就是一个结构体

(3)节点一般是从上申请出来的

两次申请的空间可能连续,也可能不连续

 

如上图,

(1)上图链表一共由4个节点组成

(2)指针 plist 存储着头节点的地址

即, plist 指向链表的头节点

(3)头节点存储着第二个节点的地址

头节点就可以找到第二个节点

以此类推,找到节点,就可以找到它所存储的数据

(4)尾节点的标志就是

该节点不会存储下一个节点的地址

next = NULL

3.链表的分类

链表的分类如上图,这可以有很多组合,但最常用的是下面两种:

1.无头单向非循环链表

(1)结构简单,一般不会单独存储数据

(2)多作为其他数据结构的子结构,如哈希桶、图的邻接表等

(3)在笔试面试中出现很多

2.带头双向循环链表

(1)结构最复杂,一般用在单独存储数据

(2)结构虽然复杂,实现却很简单


http://www.kler.cn/a/562069.html

相关文章:

  • vi 编辑器的使用
  • DeepSeek开源周Day2:DeepEP - 专为 MoE 模型设计的超高效 GPU 通信库
  • Web前端开发——HTML基础
  • Cassini_Network-Aware Job Schedulingin Machine Learning Clusters
  • 【【Systemverilog学习参考 简单的加法器验证-含覆盖率】】
  • unity学习51:所有UI的父物体:canvas画布
  • 鸿蒙5.0实战案例:har和hsp的转换
  • “深入解析 SQL Server 子查询:从基础到应用”
  • 安全开发-环境选择
  • AGI分级探索:从OpenAI到DeepMind,展望未来AI图景
  • Ubuntu从零创建Hadoop集群
  • idea里的插件spring boot helper 如何使用,有哪些强大的功能,该如何去习惯性的运用这些功能
  • IO进程 day06
  • Kafka 消费者组内分区分配策略 以及 管理控制台方案
  • 巨控科技的GRM550元出魔抗实现PLC远程下载与维护方案:工业自动化的高效解决方案
  • 图扑农牧林数据分析可视化平台:智慧农业的“数字大脑”
  • 协方差(Covariance)与得分函数:从Fisher信息矩阵看统计关联
  • 互联网医院系统源码解析:如何开发智能化的电子处方小程序?
  • 三角函数和差角公式对于任意角的证明(代数法)
  • Java中文件操作和IO(如果想知道Java中有关文件操作和IO的知识,那么只看这一篇就足够了!)