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)~~~

相关内容

热门资讯

有没有主角是植物的修仙小说?多... 有没有主角是植物的修仙小说?多多益善。落花时节又逢君,花妖的侧重爱情的极品超能少年
痞子蔡《第一次亲密接触》经典话... 痞子蔡《第一次亲密接触》经典话语我在你香烟上写下自己的名字...这不是补肾的方法,这样的做法也是错误...
鸟兽和木匠读后感 鸟兽和木匠读后感鸟兽和木匠读后感 《鸟兽与木匠》读后感 星期天,我读了一本书,叫《鸟兽与木...
高富帅的具体标准是什么? 高富帅的具体标准是什么?高富帅没有固定标准随着时代不同估计高会变更高富会更多才算是富帅,不同人心中的...
求,嫁给一个死太监的全文 求,嫁给一个死太监的全文密码:82cm
获奖过的讲文明,懂礼貌的手抄报... 获奖过的讲文明,懂礼貌的手抄报有哪些很多你可以去网上搜一定会有你需要的
孟母三迁原文及翻译 孟母三迁原文及翻译孟母三迁原文及翻译如下:【原文】邹孟轲母,号孟母。其舍近墓。孟子之少时,嬉游为墓间...
好看技术流的网游小说 好看技术流的网游小说网游之盗版神话网游之纵横天下网游之双手剑等等的!!!这基本不错给分啊!!!!
女孩于海24小时一元一分正规麻... 加V【ab120590】【hf420624】【mj120590】红中癞子、跑得快,等等,加不上微信就...
关注麻将24小时红中麻将群@... 微【ab120590】 【mj120590】【hf420624】等风也等你。喜欢打麻将的兄弟姐妹们、...
揭秘一元一分红中麻将群202... 微【ab120590】 【mj120590】【hf420624】(广东一元一分红中癞子爆炸码麻将群)...
玩家必看正规一块红中麻将群全面... 1.进群方式《ab120590》或者《mj120590》《hf420624》--QQ(4434063...
时下最流行资讯一块一分24小时... 一元一分麻将群加群主微【ab120590】【hf420624】 【mj120590】等风也等你。喜欢...
到哪里找盘点十大一元一分麻将群... 微【ab120590】 【mj120590】【hf420624】(广东一元一分红中癞子爆炸码麻将群)...
《西瓜视频》24小时不熄火跑的... 群主微信:【ab120590】 【mj120590】【hf420624】没有三缺一的无奈,手机上的麻...
哪里寻找一元一分红中麻将群20... 1.亮点:一元红中麻将微信“群”—ab120590—hf420624—mj120590—客服Q443...
推荐正规红中麻将跑的快群202... 微【ab120590】 【mj120590】【hf420624】等风也等你。喜欢打麻将的兄弟姐妹们、...
参观一元红中麻将群2024已更... 微【ab120590】 【mj120590】【hf420624】等风也等你。喜欢打麻将的兄弟姐妹们、...
西瓜视频上下分正规红中麻将群@... 加V【ab120590】【hf420624】【mj120590】红中癞子、跑得快,等等,加不上微信就...
我来教大家广东24小时在线一元... 认证群主微信微【ab120590】 【mj120590】【hf420624】(一元俩元红中麻将)(跑...