数据结构与算法之线性表(一)
来源:互联网 发布:移动80端口 编辑:程序博客网 时间:2024/06/07 12:05
1.定义:
- 线性表是具有 相同特性 数据元素的一个有限序列,该序列中所包含的元素的个数叫做线性表的长度,用n表示(n>=0),当n等于0时线性表是一个空表。
- 可以是有序的也可以是无序的,
2.线性表的逻辑特性
- 这个有限序列的第一个没有前驱(前面没有数据元素),最后一个无后继(后面没有数据元素),其他的数据元素只有一个直接前驱,和一个直接后驱。
3.线性表的存储结构
1.顺序表
- 顺序表中的所有元素按照其逻辑顺序,一次存储到存储器中从指定存储位置开始的一块连续的存储空间中。
- 特点
- 随机访问特性
- 即顺序表要求占用连续的存储空间
- 存储分配只能预先进行,即 静态分配,一旦分配好了,在对其操作过程中不变。
- 在顺序表中插入时,需要移动元素
2.链表
在链表存储中,每个结点不仅包含所存元素本身的信息,还包含前驱结点包含后继结点的地址信息,这样就可以方便的找到前驱和后继的位置。
-特点- 必须从头访问,不支持随机访问。
- 因为有一部分要存储指针信息,所以链表中 结点的存储空间利用率较之顺序表稍低一些。
- 链表中的节点散落的分布在存储器中,所以链表支持存储空间的动态分配,需要时再划分。
- 链表插入时,不需要移动元素。
链表有五种形式
- 单链表可分为带头结点,和不带头结点两种,前者第一个节点不存储信息,只作为标记,后者所有结点都存储信息,两种情况下,头指针都指向头结点
- 双链表,即节点存储了指向前驱的指针。
- 循环单链表,最后一个结点的指针指向链表中的第一个结点。
- 带头结点的循环单链表当head等于head->next;时链表为空;不带头结点的循环单链表当 head 等于 NULL 时链表为空
- 循环双链表
- 带头结点的循环双链表当head->next和head->prior两个指针都等于head时链表为空,不带头结点的循环双链表当head等于NULL的时候为空。
- 静态链表。
区别总结
(1 )基于空间的比较:
存储分配的方式:
顺序表的存储空间是静态分配的。
链表的存储空间是动态分配的。
存储密度( 存储密度= 结点数据域所占的存储量/ 结点结构所占的存储总量) :
顺序表的存储密度 =1。
链表的存储密度<1 (因为结点中有指针域)。
(2 )基于时间的比较:
存取方式:
顺序表可以随机存取,也可以顺序存取
链表是顺序存取的。
插入/ 删除时移动元素个数:
顺序表平均移动近一半元素。
链表不需要移动,只需要改变指针。
阅读全文
0 0
- 数据结构与算法之线性表(一)(笔记)
- 数据结构与算法之线性表(一)
- 数据结构与算法专题之线性表——链表(一)单链表
- 数据结构与算法——线性表(一)
- 别样数据结构与算法学习(一)线性表
- 数据结构与算法之----线性表
- 数据结构与算法分析之线性表
- 数据结构与算法之线性表
- 【数据结构】数据结构与算法(一)——线性结构
- 数据结构与算法(5)--线性表
- 数据结构与算法(二)线性表
- 数据结构与算法(线性表)
- 数据结构与算法(上)线性表
- 数据结构之线性表(linear_list)一
- 数据结构之线性表(一)
- 数据结构之线性表(一)
- 数据结构之线性表(一)
- 数据结构与算法 线性表
- let's Encrypt永久免费证书SSL配置HTTPS
- 日历插件超简单好用功能强大的插件(附有源码文件和使用说明)
- 仿facebook
- 如何把java程序作为Linux服务启动
- 全新体验—Eclipse更换代码颜色与风格!
- 数据结构与算法之线性表(一)
- 黑胡子之谜
- A. Arpa and a research in Mexican wave
- this、call和apply
- Codeforces862C. Mahmoud and Ehab and the xor 【构造】
- LeetCode-69-Sqrt(x) Python要用math.sqrt()
- ==与equals的区别
- JMP二次开发方法研究
- Go 语言中格式化时间