这里写目录标题
- 线性表的定义和特征
- 定义
- 特征
- 案例引入
- 稀疏多项式
- 链表实现多项式相加
- 小结
- 线性表的类型定义(抽象数据类型)
- 定义格式
- 基本操作
- 小结
- 线性表的顺序表示和实现
- 实现1
- 顺序存储表示
- 顺序表中元素存储位置的计算
- 实现2
- 顺序表的优点
- 问题出现
- 结构体表示形式
- 补充
- 数组定义
- c 语言动态内存分配
- c++相关知识补充
- 值传递时 指针类型不改实参值
- 引用类型传递
- 格式
- 线性表基本操作的实现
- 顺序表示意图
- 基本操作的实现
- 查找算法操作的实现
- 算法设计
- 算法分析
- 插入算法的实现
- 算法设计
- 算法分析
- 删除算法的实现
- 算法设计
- 算法分析
- 总结
线性表的定义和特征
定义
例子:
特征
案例引入
稀疏多项式
链表实现多项式相加
小结
接下来要研究:抽象出逻辑结构和基本操作(也就是抽象数据类型的特征),然后实现其存储结构和基本操作
线性表的类型定义(抽象数据类型)
定义格式
基本操作
可用于做条件判断
注意i的取值范围,插入时可以在1和n+1的位置
第二个是遍历,具体遍历的操作内容由visited()函数的功能决定
小结
逻辑结构只是理清逻辑
存储结构,就是常见的高级语言程序
线性表的顺序表示和实现
实现1
顺序存储表示
逻辑上相邻,物理上也相邻,地址连续
顺序表中元素存储位置的计算
实现2
顺序表的优点
问题出现
线性表长度可变,但是数组长度固定,出现冲突
结构体表示形式
定义一个结构体,里面先是一个数组(该数组可以是基本数据类型,也可以是自定义数据类型,图中使用的是自定义元素类型),之后是一个表示当前长度的变量
该方式可以实现数组的长度可变,具体见下面“补充”
案例
*elem为指向一个数组的指针,是定义数组的另一种形式,数组名即为elem,较为常用这种定义方法
补充知识:
补充
数组定义
c 语言动态内存分配
malloc后面括号里是参数,参数为开辟的字节数,可以用图中的方法计算,maxsize是指元素个数
malloc前面是强制类型转换,当当以结构体时用的是指针定义数组时,在强制类型转换时,要加星号,强转为指针
最后将得到的空间赋值给L.data
(L是自定义数据类型的变量,类似于java类的对象)
c++相关知识补充
值传递时 指针类型不改实参值
这样在函数里只是改变了指针指向的变量,并没有对变量做操作
引用类型传递
格式
可以理解为j和i公用一个地址区域
案例
线性表基本操作的实现
顺序表示意图
基本操作的实现
数据结构中, 算法开头status 的意思算法开头status 是一种数据类型的别名,这单词是状态的意思,在教材一般都有说明,如返回 的是状态信息,就用status 声明函数返回类型。而通常用以下的语句说明status:如typedef int status ;这说明其实status和int 型是相同的
typedef int Status;大致上是用来返回本函数是否执行成功,它的几个取值OK,ERROR,OVERFLOW也在同时定义使用的时候把这些东西定义好了
查找算法操作的实现
算法设计
算法分析
ASL 就是指平均查找长度,也就是平均访问次数,是时间效率的一种
案例
插入算法的实现
算法设计
算法分析
可以直接列出来,之后直接找规律,累加除以元素个数n即可
时间复杂度是o(n)
删除算法的实现
算法设计
算法分析
总结