天下至深是学海,世间极顶是书山❗❗❗
《数据结构与算法》阅读笔记,强烈建议购买此书反复学习
坚持每天阅读习惯,总有一日量变为质变,最终通向成功✌️
这几天会先整理以前的笔记,加油
️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️
“程序 = 数据结构 + 算法”是计算机科学中著名的公式,该公式不仅阐明算法、数据结构与程序设计的重要性,也从一个方面阐述了数据结构与算法的密切关系。那么:
什么是程序?
程序就是计算机“指令”的组合,用来控制计算机的工作流程,实现一定的逻辑功能,从而完成某种任务。
什么是算法?
算法是程序的逻辑抽象,是解决客观问题的过程。
什么是数据结构?
数据结构则是现实世界的数据及其间关系的反映,分为逻辑结构和物理结构:客观事物自身所具有的结构特点称为逻辑结构,例如家谱是一种树形的逻辑结构;而逻辑结构在计算机中的具体实现称为物理结构,例如用于表示树形结构的指针或者数组。
数据结构与算法有什么用?用以模拟和解决实际的应用问题:
⭐计算机求解问题的核心是算法设计,而算法设计又高度依赖于数据结构,数据结构的选择则取决于问题本身的需求。
数据结构描述的是按照一定逻辑关系组织起来的待处理数据元素的表示及相关操作,分为数据的逻辑结构、数据的存储结构和数据的运算。
⭐数据的逻辑结构是从具体问题抽象出来的数学模型,反映了事物的组成组成结构以及事物之间的逻辑关系。
数据的逻辑结构可以用一个二元组来表示:
B = (K,R)
其中,K是数据结点组成的有穷集合,每一个节点代表一个数据或一组由明确结构的数据;关系集R是定义在结合K上的一组二元关系。只需要浅显的知道K是逻辑结构中各个结点的集合,R是这些节点之间关系的集合。
基本数据类型:如整数类型(integer)、实数类型(real)、布尔类型(bool)、字符类型(char)和指针类型(pointer)等。
复合数据类型:由基本数据类型组成而成的数据结构类型,如数组类型、字典类型等。
线性结构(linear structure)中的关系 r 称为线性关系,也称前驱关系。结点结合K中的每个结点在关系 r 上最多只有一个前驱结点和一个后继结点。例如:数组、链表、栈和队列等。
树形结构(tree structure)简称树结构或层次结构,其关系 r 一般称为层次关系。结点集合K中有且仅有一个结点 k0 ∈ K,在关系 r 中没有前驱,该节点称为树根(root)。除结点 k0 外,K中索里有结点都有且仅有一个前驱,但后继结点数目不加限制。
图结构(graph structure)有时也称为网络结构。图结构的关系 r 对集合K中结点的前驱和后继数目不加以任何约束。
树结构与图结构的基本区别就是"每个结点是否仅仅从属于一个直接前驱"。
线性结构和树形结构的基本区别是“每个结点是否仅有一个直接后继”。
数据的存储结构是指各种逻辑结构在计算机中的物理存储表示。例如,对于逻辑结构(K,R)其数据的存储结构就是建立一种由逻辑结构到物理存储空间的映射:
K → M(K:结点集合,M:存储器)
其中每一个结点 k ∈ K对应一个唯一的连续存储区域 c ∈ M。
同一种逻辑结构可以采用不同的表示方式,即采用不同的映射关系来建立数据的逻辑结构到存储结构的转换。例如:线性结构既可以采用顺序的方式来存储,形成顺序表;也可以采用链接的方式,得到链表。
⭐常用的基本存储映射
⭐在具体应用中,可根据需要选用以上四种存储方法或者其组合:例如,树形结构的子节点表表示的就是顺序和链接的结合。另外一个逻辑结构可以由多种不同的存储方案,因此在选择存储方法时,还要综合考虑定义在其上的运算和其算法的具体实现。
抽象意味着一个概念可能有多种实现方式:一旦一个抽象问题得到解决,则很多同类的问题便可以迎刃而解。用户自定义数据类型通常即是对多种可能的结构和实现的一种抽象。
NOTE:将用户自定义的类型称作抽象数据类型(abstract data type)
作为描述数据结构的一种理论根据,抽象数据类型可以看做是定义了一组操作的一个抽象模型。其特点是将数据和操作封装一起,使得用户程序只能通过抽象数据类型所定义的操作来访问其中的数据,从而实现信息的隐藏。
例如:整数的加、减、乘、除四则运算可以定义为一个抽象数据类型。
⭐抽象的数据类型可以看成是数据的逻辑结构以及在逻辑结构上定义的抽象操作。