数据结构课程 课后习题答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构简明教程》练习题及参考答案

练习题1

1. 单项选择题

(1)线性结构中数据元素之间是()关系。

A.一对多

B.多对多

C.多对一

D.一对一

答:D

(2)数据结构中与所使用的计算机无关的是数据的()结构。

A.存储

B.物理

C.逻辑

D.物理和存储

答:C

(3)算法分析的目的是()。

A.找出数据结构的合理性

B.研究算法中的输入和输出的关系

C.分析算法的效率以求改进

D.分析算法的易懂性和文档性

答:C

(4)算法分析的两个主要方面是()。

A.空间复杂性和时间复杂性

B.正确性和简明性

C.可读性和文档性

D.数据复杂性和程序复杂性

答:A

(5)计算机算法指的是()。

A.计算方法

B. 排序方法

C.求解问题的有限运算序列

D.调度方法

答:C

(6)计算机算法必须具备输入、输出和()等5个特性。

A.可行性、可移植性和可扩充性

B.可行性、确定性和有穷性

C.确定性、有穷性和稳定性

D.易读性、稳定性和安全性

答:B

2. 填空题

(1)数据结构包括数据的①、数据的②和数据的③这三个方面的内容。

答:①逻辑结构②存储结构③运算

(2)数据结构按逻辑结构可分为两大类,它们分别是①和②。

答:①线性结构②非线性结构

(3)数据结构被形式地定义为(D,R),其中D是①的有限集合,R是D上的②有限集合。

答:①数据元素 ②关系

(4)在线性结构中,第一个结点 ① 前驱结点,其余每个结点有且只有1个前驱结点;最后一个结点 ② 后继结点,其余每个结点有且只有1个后继结点。

答:①没有 ②没有

(5)在树形结构中,树根结点没有 ① 结点,其余每个结点有且只有 ② 个前驱结点;叶子结点没有 ③ 结点,其余每个结点的后继结点数可以是 ④ 。

答:①前驱 ②1 ③后继 ④任意多个

(6)在图形结构中,每个结点的前驱结点数和后继结点数可以是( )。

答:任意多个

(7)数据的存储结构主要有四种,它们分别是 ① 、 ② 、 ③ 和 ④ 存储结构。 答:①顺序 ②链式 ③索引 ④哈希

(8)一个算法的效率可分为 ① 效率和 ② 效率。

答:①时间 ②空间

3. 简答题

(1)数据结构和数据类型两个概念之间有区别吗?

答:简单地说,数据结构定义了一组按某些关系结合在一起的数组元素的集合。数据类型不仅定义了一组数据元素,而且还在其上定义了一组操作。

(2)简述线性结构、树形结构和图形结构的不同点。

答:线性结构反映结点间的逻辑关系是一对一的,树形线性结构反映结点间的逻辑关系是一对多的,图在结构反映结点间的逻辑关系是多对多的。

(3)设有采用二元组表示的数据逻辑结构S=(D,R),其中D={a ,b ,…,i },R={(a ,b ),(a ,c ),(c ,d ),(c ,f ),(f ,h ),(d ,e ),(f ,g ),(h ,i )},问相对于关系R ,哪些结点是开始结点,哪些结点是终端结点?

答:该逻辑结构为树形结构,其中a 结点没有前驱结点,称为根结点,b 、e 、g 、i 结点没有后继结点,是终端结点,也称为叶子结点。

(4)以下各函数是算法中语句的执行频度,n 为问题规模,给出对应的时间复杂度: T 1(n )=n log 2n -1000log 2n

T 2(n )=3log 2n -1000log 2n

T 3(n )=n 2-1000log 2n

T 4(n )=2n log 2n -1000log 2n

答:T 1(n )=O(n log 2n ),T 2(n )=O( ),T 3(n )=O(n 2),T 4(n )=O(n log 2n )。

(5)分析下面程序段中循环语句的执行次数。

int j=0,s=0,n=100;

do

{

j=j+1; s=s+10*j;

} while (j

答:j =0,第1次循环:j =1,s =10。第2次循环:j =2,s =30。第3次循环:j =3,s =60。

3log 2n

第4次循环:j =4,s =100。while 条件不再满足。所以,其中循环语句的执行次数为4。

(6)执行下面的语句时,语句s++的执行次数为多少?

int s=0;

for (i=1;i

for (j=n;j>=i;j--) s++;

答:语句s 的执行次数2

)2)(3(3)1()1(12

121-+=++-+=+-=∑∑∑-=-==n n n n i n n i n i i n j Λ。 (7)设n 为问题规模,求以下算法的时间复杂度。

void fun1(int n)

{

int x=0,i;

for (i=1;i<=n;i++)

for (j=i+1;j<=n;j++)

x++;

} 答:其中x++语句属基本运算语句,∑∑∑=+==-=

-==n i n i j n i n n i n n T 1112

)1()(1)(=O(n 2)。 (8)设n 为问题规模,是一个正偶数,试计算以下算法结束时m 的值,并给出该算法的时间复杂度。

void fun2(int n)

{

int m=0;

for (i=1;i<=n;i++)

for (j=2*i;j<=n;j++)

m++;

} 答:由于内循环j 的取值范围,所以i ≤n /2,则∑

∑∑-===--==2/122

/124/))12((n i n i j n i n i n m ,该

程序段的时间复杂度为O(n 2)。 上机实验题1

有一个整型数组a ,其中含有n 个元素,设计尽可能好的算法求其中的最大元素和次大元素,并采用相关数据测试。

解:maxs 算法用于返回数组a[0..n -1]中的最大元素值max1和次大元素值max2,max1和max2设计为引用类型。对应的程序如下:

#include <>

void maxs(int a[],int n,int &max1,int &max2)

{

int i;

max1=max2=a[0]; for (i=1;i

相关文档
最新文档