数据结构--线性表以及其顺序存储结构

这里写目录标题

  • 线性表的定义和特征
    • 定义
    • 特征
  • 案例引入
    • 稀疏多项式
    • 链表实现多项式相加
    • 小结
  • 线性表的类型定义(抽象数据类型)
    • 定义格式
    • 基本操作
    • 小结
  • 线性表的顺序表示和实现
    • 实现1
      • 顺序存储表示
      • 顺序表中元素存储位置的计算
    • 实现2
      • 顺序表的优点
      • 问题出现
      • 结构体表示形式
    • 补充
      • 数组定义
      • c 语言动态内存分配
      • c++相关知识补充
      • 值传递时 指针类型不改实参值
      • 引用类型传递
        • 格式
    • 线性表基本操作的实现
      • 顺序表示意图
      • 基本操作的实现
        • 查找算法操作的实现
          • 算法设计
          • 算法分析
        • 插入算法的实现
          • 算法设计
          • 算法分析
        • 删除算法的实现
          • 算法设计
          • 算法分析
    • 总结

线性表的定义和特征

定义

数据结构--线性表以及其顺序存储结构_第1张图片
数据结构--线性表以及其顺序存储结构_第2张图片

例子:
数据结构--线性表以及其顺序存储结构_第3张图片

特征


案例引入

稀疏多项式


链表实现多项式相加

数据结构--线性表以及其顺序存储结构_第4张图片

小结


接下来要研究:抽象出逻辑结构和基本操作(也就是抽象数据类型的特征),然后实现其存储结构和基本操作

线性表的类型定义(抽象数据类型)

定义格式

数据结构--线性表以及其顺序存储结构_第5张图片

基本操作

数据结构--线性表以及其顺序存储结构_第6张图片
数据结构--线性表以及其顺序存储结构_第7张图片

数据结构--线性表以及其顺序存储结构_第8张图片
可用于做条件判断

数据结构--线性表以及其顺序存储结构_第9张图片
注意i的取值范围,插入时可以在1和n+1的位置


第二个是遍历,具体遍历的操作内容由visited()函数的功能决定

小结

数据结构--线性表以及其顺序存储结构_第10张图片
逻辑结构只是理清逻辑

存储结构,就是常见的高级语言程序

线性表的顺序表示和实现

实现1

顺序存储表示


数据结构--线性表以及其顺序存储结构_第11张图片
逻辑上相邻,物理上也相邻,地址连续

顺序表中元素存储位置的计算

实现2

顺序表的优点

数据结构--线性表以及其顺序存储结构_第12张图片

问题出现


线性表长度可变,但是数组长度固定,出现冲突

结构体表示形式


定义一个结构体,里面先是一个数组(该数组可以是基本数据类型,也可以是自定义数据类型,图中使用的是自定义元素类型),之后是一个表示当前长度的变量

该方式可以实现数组的长度可变,具体见下面“补充”

案例

*elem为指向一个数组的指针,是定义数组的另一种形式,数组名即为elem,较为常用这种定义方法

补充知识:

数据结构--线性表以及其顺序存储结构_第13张图片

补充

数组定义

数据结构--线性表以及其顺序存储结构_第14张图片

c 语言动态内存分配

数据结构--线性表以及其顺序存储结构_第15张图片
malloc后面括号里是参数,参数为开辟的字节数,可以用图中的方法计算,maxsize是指元素个数
malloc前面是强制类型转换,当当以结构体时用的是指针定义数组时,在强制类型转换时,要加星号,强转为指针

最后将得到的空间赋值给L.data
(L是自定义数据类型的变量,类似于java类的对象)

c++相关知识补充

数据结构--线性表以及其顺序存储结构_第16张图片
数据结构--线性表以及其顺序存储结构_第17张图片

值传递时 指针类型不改实参值

数据结构--线性表以及其顺序存储结构_第18张图片
这样在函数里只是改变了指针指向的变量,并没有对变量做操作

引用类型传递

格式

数据结构--线性表以及其顺序存储结构_第19张图片
可以理解为j和i公用一个地址区域

案例
数据结构--线性表以及其顺序存储结构_第20张图片

线性表基本操作的实现

顺序表示意图

基本操作的实现

数据结构--线性表以及其顺序存储结构_第21张图片
数据结构中, 算法开头status 的意思算法开头status 是一种数据类型的别名,这单词是状态的意思,在教材一般都有说明,如返回 的是状态信息,就用status 声明函数返回类型。而通常用以下的语句说明status:如typedef int status ;这说明其实status和int 型是相同的

typedef int Status;大致上是用来返回本函数是否执行成功,它的几个取值OK,ERROR,OVERFLOW也在同时定义使用的时候把这些东西定义好了

数据结构--线性表以及其顺序存储结构_第22张图片
数据结构--线性表以及其顺序存储结构_第23张图片
数据结构--线性表以及其顺序存储结构_第24张图片
数据结构--线性表以及其顺序存储结构_第25张图片

查找算法操作的实现

算法设计

算法分析

数据结构--线性表以及其顺序存储结构_第26张图片


ASL 就是指平均查找长度,也就是平均访问次数,是时间效率的一种
案例

插入算法的实现

算法设计

数据结构--线性表以及其顺序存储结构_第27张图片

数据结构--线性表以及其顺序存储结构_第28张图片

算法分析

数据结构--线性表以及其顺序存储结构_第29张图片
可以直接列出来,之后直接找规律,累加除以元素个数n即可

时间复杂度是o(n)

删除算法的实现

算法设计

数据结构--线性表以及其顺序存储结构_第30张图片

数据结构--线性表以及其顺序存储结构_第31张图片
数据结构--线性表以及其顺序存储结构_第32张图片

算法分析

数据结构--线性表以及其顺序存储结构_第33张图片

总结



数据结构--线性表以及其顺序存储结构_第34张图片
数据结构--线性表以及其顺序存储结构_第35张图片

你可能感兴趣的:(数据结构)