链表相关概念(更多通过刷题来熟悉链表

1. 链表概念及结构

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

请添加图片描述

链表的每一节如同火车车厢,称之节点/结点,其组成主要有两个部分:该节点所保存的数据以及下一个节点的地址(指针变量),存储地址的原因在于,链表的物理结构并不像数组一样是连续的,只有提供地址才能凭此找到下一个节点

图中指针变量plist保存的是第一个节点的地址,我们称plist此时“指向”第一个节点,如果我们希望plist“指向”第二个节点时,只需要修改plist保存的内容为0x0012FFA0。

下面是一个链表(节点)的例子

struct SListNode{
	int data;
	struct SListNode* next;
};

当然,为什么我们使用指针而不是直接用结构体变量?这是因为在定义结构体的时候其大小仍未确定,而结构中嵌套结构其大小就更不知道怎么算了,相较而言,不管什么类型的指针,其大小都是确定的,所以使用指针也就更加合理

另外

  1. 节点一般是从堆上申请的
  2. 每次申请的空间可能连续也可能不连续

2. 链表的分类

链表的结构非常多样,以下情况组合起来就有8种(2×2×2)

请添加图片描述

虽然有这么多的链表结构,但我们实际中最常用的还是两种结构,单链表双向带头循环链表

  1. 无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶,图的邻接表等。另外这种结构在笔试面试中出现很多
  2. 带头双向循环链表:结构最复杂,一般用在单独存储数据,实际中使用的链表结构,都是带头双向循环链表。结构虽然复杂,但使用这种结构会带来很多优势

3. 顺序表和链表比较

不同点顺序表链表
存储空间上物理上一定连续逻辑连续,物理未必
随机访问支持不支持
任意位置插入或删除元素可能需要搬移元素,效率低只需修改指针指向即可
插入动态顺序表,空间不够时需要扩容没有容量的概念
应用场景元素高效存储+频繁访问任意位置插入和删除频繁
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值