1.数据结构的研究
创始人
2024-05-31 17:12:58
0

数据结构很重要!
数据结构很重要!!
数据结构很重要!! !

思考

1.数据结构研究的内容有哪些?(What)
2.为什么要研究数据结构? ? (Why)
3.如何更好的研究数据结构? ? ?(How)

注:特别感谢青岛大学王卓老师

一.数据结构的研究

在这里插入图片描述

1.早期,计算机主要用于数值计算

例1.求解梁架结构中的应力。

1.抽象出数学模型:KU=M
2.提取操作对象:矩阵、向量
3.操作对象之间的关系(方程):一个矩阵
一个未知的向量=一个向量
4.用数学语言表示:矩阵、向量,都用数组表示
解决:计算方法
特点:数据元素间关系简单,计算复杂

在这里插入图片描述

2.中期,计算机更多的用于非数值计算

例1.学生学籍管理系统

在这里插入图片描述

类似的还有图书管理系统、人事管理系统、仓库管理系统、通讯录
操作对象:若干行数据记录
操作算法:查询、增加、删除、修改等
操作对象之间的关系:线性关系
数据结构:线性数据结构,线性表

例2.人机对弈问题

在这里插入图片描述

操作对象:棋局状态
操作算法:走棋,选择一种策略使棋局状态发生变化(一个格局派生出另一个格局)
操作对象之间的关系
数据结构:

操作对象:目录
操作算法:查找目录
操作对象之间的关系:树
数据结构:
在这里插入图片描述

例3.地图导航-求最短路径

操作对象:各地点及路的信息
操作算法:设置信号灯,求出各个可同时通行的路的集合
操作对象之间的关系:非线性关系,网状结构
数据结构:
在这里插入图片描述

3.综述

要想有效地使用计算机,就必须学习数据结构
背景:数值计算,大多用在公式或方程,已经满足不了需求了
解决:出现非数值计算方法,如表,树,图之类具有逻辑关系的数据。
数据结构:一门研究非数值计算的程序设计中计算机的操作对象,以及他们之间的关系和操作

二.基本概念和术语

1.数据

在这里插入图片描述

2.数据元素

在这里插入图片描述

3.数据项

在这里插入图片描述

4.数据对象

在这里插入图片描述

5.数据元素与数据对象

在这里插入图片描述

6.数据结构

在这里插入图片描述
在这里插入图片描述

7.逻辑结构&存储结构

在这里插入图片描述

1.逻辑结构的种类

划分1:
在这里插入图片描述

划分2:
在这里插入图片描述

2.存储结构的种类

在这里插入图片描述

1.顺序存储结构

在这里插入图片描述

2.链接存储结构

一个存储存储单元:元素+下一个元素地址
在这里插入图片描述

3.索引存储结构

在这里插入图片描述

4.散列存储结构

在这里插入图片描述

三.数据类型和抽象数据类型

1.基本数据类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.抽象数据类型(Abstract Data Type ,ADT)

抽象:从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。反映事物的本质和规律的方法。
抽象数据类型:
1.从具体问题中抽象出来的一个数学模型,以及在数学模型上的一组操作。
2.不考虑计算机内的具体存储结构与运算的具体实现算法。

1.圆
舍弃:大小、颜色
圆的抽象定义:到每个点的距离相等的点的集合
运算:构造园、求面积、求周长
在这里插入图片描述

2.复数
抽象实质:实部+虚部i
操作:+、-、*、/
在这里插入图片描述

3.形式定义
具体问题—》抽象成数据类型
简洁严谨文字描述:形式定义
在这里插入图片描述

D是数据对象
S是数据对象上关系的集合,数据和数据关系很多,构成一个集合
P是对数据和数据关系操作的集合
4.定义格式
在这里插入图片描述

操作结果:
在这里插入图片描述

5.定义举例
1.Circle的定义
在这里插入图片描述

2.复数的定义
在这里插入图片描述
在这里插入图片描述

3.总结

在这里插入图片描述
在这里插入图片描述

四.抽象数据类型的表示与实现

1.抽象数据类型

在这里插入图片描述

2.C语言实现抽象数据类型

在这里插入图片描述
在这里插入图片描述

3.抽象数据类型“复数”实现

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

五.算法和算法分析

1.算法的定义

在这里插入图片描述

2.算法的描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.算法与程序

在这里插入图片描述

4.算法特性

