线性表
线性表是最简单的数据结构,是一些相同特征的元素的有限序列 ,在逻辑结构上每个元素就像被一条线串联 起来,物理结构,则是每个元素在计算机中的联系
疑惑
- 顺序表的优点与缺点
- 链表的优点与缺点
- 他们的区别
顺序表
- 顺序表他是由多个相同性质的元素组成,通常是用数组来实现的
- 如图所示
- 顺序表一般有俩种
-
- 静态
-
- 动态
静态
静态就是创建好之后就能随意改变 大小,开大了会造成浪费,开小了又不够,改变也只能从源头改变,非常局限
动态
动态则是需要的时候申请一块( 由malloc,calloc,realloc动态申请开辟的),开大减少了浪费,开小不够的尴尬场面,
举一个生活中的例子:
- 静态就好比是你花钱去买一个储物间一样,多少钱就买都大空间
- 动态就好比给你一块地和铁铲,你要放多少东西,就造多大的储物室
实现顺序表
- 在这个期间他的优缺的会被无限的放大
- 他们都基于动态基础上
- 请看我写的另篇实现顺序表
链表
- 链表是是逻辑上连续存放每个元素就像被
链条穿插在一起 ,但是物理啊结构上非连续,前面的元素存着下一个元素的地中 ,(我称他为羁绊表)
逻辑结构
他们就像是被一条链条拴在一起 如图所示
物理结构
上个元素存着下一个元素的地址通过地址可以找到他
链表的种类
- 他种类繁多
- 有
八种 - 常用的就是
单链表 和双向带头链表 - 由图所示
简单介绍各种链表
- 如图所示
实现单向不循环链表/ 实现带头双向循环链表
单向不循环链表/ 实现带头双向循环链表
链表/顺序表的优缺点
- 顺序表的尾插效率高,销毁也快,但是
头插 ,任意位置效率低 ,会造成一定空间浪费 - 单链表的尾插与头插效率高,但是他有一个劣势就是他找不到前一个但是销毁一般
效率O(N) ,需要的时候申请 - 双向带头循环链表,可以说是单链表的优化版,但是他实现起来也是
比单链表复杂 ,可以找到前面的节点 ,但是依然销毁没有顺序表那样效率高
不同 | 顺序表 | 链表 |
---|
存储空间上 | 物理上联系 | 逻辑上连续 | 随机访问 | 支持:O(1) | 不支持 | 任意位置插入或者删除元素 | 挪动数据,覆盖 | 修改指针指向 | 插入 | 插入不够扩容一块空间 | 想插入时申请一块 | 应用场景 | 频繁访问+元素高效储存 | 任意位置插入+删除 | 缓存利用率 | 高 | 低 |
链表/顺序表oj
end
- 相信经过上面的层层洗礼你已经对链表顺序表又一个深刻的见解了(记得看他们的实现方法,点跳转链接即可实现顺序表,链表曲二,三,)
- 但是革命的大军依旧没有停止,多去leetcode刷题哟,加深记忆不说了leetcode向我招手呢
|