数据结构----第二章线性表1

注意:数据结构三要素--逻辑结构、数据的运算、存储结构(物理结构)

一、线性表的基本操作

Tips:对数据的操作(记忆思路)--创销、增删改查;

          C语言函数的定义--<返回值类型>函数名(<参数1类型>参数1,<参数2类型>参数2,......)

          实际开发中,可根据实际需求定义其他的基本操作

          函数名和参数的形式、命名都可改变(命名要有可读性)

 二、顺序表

 1.顺序表的实现----静态分配

 2.顺序表的实现---动态分配

 

 顺序表的特点:1.随机访问,即可以在O(1)时间内找到第i个元素。代码实现:data[i-1];静态、动态分配都一样

2.存储密度高,每个节点只存储数据元素

 3.拓展容量不方便(即便采用动态分配的方式实现,拓展长度的时间复杂度也比较高)

4.插入,删除操作不方便,需要移动大量元素

                   

 3.顺序表的插入删除

1)插入

注意位序、数组下标的关系,并从后面的元素依次移动

如果出现顺序表已经存满的情况,代码可以做如下修改

2)插入操作的时间复杂度

3)删除

 

 

 4.顺序表的按位查找

 5.顺序表的按值查找

 

 三、单链表

一、单链表的定义

1.什么是单链表?

2. 用代码定义一个单链表

 

 

 3.不带头结点的单链表

 4.带头结点的单链表

 5.不带头结点vs带头结点

 二、单链表的插入与删除

1.按位序插入(带头结点)--平均时间复杂度:0(n)

 

 

 

 

 2.按位序插入(不带头结点)

 3.指定结点的后插操作

 

 直接调用后插操作的函数就可以了

 4.指定结点的前插操作

1)传入头指针

 2)不传入头指针

 

 5.按位序删除(带头结点)

 

 6.指定结点的删除

如果不带头结点,删除第一个元素,是否需要特殊处理?

 

 7.封装的好处

小功能模块化,代码逻辑清晰

 三、单链表查找(基于带头结点的情况)

1.按位查找

 

 

 2.封装(基本操作)的好处

避免重复代码,简洁,易维护

 3.按值查找

 

 4.求表的长度

 

 四、单链表的建立

 

 

头插法,尾插法:核心就是初始化操作,指定结点的后插操作