1.有穷性:步骤、时间有穷,最后结束
2.确定性:算法中的每一条指令必须有确切的含义,没有二义性。多次执行输出结果一样。
3.可行性:操作可以通过已经实现的基本操作执行有限次来实现。
4.输入:一个算法有零个或多个输入。
5.输出:一个算法有一个或多个输出。

5.算法设计要求

1.正确性:算法满足问题要求,能正确解决问题

在这里插入图片描述

2.可读性:算法主要是为了人的阅读和交流,计算机只用来执行。

在这里插入图片描述

3.健壮性(鲁棒性):处理出错的方法,不应是中断程序的执行,而是返回一个表示错误或错误性质的值

在这里插入图片描述

4.高效性:要求花费尽量少的时间和尽量低的存储需求

在这里插入图片描述

6.算法和算法分析

在这里插入图片描述

所以,要根据问题实际需要,综合平衡有所侧重,结合计算机的性能,数据量大小。

1.算法时间效率度量

在这里插入图片描述

2.事前分析方法

算法运行时间=一种简单操作所需的时间*简单操作次数
也即算法中每条语句的执行时间之和
*算法运行时间=每条语句的执行次数(累加)该语句执行一次所需的时间
在这里插入图片描述

背景:每条语句执行一次所需的时间,一般是随机器而异的。取决于机器的指令性能、速度以及编译的代码质量。
由机器本身软硬件环境决定的,它与算法无关。
解决:所以,我们可以假设执行每条语句所需的时间均为单位时间。
结果:算法运行时间=每条语句频度之和。

在这里插入图片描述

3.例子:俩个n*n矩阵相乘的算法可描述为

在这里插入图片描述

背景:便于比较,仅比较他们数量级,去除系数。

4.O(f(n)):算法渐进时间复杂度,简称时间复杂度

在这里插入图片描述

背景:一般情况下,不必计算所有操作的执行次数,只考虑算法中基本操作执行的次数(既然找数量级,只找贡献时间最大的语句)。

在这里插入图片描述

5.渐进时间复杂度意义

在这里插入图片描述

1.基本语句重复执行的次数:

● 算法中重复执行次数和算法的执行时间成正比语句
● 对算法运行时间贡献最大,执行次数最多
在这里插入图片描述

2.问题规模n:n越大算法的执行时间越长
在这里插入图片描述

6.分析算法时间复杂度的基本方法

找最高次项,数量级最大的运算。
在这里插入图片描述

基本语句:语句频度最大的那条语句
1.找出嵌套最深的那条语句
2.求出f(n)多项式(核心的一步)
3.找出f(n)最大项级,然后等于O(f(n))

在这里插入图片描述

1.时间复杂度是由嵌套最深语句的频度决定的

在这里插入图片描述

2.例子1:N*N矩阵相乘

在这里插入图片描述

3.例子2:三层for循环

在这里插入图片描述

3.例子3:分析以下程序段的时间复杂度

关键:找出来执行次数X与N的关系,并表示成n的函数
在这里插入图片描述

7.算法时间复杂度计算

在这里插入图片描述

8.算法时间复杂度

在这里插入图片描述

在这里插入图片描述

9.算法时间效率的比较

在这里插入图片描述

10.渐进空间复杂度

在这里插入图片描述

1.例子:一维数组逆序存放原数组

在这里插入图片描述

在这里插入图片描述

六.知识回顾

在这里插入图片描述

1.数据结构研究的内容有哪些?(What)

1.1基本概念和术语

1.数据结构

提取操作对象,找出操作对象之间的关系。

2.案例

学生学籍管理系统
对象:记录
关系:线性关系:
算法:增删查改

3.数据的定义

能输入计算机且能被计算机处理,的各种符号的集合。
数据是一种信息的载体,是对客观事物符号化的表示,能够被计算机识别、存储、加工。
分类:
1.数值型数据:整型、实数等
2.非数值数据:文字、图形、图像、声音等

4.数据元素

数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
简称元素,或称为记录、节点、顶点。

5.数据项

构成数据元素不可分割的最小单位。
就是一张表中字段中的数据。

6.数据、数据元素、数据项之间的关系

数据项是数据元素集合的子集
数据元素是数据集合的子集

7.数据元素与数据对象

1.数据元素:组成数据的基本单位
○ 与数据的关系:是集合的个体
2.数据对象:性质相同的数据元素的集合
○ 与数据的关系是:集合的子集

