Ps:本专题主要用于记录在学习过程中所学习到的知识点及所遇到的问题及对问题的理解和解答。用于记录学习过程中学到的知识点的文章,其标题用K(knowledge)开头,用于记录实践过程中所遇到的问题及其问题的理解和解答的文章,标题用Q(question)开头。
欢迎各位大佬指出本文章的问题所在,同时欢迎转载本系列博文,只需在文章开头处著名转载的出处即可。
概念:
在学习数据结构前,可以首先简单的了解下何为数据,数据元素,数据项,数据对象,及其各个概念之间的联系。最后了解下数据结构的概念。
数据:数据是对客观事物的符号表示,所有能被输入到计算机中,且能被计算机处理的符号的总称;是计算机操作对象的集合。是计算机处理的信息的某种特定的符号表示形式。
数据元素:是数据(集合)中的一个“个体”,是数据结构中讨论的基本单位,不同场合也叫做结点(节点),顶点,记录。
数据项:是数据元素的组成部分,一个数据元素可以由若干个数据项组成。
数据对象:是性质相同的数据元素的集合。
Ps:数据对象中的数据元素不会是孤立的,而是彼此相关的,这种彼此之间的关系成为“结构”
数据结构:是相互之间存在一种或多种关系的数据元素的集合。
Ps:可以忽略以上的各个概念,其并不影响对数据结构的学习,由于个人习惯,在学习任何东西的时候,都会习惯性的去了解清楚其相关的背景。
逻辑结构及其分类:
(1)数据的逻辑结构是指各个数据元素之间的逻辑关系,是呈现在用户面前的,能够感知到的数据元素的组织形式
(2)根据数据元素之间的逻辑关系的特性,可以将数据结构分为如下4类:
1.集合 2.线性结构 3.树形结构 4.图形结构
(3)逻辑结构可用二元组形式定义为Data_Structures=(D,R),其中D为数据元素的有限集合,R为D上关系的有限集合
存储结构及其分类:
(1)数据的存储结构(物理结构)是数据的逻辑结构在计算机中的实现。它包括数据元素值在计算机中的存储表示和逻辑关系在计算机中的存储表示这两个部分,是依赖于计算机的
(2)数据元素之间逻辑关系的存储表示有4种:
1.顺序存储方式 2.链式存储方式 3.索引存储方式 4.散列存储方式
对于顺序存储方式,其特点:顺序存储方式是指将所有的数据元素存放在一片连续的存储空间中,并使逻辑上相邻的数据元素其对应的物理位置也相邻。即数据元素的逻辑位置关系和物理位置关系保持一致。其可以进行随机的存取。
对于链式存储方式,其特点:链式存储方式不要求将逻辑上相邻的数据元素存储在物理上相邻的位置,即数据元素可以存储在任意的物理位置上,每一个数据元素所对应的存储表示由两部分组成,一部分存放数据元素值本身,另一部分用于存放表示逻辑关系的指针(即下一个元素的地址)。可以进行顺序存取。(因为其在获取下一个元素的时候,必须要求知道上一个元素,之后,通过上一个元素指向该元素的指针来获取该元素)
对于逻辑结构和物理结构之间的关系,其可以理解为一对多的关系,即一种逻辑结构可以采用多种物理结构来进行存储,也就是说,一种逻辑结构可以采用多种物理存储方式。
由于在接触数据结构的时候,不可避免的要求接触到基本的一些算法,为此,以下简单的介绍下算法的基本概念
算法,是对特定问题进行求解的步骤的一种描述。它是指令的有限序列,其中,每条指令表示一个或多个操作。
算法具有五个性质:有穷性,确定性,有效性,输入,输出。算法不一定都要求这五个性质都必须满足。但是,其前三个要求必须进行满足。因为不满足前三个要求的算法并没有什么价值。
算法设计的目标:正确性,可读性,健壮性,高效率(时间和空间)
算法评判的标准:时间复杂度和空间复杂度
对于时间复杂度,其一般采用大O的表示方法,其时间复杂度之间的关系如下:
1)多项式时间算法的时间复杂度:O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)(其中n—>∞,当然,这里的∞并不是数学意义上的无穷,在这只是用于表示”很大但是有限”的概念,下同)
2)指数时间算法的时间复杂度:O(2n)<O(n!)<O(nn)(其中n—>∞)