绪论习题参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题一参考答案
、概念题
1.试述下列各组概念:
⑴ 数据、数据元素、数据项
⑵ 数据结构、数据的逻辑结构、数据的存储结构
⑶数据类型、数据操作
⑷ 算法、算法的时间复杂度、算法的空间复杂度参考答案:略
2 •试述数据结构研究的3个方面的内容。
参考答案:
数据结构研究的3个方面分别是数据的逻辑结构、数据的存储结构和数据的运算(操作) 。
3 .试述集合、线性结构、树型结构和图型结构四种常用数据结构的特性。
参考答案:
集合结构:集合中数据元素之间除了“同属于一个集合”的特性外,数据元素之间无其它关系,它们之间的关系是松散性的。
线性结构:线性结构中数据元素之间存在“一对一”的关系。即若结构非空,则它有且仅有一个开始结点和终端结点,开始结点没有前趋但有一个后继,终端结点没有后继但有一个前趋,其余结点有且仅有一个前驱和一
个后继。
树形结构:树形结构中数据元素之间存在“一对多”的关系。即若结构非空,则它有一个称为根的结点,此结点无前驱结点,其余结点有且仅有一个前驱,所有结点都可以有多个后继。
图形结构:图形结构中数据元素之间存在“多对多”的关系。即若结构非空,则在这种数据结构中任何结点都可能有多个前驱和后继。
4 .设有数据的逻辑结构的二元组定义形式为B=(D,R),其中D={a i, a2,…,a n},
R={| i=1,2,…,n-1},请画出此逻辑结构对应的顺序存储结构和链式存储结构的示意图。参考答案:顺序存储结构示意图如下:
n-2 n-1
链式存储结构示意图如下:
5.设一个数据结构的逻辑结构如图所示,请写出它的二元组定义形式。
图第5题的逻辑结构图
参考答案:
它的二元组定义形式为
B= ( D, R )其中 D={k i ,k 2,k 3,k 4,k 5,k 6,k 7,k 8,k 9},
R=
_ 2 2
6 .设有函数 f (n)=3n -n+4,请证明 f (n)=0(n )。
证明:因为存在c=6, N=1,对所有的n 》N , 0 w 3n 2-n+4 < 6 x n 2都是恒成立的,所以由书
P16的定义可得f
2
(n)=O(n )。
8.试确定下列程序段中有标记符号 ⑴ i=1; k=0;
while ( i<=n-1) {
k += 10 * i; //* i++; }
⑵ i=1; k=0;
do {
k +=10 * i; //* i++; } while(i<=n-1);
⑶ i = 1; k = 0;
while (i<=n-1) {
i++ ; k+= 10 * i; //* }
⑷ k=0;
for( i=1; i<=n; i++) {
100
n
n
(1) 2
(2) (3/2)
(3) (4/3)
⑷n n
2/3 ⑸n
3/2
⑹n
(7) n! (8)
n
(9) n (10) log
2
n (11) 1/log
2
n (12)log
2
(log 2n) (13) nlog
2
n (14) n
log 2n
参考答案:
按增长率递增的排列顺序是:
100 1/2
1/log 2n< 2 2/3 vnlog 2n 3/2 1 Iog2n n g <(4/3) < (3/2) n < n! 7 .请比较下列函数的增长率,并按增长率递增的顺序排列下列函数: *”的语句行的语句频度(其中 n 为正整数)。 for (j=1 ; j<=i; j++) k++; //* } ⑸ i=1; j=0; while (i+j<=n) { if (i>j ) j++ ; //* else i++ ; } ⑹x=n; y=0; // n 是不小于1的常数 while (x>=(y+1)*(y+1)) { y++; //* } ⑺ x=91; y=100; while (y>0 ) { if (x>100 ) { x -= 10; y- -; } //* else x++; ⑻ a=1; m=1; while(a { m+=a; a*=3; //* } 参考答案: 指定语句行的语句频度分别为: (1) n-1 (2) 当n < 1时语句频yac为1,当n>1时语句频度为n-1 (3) n-1 (4) n(n+1)/2 (5) n (6) 山取整 (7) 1100 (8) log a n 、算法设计题 1 •有一个包括100个数据元素的数组,每个数据元素的值都是实数,试编写的算 个求最大数据元素的值及其下标法,并分析算法的时间复杂度。 参考答案: void max(double[] a) { double max = a[0];〃 初始化最大值为数组中的第一个元素 int in dex = 0; // for (int i = 0; i < ; i++) { if (max < a[i]) { max = a[i]; in dex = i; } } "最大的实数为:” + max + "\n 其在数组中的下标为:” + index);