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

来源:互联网 发布:腾讯视频播放器mac 编辑:程序博客网 时间:2024/05/17 22:45

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)

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

10,双向链表(double linked list)

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

双向链表的插入操作:

删除操作:


11,总结




























0 0
原创粉丝点击