数据结构随笔——绪论
1.数据、数据元素和数据对象
数据是信息的载体,是对客观事物的符号表示,是所能输入到计算机中并被计算机程序识别和处理的符号的集合。
数据元素是数据的基本单位。在计算机程序中数据元素常作为一个整体进行考虑和处理。数据元素又可以称为元素、结点、记录。
一个数据元素可以由若干个数据项组成。数据项还可以区分为组项和基本项,组项可以由更小的组项和基本项构成,而基本项则是具有独立含义的最小标志单位。
数据元素的集合构成一个数据对象,它是针对某种特定的应用。数据结构一书中所说的数据对象不是面向对象系统中所指的数据对象,后者还需要考虑对象所包括的操作。
2.数据结构
(1)数据结构是指某一数据对象中所有数据元素间的关系。完整定义为:
数据结构 = {D,R}
D表示某一数据对象,R表示该集合中所有数据元素间关系的有限集合。
(2)数据结构是数据元素间的逻辑关系,即数据的逻辑结构。它是具体问题的抽象模型,与数据的存储无关。
(3)数据的存储结构是数据的逻辑结构在计算机内的表示,它依赖于数据的逻辑结构。
(4)作用于数据结构上的操作是讨论数据结构的另一个重要方面,操作的实现依赖于相应的存储结构。
3.数据逻辑结构的分类
线性结构、集合结构、树形结构、图结构
它们中数据元素之间的关系分别是一对一、空、一对多、多对多。
集合结构的实现往往依赖于其他逻辑结构的存储表示。
4.数据存储结构(物理结构)的分类
顺序存储、链式存储、索引存储、散列存储
后两者在外存中,索引存储通过建立索引表来组织所有数据元素,散列存储是通过散列函数直接把数据记录的关键码映射为该元素的存放地址。
5.数据类型与抽象数据类型(ADT)
数据类型是一个值的集合和定义在这个值集合上的一组操作的总称。包括基本数据类型和构造数据类型
基本数据类型可以看做是计算机中已经实现的数据结构。例如C语言中的字符型(char)、整形(int)、浮点型(float)、双精度型(double)、无值(void),可以直接使用由它们定义的变量和相应的操作。
构造数据类型由基本数据类型或构造数据类型组成,在C语言中用typedef struct定义。
数据类型和数据结构的共同点在于它们的抽象性。
数据类型和数据结构之间的区别在于数据结构本身是一种数据组织形式和使用形式,通过把它定义成数据类型才能在计算机上使用。从这个意义上看,数据类型是从编程者使用的角度可由计算机实现的数据结构。
数据类型本身不能参与运算,必须定义属于某种数据类型的变量,使用这些变量才能参与运算。
抽象数据类型(ADT)是一种构造数据类型。特征:信息隐蔽、数据封装、使用与实现分离。
1800题
3.(2) 点:算法具备三个特性:有穷性,确定性,稳定性
5.算法的可行性是指指令不能有二义性,这句话是错误的
13.以下哪个数据结构不是多型数据类型( )
A.栈 B.广义表 C.有向图 D.字符串
多型就是数据元素的类型不确定,字符串的每个元素始终都是字符(char),而不会是别的类型.
填空题
这个for 语句中的循环体是执行到<=1。当i=0时,不合条件,循环中语句不再执行,跳出循环,所以for执行了n+1次。
语句2是执行n到1次,所以是n。
语句3:当i=n时,语句3执行2次,当i=n-1时,执行3次,以此类推,当n=1时,执行n+1次
(2+n+1)*n/2可得出公式。
语句4 1到n累加
解析:
整数划分问题(递归原理)
注意4=1+3 和 4=3+1被认为是同一个划分。
该问题是求出n的所有划分个数,即f(n, n)。下面我们考虑求f(n,m)的方法;m为n划分的子数中最大的整数;
递归法:
根据n和m的关系,考虑以下几种情况:
(1)当n=1时,不论m的值为多少(m>0),只有一种划分即{1};
(2)当m=1时,不论n的值为多少,只有一种划分即n个1,{1,1,1,...,1};
(3)当n=m时,根据划分中是否包含n,可以分为两种情况:
(a)划分中包含n的情况,只有一个即{n};
(b)划分中不包含n的情况,这时划分中最大的数字也一定比n小,即n的所有(n-1)划分。
因此 f(n,n) =1 + f(n,n-1);
(4)当n<m时,由于划分中不可能出现负数,因此就相当于f(n,n);
(5)但n>m时,根据划分中是否包含最大值m,可以分为两种情况:
(a)划分中包含m的情况,即{m, {x1,x2,...xi}}, 其中{x1,x2,... xi} 的和为n-m,因此这情况下
为f(n-m,m)
(b)划分中不包含m的情况,则划分中所有值都比m小,即n的(m-1)划分,个数为f(n,m-1);
因此 f(n, m) = f(n-m, m)+f(n,m-1);
综上所述:
f(n, m)= 1; (n=1 or m=1)
f(n,m) = f(n, n); (n<m)
f(n,m) =1+ f(n, m-1); (n=m)
f(n,m) =f(n-m,m)+f(n,m-1); (n>m)