数据结构课程 课后习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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