数据结构随笔——绪论

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),而不会是别的类型.

 

填空题

5.抽象数据类型的定义仅取决于它的一组__(1)_,而与_(2)_无关,即不论其内部结构如何变化,只
要它的_(3)_不变,都不影响其外部使用。
(1)逻辑特性 (2)在计算机内部如何表示和实现 (3)数学特性。 
 
 8.一个算法具有 5 个特性: (1) 、 (2) 、 (3) ,有零个或多个输入、有一个或多个输出。
(1)有穷性 (2)确定性 (3)稳定性            类似前面选择题

 

9.
FOR i:= n DOWNTO 1 DO {语句 1}
BEGIN
x:=x+1; {语句 2}
FOR j:=n DOWNTO i DO {语句 3}
y:=y+1; {语句 4}
END;
语句 1 执行的频度为 (1) ;语句 2 执行的频度为 (2) ;语句 3 执行的频度为 (3) ;语句 4 执
行的频度为 (4) 。
 
(1)n+1 (2)n (3)n(n+3)/2 (4)n(n+1)/2。  
分析:

这个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累加

 

16.设 m.n均为自然数,m可表示为一些不超过 n的自然数之和,f(m,n)为这种表示方式的数目。例 f(5,3)=5,
有 5 种表示方式:3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1。
①以下是该函数的程序段,请将未完成的部分填入,使之完整
int f(m,n)
int m,n;
{ if(m==1)
return (1) ;
if(n==1){
return (2) ;}
if(m<n) <="" span="">
{return f(m,m);}
if (m==n)
{return 1+ (3) ;}
return f(m.n-1)+f(m-n, (4) );
}
②执行程序,f(6,4)= 
 ① (1)1 (2)1 (3)f(m,n-1) (4)n ② 9

 解析:

整数划分问题(递归原理)

注意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)

 

 

 
简答题
2.数据元素之间的关系在计算机中有几种表示方法?各有什么特点?
四种表示方法
(1)顺序存储方式。数据元素顺序存放,每个存储结点只含一个元素。存储位置反映数据元
素间的逻辑关系。存储密度大,但有些操作(如插入、删除)效率较差。
(2)链式存储方式。每个存储结点除包含数据元素信息外还包含一组(至少一个)指针。指
针反映数据元素间的逻辑关系。这种方式不要求存储空间连续,便于动态操作(如插入、删除等),
但存储空间开销大(用于指针),另外不能折半查找等。
(3)索引存储方式。除数据元素存储在一地址连续的内存空间外,尚需建立一个索引表,索
引表中索引指示存储结点的存储位置(下标)或存储区间端点(下标),兼有静态和动态特性。
(4)散列存储方式。通过散列函数和解决冲突的方法,将关键字散列在连续的有限的地址空
间内,并将散列函数的值解释成关键字所在元素的存储地址,这种存储方式称为散列存储。其特
点是存取速度快,只能按关键字随机存取,不能顺序存取,也不能折半存取。
posted @ 2019-06-25 16:51  搁浅shi  阅读(226)  评论(0编辑  收藏  举报