8.数据结构内容

数据结构
a. 结构:数据元素不是孤立存在的,它们之间存在着某种关系,数据元素相互之间的关系称为结构
b. 相互之间存在一种或多种特定关系的数据元素集合
c. 数据结构是带结构的数据元素的集合

内容
a. 逻辑结构:数据之间存在逻辑关系
b. 物理结构:数据元素及其关系在计算机内存中的映像
c. 数据的运算与实现:对数据元素可以施加操作,以及这些操作相应存储在计算机内存当中。

9.逻辑结构&存储结构

1.逻辑结构
a. 描述数据元素之间的逻辑关系
b. 与数据的存储无关,独立于计算机
c. 是从具体问题抽象出来的数据模型

2.物理结构(存储结构)
数据元素及其关系在计算机存储器中的结构

3.逻辑结构与存储结构的关系
逻辑结构是数据结构的抽象,存储结构是数据结构的实现
二者综合起来建立了数据元素之间的结构关系

10.逻辑结构的种类

划分1:
(1)线性结构
有且只有一个开始和一个终端节点,并且所有结点都最多只有一个直接前驱和一个直接后继。
例如:线性表、栈、队列、串

(2)非线性结构
一个节点可能有多个直接前趋和直接后继
例如图

划分2:
(1)集合结构:同属于一个集合
(2)线性结构:元素之间存在一对一的线性关系
(3)树形结构:数据元素之间存在着一对多关系
(4)图、网状结构:数据元素存在多对多关系

11.存储结构的种类

  1. 顺序存储
    一组连续的存储单元依此存储数据元素,数据之间的逻辑关系由存储位置来表示。
    C语言中用数组来实现顺序存储结构。
  2. 链式存储
    用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示。
    C语言中用指针来实现链式存储结构。
  3. 索引存储
    存储结点信息的同时,还建立附加索引表。
    索引项:关键字,地址,能唯一标识一个结点的那些数据项。
    稠密索引:每个结点在索引表中都有一个索引项。
    稀疏索引:一组结点在索引表中只对应一个索引项。
  4. 散列存储
    根据结点的关键字直接计算出该结点的存储地址。

1.2基本数据类型和抽象类型

1.基本数据类型

数据类型:C语言中:
基本数据类型:int,char,float,double
构造数据类型:数组,结构体,枚举,共用体
指针、空(void)类型

用户也可以用typedef自己定义数据类型
基本的数据结构可以用数组,字符串。

数据类型的作用:
1.约束变量或常量的取值范围(int,char)
2.约束变量或常量的操作(+ - * /)
不能直接用数据类型表示的,还有另外一些数据结构:栈、队列、树、图。

数据类型:一组性质相同的值的集合,定义与这个值集合上的一组操作总称。
数据类型=值的集合+值集合上的一组操作。

2.抽象数据类型

抽象:反映事物的本质和规律的方法。
抽象数据类型:
1.从具体问题中抽象出一个数学模型,以及在数学模型上的一组操作
2.不考虑计算机内的具体存储结构与运算具体实现算法
例子:
舍弃:大小、颜色

圆的抽象定义:到每个点的距离相等的点的集合
运算:构造园、求面积、求周长

3.形式定义

具体问题—》抽象成数据类型
形式定义:简洁严谨文字描述
D是数据对象
S是数据对象上关系的集合,数据和数据关系很多,构成一个集合
P是对数据和数据关系操作的集合

4.定义格式

ADT 抽象数据类型名{
数据对象<数据对象的定义>
数据关系<数据关系的定义>
基本操作<基本操作的定义>
} ADT 抽象数据类型名

基本操作定义格式:
基本操作名(参数表:提供输入值,引用参数&打头,能将返回操作结果)
初始条件:(初始条件描述:若满足,执行下一步,反之)
操作结果:(操作结果描述:变化状况应返回)

5.定义举例

ADT 抽象数据名{
Data
数据对象的定义
数据元素之间逻辑关系的定义
Operation
操作1
初始条件
操作结果描述
操作2
初始条件
操作结果描述
}

1.Circle的定义
ADT Circle{
数据对象:D={r,x,y|r,x,y均为实数}
数据关系:R={|r是半径,是圆心坐标}
基本操作:
Circle(&C,r,x,y)
操作结果:构造一个圆
double Area©
初始条件:圆已存在
操作结果:计算面积
}ADT Circle

