您的位置:首页 > 理论基础 > 数据结构算法

[数据结构与算法] 3,线性表

2016-08-30 19:40 316 查看
1 线性表的定义

零个或多个数据元素的有限序列。序列指数据元素之间是有顺序的,若有多个元素,那么第一个元素无前驱,最后一个元素无后继。其它每个元素都有前驱后继。



2 线性表的抽象数据类型





3 线性表的顺序存储结构

定义:用一段地址连续的存储单元依次存储线性表中的数据元素。(C语言中的一维数组)

顺序存储结构线性表的结构代码



三个重要的属性:

1) 存储空间的存储位置:数组data的存储位置。

2)线性表的最大存储容量:MAXSIZE

3)线性表的当前长度:length

4 顺序存储结构下线性表的操作

1)取出操作 时间复杂度:O(1)



2)插入操作 时间复杂度:最坏O(n),平均时间复杂度也是一样





3) 删除操作 时间复杂度O(n),平均也是







5 线性顺序存储结构的优缺点



6 线性表的链式存储结构



头节点:为了操作方便,在第一个节点前增加一个头节点,数据域可以不存储任何信息,也可以放一些公共信息,如下图:



头节点跟头指针的区别:





C语言结构指针描述单链表的:





7 单链表的操作

1)读取操作: 时间复杂度:O(n)







2)插入操作:代码顺序不可相反,可以想想为什么











3)删除操作:









8,单链表结构跟顺序存储结构优缺点



如果线性表需要频繁查找,很少进行插入删除操作,那么适合用顺序存储结构,如果需要频繁插入删除操作,那么适合用链式存储结构,单链表。

比如在游戏开发中,用户注册的信息,除了用户注册外,其余时候我们都是读取,所以应该考虑顺序存储结构。

比如玩家的装备总是在变化,可能增加或者删除,那么适合用单链表。实际情况往往复杂很多。

9,循环链表

将单链表的终端节点的NULL指针改为指向头节点或者开始节点,这就使得整个单链表形成一个环,这种头尾相连的链表称为循环链表(circular linked list)

那么,循环链表判断循环结
da2b
束的标志就是p->next等于头节点或者开始节点,则循环结束。

10,双向链表(double linked list)

双向链表就是多设置了一个指向前驱节点的指针。








双向链表的插入操作:



删除操作:



11,总结

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: