数据结构知识总结笔记------第一章:绪论 数据结构的基础概念及术语,算法描述与算法特性分析依据

第一章 绪论

1.1、 数据结构简介

数据结构:数据结构是一门讨论“描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中如何表示和实现”的学科。
程序=算法+数据结构。
数据结构主要是为研究和解决如何使用计算机组织和处理非数值问题而产生的理论、技术和方法。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
在这里插入图片描述

1.2、 数据结构中的基本概念和术语

1.2.1、数据
数据是对客观事物的符号表示,在计算科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。数据也可以说是信息的载体,是描述客观事物属性的数、字符和所有能输入到计算机中并被计算机程序识别和处理的符号的集合。

1.2.2、数据元素
数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

1.2.3、数据项
数据项是构成数据元素的不可分割的最小单位。一个数据元素可以由多个数据项组成。例如:一本书的书目信息作为一个数据元素,书目信息中的每一项(如书名、作者等)为一个数据项。

1.2.4、数据对象
数据对象是性质相同的数据元素的结合,是数据集合中的一个子集。例如:字母字符数据对象是集合C={’A’,’B’, …’Z’}。

1.2.5、数据类型
数据类型是一个值的集合和定义在此集合上的一组操作的名称。
(1) 原子类型:其值不可再分的数据类型。
(2) 结构类型:其值可再分为若干成分(分量)的数据类型。
(3) 抽象数据类型:抽象数据组织及与之相关的操作。

1.2.6、抽象数据类型(ADT:Abstract Data Type)
抽象数据类型(ADT:Abstract Data Type)是指一个数学模型及定义在该模型上的一组操作。抽象数据类型可以通过固有数据类型来表示和实现,即利用处理器中已经存在的数据类型来说明新的结构,用已经实现的操作来组合新的操作。
抽象数据类型通常用(数据对象、数据关系、基本操作集)这样的三元组来表示抽象数据类型。
抽象数据类型格式定义:

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

1.2.7、数据结构
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构包括三部分的内容:逻辑结构、存储结构和数据的运算。数据的逻辑结构和存储结构是相互依赖,密不可分的两部分,一个算法的设计取决于算法所选的逻辑结构,算法的实现依赖于所采用的存储结构。

1.3、 数据结构的三大重要要素

1.3.1、数据结构的逻辑结构

数据的逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据。它与数据的存储结构无关。
数据的逻辑结构可以分为两大类:
(1)线性结构
线性结构是一个数据元素的有序(次序)的集合。线性结构四个基本特征:
1)集合中必存在唯一的一个“第一个元素”。
2)集合中必存在唯一的一个“最后一个元素”。
3)除了最后一个元素之外,其他数据元素都有唯一的“后继”,即除了本身,后面还有一个元素。
4)除了第一个元素之外,其他数据元素都有唯一的“前驱”,即除了本身,前面还有一个元素。
数据结构中,线性结构是指数据元素之间存在着“一对一”的线性关系的数据结构。
线性结构举例:线性表是典型的线性结构,例如:(a1,a2,a3,…an),a1为第一个元素,an为最后一个元素,此集合为一个线性结构的集合。

(2)非线性结构
非线性结构中的结点存在着一对多的关系,非线性结构又可以分为树形结构和图形结构。

集合:结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他关系。
线性结构:结构中的数据元素之间只存在一对一的关系。
树形结构:结构中的数据元素之间只存在一对多的关系。
图状结构或网状结构:结构中的数据元素之间多对多的关系。
在这里插入图片描述

数据的逻辑结构分类如图:
在这里插入图片描述

1.3.2、数据结构的存储结构(物理结构)

数据的存储结构是指数据结构在计算机中的表示(又称映像),也称物理结构。数据的存储结构包括数据元素的表示和关系的表示。数据的存储结构是用计算机语言实现的逻辑结构,它依赖于计算机语言。
数据元素之间的关系在计算机中主要有两种不同的表示方法:顺序映像和非顺序映像。对应的存储结构是顺序存储结构和链式存储结构。顺序映像是借助数据元素在存储器中的相对位置来表示数据元素之间的逻辑关系;非顺序映像是借助指针表示元素之间的逻辑关系。
数据的存储结构主要有顺序存储、链式存储、索引存储和散列存储。

(1) 顺序存储
将逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。
优点:可以实现随机存取,每个元素占用最少的存储空间。
缺点:只能使用相邻的一整块存储单元,会产生许多外部碎片。

(2) 链式存储
不要求逻辑上相邻的元素在物理位置上也相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。
优点:不会出现碎片的情况,可以充分利用所有存储单元。
缺点:每个元素因为存储指针而占用额外的存储空间,且只能顺序存取。

(3) 索引存储
存储元素信息的时候,建立附加的索引表。索引表中的每项称为索引项,索引项一般形式是(关键字,地址)。
优点:检索速度快。
缺点:增加附加的索引表会占用较多的存储空间。增加和删除数据的时候要修改索引表,会浪费较多的时间。

(4) 散列存储
根据元素的关键字之间计算出该元素的存储地址,又称Hash存储。
优点:检索、增加和删除节点操作都很快。
缺点:如果散列函数选择不好,可能会出现存储单元的冲突,解决冲突会增加时间和空间的开销。

1.3.3、数据的运算

数据的运算是在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,指出运算的功能,运算的实现是针对存储结构的,指出运算的具体操作步骤。

1.4、 算法与算法分析

1.4.1、算法
算法是对特定问题求解步骤的一种描述,是指令的有限序列,其中每条指令表示一个或多个操作。算法也可理解为由基本运算及规定的运算顺序所构成的完整的解题步骤。

1.4.2、算法的五个特性

(1)有穷性
一个算法(对任何合法的输入值)必须在有限的步之后结束。

(2)确定性
算法的每条指令必须要有明确的含义,不会产生二义性,即对于相同的输入只能得出相同的输出。

(3)可行性
一个算法是可行的,算法的描述是都是可以通过已经实现的基本运算执行有限次来实现的。

(4)输入
一个算法有零个或多个输入,这些输入取自某个特定的对象的集合。

(5)输出
一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。

1.4.3 算法的设计目标及好的算法的目标

(1)正确性
算法应该可以正确的解决求解问题。

(2)可读性
算法有良好的可读性,能够方便人们理解。

(3)健壮性
输入非法数据的时候,算法可以适当的做出反应及处理,不会产生莫名其妙的输出结果或BUG。

(4)高效率与低存储需求
高效率是指算法执行的时间短,存储量需求是指算法执行过程中所需的最大存储空间,这两个方面都与问题的规模有关。

1.4.4、算法的效率的评估原则

(1)时间复杂度
一个语句的频度是指该语句在算法中被重复执行的次数。算法时间复杂度记为
T(n)=O(f(n))
常见的渐进时间复杂度:
在这里插入图片描述

(2)空间复杂度
算法的空间复杂度S(n)定义为该算法所耗费的存储空间,它是问题规模n的函数。渐进空间复杂度也简称为空间复杂度,记为
S(n)=O(g(n)).
算法原地工作是指算法所需的辅助空间为常量,即O(1)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DKPT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值