2.复数的定义
ADT Complex{
数据对象:D={r1,r2|r1,r2都是实数}
数据关系:R={|r1是实部,r2是虚部}
基本操作:
assign(&C,v1,v2)
初始条件:空的复数C已存在
操作结果:构造复数C,r1,r2分别被赋以v1,v2
destroy(&C)
初始条件:复数C以存在
操作结果:复数C被销毁
}ADT Circle

GetReal(Z,&realPart)
初始条件:复数以存在。操作结果:用realPart返回复数Z的实部值。
GetReal(Z,&ImagPart)
初始条件:复数以存在。操作结果:用ImagPart返回复数Z的虚部值。
Add(Z1,Z2,&sum)
初始条件:Z1,Z2都是复数。操作结果:sum返回俩个复数Z1,Z2的和。

6.总结

在这里插入图片描述

1.3抽象数据类型的表示与实现

1.抽象数据类型
一个问题抽象为一个抽象数据类型

2.C语言实现抽象数据类型
用已有数据类型、函数定义表示操作

3.抽象数据类型“复数”实现
typedef struct{
float realpart;
float imagpart;
}Complex
void assign(Complex *A,float real,float imag);
void add(Complex *C,Complex A,Complex B);

void assign(Complex *A,float real,float imag){
A->realpart=real;
A->imagpart=imag;
}
void add(Complex *C,Complex A,Complex B){
C->realpart=A.realpart+B.realpart;
C->imagpart=A.imagpart+A.imagpart;
}

#include
int main(){
Complex z1,z2,z3,z4,z;
float realpart,imagpart;
assign(z1,8.0,7.5); //构造复数z1
assign(z2,6.0,9.5); //构造复数z2
add(z3,z1,z2); //俩个复数相加
multiply(z4,z1,z2); //俩个复数相乘
if(divide(z,z1,z2)){
GetReal(z,realpart);
GetImag(z,imagpart);
}
return 0;
}

1.4算法和算法分析

1.算法的定义
对特定问题求解方法和步骤的一种描述,它是有限的指令序列。
每一个指令表示一个或多个操做。

2.算法的描述
自然语言:英文、中文
流程图:传统流程图、NS流程图
伪代码:类C语言
程序代码:C,Java语言

3.算法与程序
算法:解决问题的一种方法或一个过程,考虑如何将输入转换成输出,一个问题可以有多种算法。
程序:用某种程序设计语言对算法的具体实现
程序=数据结构+算法
数据结构通过算法来实现操作
算法根据数据结构设计程序

4.算法特性

  1. 有穷性:步骤、时间有穷,最后结束
  2. 确定性:没有二义性,每次输入一样的,最后都能得到一样的结果
  3. 可行性:可以实现的操作
  4. 输入:可以有0个或多个输入
  5. 输出:有一个或多个输出

5.算法设计要求

  1. 正确性:满足程序要求,能正确解决问题
  2. 可读性:算法主要是为了人的阅读和交流,其次才是为了计算机执行,因此算法应该易于人的理解
  3. 健壮性:进行错误处理,而不是直接终端程序的执行
  4. 高效性:要求花费尽量少的时间和尽量低的存储需求

6.算法和算法分析
正确性->健壮性->可读性->算法的效率

算法的效率:
1.时间效率:算法执行过程中所耗费的时间
2.空间效率:算法执行过程中所耗费的存储空间

注:要根据实际问题需求,综合平衡,有所侧重,结合计算机的性能,数据量大小。

2.为什么要研究数据结构? ? (Why)

2.1为什么研究数据结构?

1.时间推移

随着计算机产业的发展应用领域,数值计算领域已经不能满足了(纯粹的数值计算)
非数值计算领域的需求量大增,产生了很多新的、杂乱无章的数据、具有一定结构的数据需要处理。比如(声音、图片、视频、字符…)

开始处理这些杂乱无章的数据:
逻辑结构:数据元素对象及其之间的关系
存储结构:数据对象及关系映射存储到计算机中
算法:实现数据对象之间的“运算”关系。

2.传统数据类型数据范围和操作有一定限制

如果数据类型表示的不合适,那么可以选择另外一些数据结构:栈、队列、树、图。

2.2为什么要研究基本概念和术语?

