《数据结构C语言版》——绪论《笔记》
一.基本概念和术语
1.数据,数据元素, 数据项,数据对象
- 数据:是客观事物的符号表示,是所有能够输入到计算机中并被计算机程序处理的符号的总称。
- 数据元素:是数据的基本单位,数据元素用于完整地描述一个对象。
- 数据项:是组成数据元素的,有独立含义的,不可分割的最小单位。
- 数据对象:是性质相同的数据元素的集合,是数据的一个子集。
2.数据结构
- 数据结构:是相互之间存在的一种或者多种的特定关系的数据元素的集合,换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间的关系。 数据结构包括,逻辑结构和存储结构两个层次。
逻辑结构如下:
逻辑结构
从逻辑上描述数据,它与数据的储存无关,是独立于计算机的。
两个要素:数据元素和关系
根据数据结构之间的关系的不同特性,有如下四类基本结构,它们的复杂程度依次递进
集合结构:数据结构之间除了“属于同一集合”的关系外,没有别的关系。
线性结构:数据结构中的元素存在一对一的相互关系。
树结构:数据结构中的元素存在一对多的相互关系。
图结构(网状结构):数据结构中的元素存在多对多的相互关系。
其中集合结构,树结构,图结构(网状结构)属于非线性结构
树结构可分为:树(具有多个分支的层次结构)和二叉树(具有两个分支的层次结构)
图结构可分为有向图(一种图结构,边是顶点的有序对)和无向图(一种图结构,边是顶点的无序对)。
线性结构包括:
- 线性表(典型的线性结构)。
- 栈和队列(具有特殊限制的线性表):数据操作只能在表的一端或两端进行。
- 字符串(具有特殊限制的线性表):它的数据元素仅由一个字符组成。
- 数组(线性表的推广):它的数据元素是一个线性表
- 广义表(线性表的推广):它的数据元素是一个线性表,但不同构,即或者是单元素,或者是线性表。
如下图:
存储结构如下:
数据对象在计算机中的存储表示成为数据的存储结构,也称为物理结构
数据元素在计算机中有两种基本的储存结构:顺序存储结构和链式存储结构。
顺序存储结构: 顺序存储是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系, 通常借助程序设计语言的数组类型来描述。
链式存储结构:顺序存储结构要求所有元素依次存放在一片连续的存储空间内,而链式存储结构,则不需要占据一整块存储空间,只需要给每个结点附加指针字段,用于存放后继元素的存储地址,通常借助于程序设计语言的指针类型来描述。
3.数据类型和抽象数据类型
数据类型:一组性质相同的值集合以及定义在这个值集合上的一组操作的总称。
在C语言中数据类型有:基本类型和构造类型。
抽象数据类型(ADT):是指一个数学模型以及定义在该模型上的一组操作,具体包括三部分:数据对象,数据对象上关系的集合,对数据对象的基本操作的集合。
抽象数据类型的定义仅是一组逻辑特性描述,与其在计算内的表示和实现无关。
ADT的形式化定义是三元组:ADT=(D,S,P)
D是数据对象,S是D上的关系集合,P是对D基本操作的集合。
ADT的定义:
ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT 抽象数据类型名
基本操作的定义格式为:
基本操作名(参数表)
初始条件:<初始条件描述>
操作结果:<操作结果描述>
4.算法和算法分析:
算法:是对特定问题求解步骤的一种描述,它是指令的有限序列(为了解决某类问题而规定的一个有限长的操作序列)
算法的五个特性:
- 有穷性:在有限的步骤内正常完成,不能形成无穷循环。
- 确定性:算法中的每一个步骤都必须有确定的含义,无二义性可以表现。
- 可行性:算法中描述的操作都是可以执行有限次来实现
- 输入:有多个或0个输入。
- 输出:有一个或多个输出。
评价算法优劣的基本准则:
(1)正确性:在合理的数据输人下,能够在有限的运行时间内得到正确的结果。
(2)可读性:应便于人们理解和相互交流,其次才是机器可执行性。可读性强的算法有助于人们对算法的理解,而难懂的算法易于隐藏错误,且难于调试和修改。
(3)健壮性:当输入的数据非法时,好的算法能适当地做出正确反应或进行相应处理,而不会产生一些莫名其妙的输出结果。
(4)高效性:高效性包括时间和空间两个方面。时间高效是指算法设计合理,执行效幸高,可以用时间复杂度来度量;空间高效是指算法占用存储容量合理,可以用空间复杂度来度量。时间复杂度和空间复杂度是衡量算法的两个主要指标。
算法效率的度量:
算法执行时间需通过依据该算法编制的程序在计算机上运行所消耗的时间来度量.其方法通常有两种:
事后统计法:计算机内部进行执行时间和实际占用空间的统计。
事前分析估算法:求出该算法的一个时间界限函数。(通常采用此类方法)
时间复杂度:
这个玩意比较难描述:博主找到一篇非常好的文章来供大家理解,如下:
关于时间复杂度详见:一套图 搞懂“时间复杂度”
空间复杂度:
是指算法编写成程序后,在计算机中运行时所需存储空间大小的度量。记作:S(n)=O(f(n)) ----------> n为问题的规模(或大小)
该存储空间一般包括三个方面:
- 指令常数变量所占用的存储空间;
- 输入数据所占用的存储空间;
- 辅助(存储)空间
一般地,算法的空间复杂度指的是辅助空间.
- 一维数组a[n]:空间复杂度 O(n)
- 二维数组a[n][m]:空间复杂度 O(n*m)
文章最后来几道题加深印象:
以下说法正确的是 ()。
A:数据元素是数据的最小单位
B:数据项是数据的基本单位
C:数据结构是带有结构的各数据项的集合
D:一些表面上很不相同的数据可以有相同的逻辑结构
答案:D
解释:A:数据元素是数据的基本单位
B:数据项是数据的最小单位
C:数据结构是带有结构的各数据元素的集合。
算法分析的目的是()
A:找出数据结构的合理性
B:研究算法中输入和输出的关系
C:分析算法的效率以求改进
D:分析算法的易读性和文档性
答案:C
算法分析的两个主要方面是()
A.空间复杂度和时间复杂度
B.正确性和简明性
C.可读性和文档性
D.数据复杂性和程序复杂性
答案:A
以下数据结构中,()是非线性结构
A:树
B:字符串
C:队列
D:栈
答案:A
在数据结构中,从逻辑上可以把数据结构分成()
A:动态结构和静态结构
B:紧凑结构和非紧凑结构
C:线性结构和非线性结构
D:内部结构和外部结构
答案:C