参考网课数据结构-青岛大学-王卓-第二周
参考书籍《数据结构C语言版第二版》 中国工信出版集团 人民邮电出版社出版 严蔚敏 编著
2线性表
线性表定义
定义:有n个数据元素(结点)组成的有限序列,元素间要具有相同特性。
线性表的顺序存储
知道头元素地址可以实现计算任意一个元素的地址。若一个元素占用l个单位,则
LOC(ai)=LOC(a1)+(i−1)×l
线性表的类型定义例子
补充-C数组动态内存分配
若把*data
改为data[]
就是静态分配的写法。
malloc(m) //函数效果开辟m个单位的内存并返回头元素地址
补充-C++动态内存分配
补充-C语言函数的变量传递
值传递:函数内改变传入值,不影响外部的变量。形参改变不影响实参。
两种指针传递的对比
情形一:
这种情形会导致外部的实参发生交换。
情形二:
这种情形不会导致外部的实参发生交换。
指针变量的地址是自己的地址,但是,值是指向的变量的地址
。
两个情形的主要区别在于交换函数交换的东西不同,情形1交换的是指针指向的内容;情形2交换的是指针的指向
引用类型作为参数
- 效果上,和指针传递一样,会改变实参。
- 内存中不会产生实参的副本,效率会更高。
- 后续十分常用。
数组做函数的参数
线性表的顺序储存表示
逻辑结构(从1开始)与物理结构(从0开始)的储存标号差1
若如下定义一个顺序表,有两种常用访问元素方法
调用元素方式1
调用元素方式2
Status
指的通常是返回值类型
elemtype
指的通常是元素类型
顺序表的基本操作的实现
线性表的初始化(参数用引用)
销毁线性表
清空线性表
求表长
判断表是否为空
顺序表的取值
顺序表的主要好处:随机存取机制。存取任何一个元素都可以用下标直接获得,算法复杂度常数阶O(1)。
顺序表的查找
顺序查找的平均查找长度ASL,其中Pi表示第i个记录呗查找的概率,Ci表示第i个记录被查找需要比较的次数(循环要执行多少次)
ASL=i=1∑nPiCi
平均移动次数与时间复杂度:O(n)
顺序表的插入
ListInsert(&L,i,e)
—在表L的第i个位置的前面,插入元素e
平均移动次数与时间复杂度:n/2 O(n)
顺序表的删除
平均移动次数与时间复杂度:(n−1)/2 O(n)
上面三个是重点基本操作,时间复杂度均为O(n),空间复杂度均为O(1)
顺序表的缺点:
插入元素时候需要移动大量元素
浪费储存空间
数据元素个数不能自由扩充