只有清晰知道基本概念,才能更好的学习数据结构
基本概念:

  1. 数据
  2. 数据元素
  3. 数据项
  4. 数据对象
  5. 数据元素和数据对象
  6. 数据结构
  7. 逻辑结构&存储结构

数据类型:

  1. 基本数据类型
  2. 抽象数据类型

算法:

  1. 算法的定义
  2. 算法的描述
  3. 算法与程序
  4. 算法特性
  5. 算法设计要求

3.如何更好的研究数据结构? ? ?(How)

搞清楚,基本的数据定义,扎实基础。

用心
用心、用心
用心、用心、用心

知其然、知其所以然!!!

多学习,多思考,多总结,多输出,多交流 (five kills)~~~

相关内容

热门资讯

分手了,还总是想起过往点点滴滴... 分手了,还总是想起过往点点滴滴,感觉像没有分手似的,做什么事情都没有心情赶紧走出阴影吧时间会冲淡一切...
桃花满天飞,缘分天注定,将喜结... 桃花满天飞,缘分天注定,将喜结良缘,相约白首的星座有哪些呢?相约白首的星座有天秤座,狮子座,金牛座,...
“长腿姐姐”王子文,不仅颜值高... “长腿姐姐”王子文,不仅颜值高演技也不差,你是从哪部剧开始喜欢她的?我是从欢乐颂的时候开始喜欢她的,...
说说那些先结婚后恋爱的人都是怎... 说说那些先结婚后恋爱的人都是怎样的心理吧?其实我觉得先结婚后恋爱的人,他们都是有一种比较着急,这一些...
100分求一首关于家庭有儿有女... 100分求一首关于家庭有儿有女[龙凤胎]的打油诗精品俊朗小伙真帅好洞伏哥,杰令美女送秋波。雨后彩虹淑...
一首很嗨的英文歌,开头是we ... 一首很嗨的英文歌,开头是we are hi hi ho, we are hi hi hey。歌名什么...
男友酒后吻我,就会时不时的咬我... 男友酒后吻我,就会时不时的咬我,这是男人什么心里?爱吗?信息太少,给不了太多建议。有些人接吻时会有些...
找一部很久以前的小说,主角姓夏... 找一部很久以前的小说,主角姓夏,几个兄弟叫夏流,夏贱。兄弟找到了没,找到了告诉我一下豪血战记 作者:...
人咳嗽的声音所对应的字是? 人咳嗽的声音所对应的字是?咳咳咳,咳嗽声一般用咳咳代替咳咳咳,就是这几个字,与我们合作的生意,也就是...
漏漏漏是什么梗? 漏漏漏是什么梗?这首歌本身是毁腔一个英谨余御语的儿歌。但是被一个发音不太准确的,大叔在短视频平台经常...
这是丛林中的一个早晨豹子感觉饿... 这是丛林中的一个早晨豹子感觉饿了,而他最喜欢的早餐是猴子,可是豹子掉进了一口水井的英文怎么写贾迎春 ...
大话西游里的秦汉,跟秦祥林是谁... 大话西游里的秦汉,跟秦祥林是谁?秦汉是星哥瞎编的,秦祥林是至尊宝,就是星哥。给分谢谢!~~
我今年27了,为什么没有男生追... 我今年27了,为什么没有男生追我呢?可能是你长得不好看,因为有些男生还是比较注重外貌的。作为一个女孩...
化妆品:欧珀莱分几大系列 化妆品:欧珀莱分几大系列要具体一点的雪颜 清润 抗皱系列挺全的。基础的是均衡系列,调节水油平衡的...
我要郑渊洁的童话,越多越好 我要郑渊洁的童话,越多越好我要郑渊洁的童话,越多越好我只知道舒克和贝塔
大寨指什么 大寨指什么大寨是山西的一个村子!
求这个视频的歌名字。 求这个视频的歌名字。Gotta Tell You - Samantha Mumba线索太少!Sorr...
歌曲《疯丫头》原唱 歌曲《疯丫头》原唱吴婷笑档带。《疯丫头》收录在专辑《碰芦开蠢做始爱上你》,是2011年吴婷演唱的歌曲...
如何彻底清除墙上的青苔? 如何彻底清除墙上的青苔?老屋的墙面上长满了青苔,很烦人~拜求有什么法子可以方便快捷地清除掉?可以请清...
动画黑礁出到多少集了?每季有多... 动画黑礁出到多少集了?每季有多少集?三季 集数分别是12 24 5【ova】3季29集,1.2季...