大话数据结构 -03 链表


一、线性表(List)

0个或者多个数据元素的有限序列


在一个较复杂的线性表中,一个数据元素可以由若干个数据项组成

 


二、线性表抽象数据模型

  

 

三、线性表的顺序存储结构

 

使用一维数组实现顺序存储结构

  

存取时间性能为O(1)

 

四、顺序存储结构的插入与删除

获取元素的操作

 

 

注意:将指针S传给指针ElemType *e,指针S与e指向相同的地址,当函数结束后,指针e被释放(释放指的是,e不再指向之前的内存块(S指向的地方),因此跳出函数,S指针仍然能正常使用)

插入操作

 

删除操作

复杂度:

最好的情况,插入或删除最后一个元素,时间复杂度为O(1)

最坏的情况,在第一个位置插入或删除元素,时间复杂度为O(n)
平均移动次数与中间元素的移动次数相等,为(n-1)/2,因此平均时间复杂度还是O(n)


五、链式存储结构

1. 链表

链表是一种动态数据结构,每个元素为一个「结点」,由数据域与指针域组成,每个结点中的指针域指向下一个结点。Head是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束。

单链表结构:

1 struct Node {

2 int Data;

3 struct Node *next;

4 };

 

有时为了方便地对链表进行操作,会在单链表的第一个结点前附设一个结点,称为头结点。头结点的数据域可以不存储任何信息,也可以存储线性表的长度信息等。


2. 头指针与头结点的区别

 

3. 链式存储的代码

若线性表为空表,则头结点的指针域为空。

 

仅有头指针的单链表

 

带有头结点的单链表

 

4. 单链表的读取

 

posted @ 2018-11-23 15:44  GuoXinxin  阅读(260)  评论(0编辑  收藏  举报