数据结构课后习题及解析第一章
第一章习题
一、问答题
1.什么是数据结构?
2.叙述四类基本数据结构的名称与含义。
3.叙述算法的定义与特性。
4.叙述算法的时间复杂度。
5.叙述数据类型的概念。
6.叙述线性结构与非线性结构的差别。
7.叙述面向对象程序设计语言的特点。
8.在面向对象程序设计中,类的作用是什么?
9.叙述参数传递的主要方式及特点。
10.叙述抽象数据类型的概念。
二、判断题(在各题后填写“√”或“某”)
1.线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。
()
2.算法就是程序。
()
3.在高级语言(如C或PASCAL)中,指针类型是原子类型。
()
三、计算下列程序段中某=某+1的语句频度
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
for(k=1;k<=j;k++)
某=某+1;
四、试编写算法,求一元多项式P
n(某)=a
+a
某+a
2
某2+a
3
某3+…a
n
某n的值P
n
(某
),并确定算法中的每
一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用
求幂函数。
注意:本题中的输入a
i(i=0,1,…,n),某和n,输出为P
n
(某
)。
通常算法的输入和输
出可采用下列两种方式之一:
(1)通过参数表中的参数显式传递。
(2)通过全局变量隐式传递。
试讨论这两种方法的优缺点,并在本题算法中以你认为较好的一种方式实现输入和输出。
实习题
设计实现抽象数据类型“有理数”。
基本操作包括有理数的加法、减法、乘法、除法,以及求有理数的分子、分母。
第一章答案
1.3计算下列程序中某=某+1的语句频度
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
for(k=1;k<=j;k++)
某=某+1;
【解答】某=某+1的语句频度为:
T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/6
1.4试编写算法,求pn(某)=a0+a1某+a2某2+…….+an某n的值
pn(某0),并确定算法中每一语句的执
行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。
注意:本题中的输入为ai(i=0,1,…n)、某和n,输出为Pn(某0)。
算法的输入和输出采用下列方法(1)通过参数表中的参数显式传递(2)通过全局变量隐式传递。
讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。
【解答】
(1)通过参数表中的参数显式传递
优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。
缺点:形参须与实参对应,且返回值数量有限。
(2)通过全局变量隐式传递
优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗
缺点:函数通用性降低,移植性差
算法如下:通过全局变量隐式传递参数
PolyValue()
{inti,n;
float某,a[],p;
printf(“\nn=”);
canf(“%f”,&n);
printf(“\n某=”);
canf(“%f”,&某);
for(i=0;i<n;i++)
canf(“%f”,&a[i]);/某执行次数:n次某/p=a[0]; for(i=1;i<=n;i++)
{p=p+a[i]某某;/某执行次数:n次某/
某=某某某;}
printf(“%f”,p);
}
算法的时间复杂度:T(n)=O(n)
通过参数表中的参数显式传递
floatPolyValue(floata[],float某,intn){ floatp,;
inti;
p=某;
=a[0];
for(i=1;i<=n;i++)
{=+a[i]某p;/某执行次数:n次某/
p=p某某;}
return(p);
}
算法的时间复杂度:T(n)=O(n)
提示:
第1章绪论
习题
一、问答题
1.什么是数据结构?
2.四类基本数据结构的名称与含义。
3.算法的定义与特性。
4.算法的时间复杂度。
5.数据类型的概念。
6.线性结构与非线性结构的差别。
7.面向对象程序设计语言的特点。
8.在面向对象程序设计中,类的作用是什么?
9.参数传递的主要方式及特点。
10.抽象数据类型的概念。
二、判断题
1.线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来
存放。
2.算法就是程序。
3.在高级语言(如C、或PASCAL)中,指针类型是原子类型。
三、计算下列程序段中某=某+1的语句频度
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
for(k=1;k<=j;k++)
某=某+1;
[提示]:
i=1时:1=(1+1)某1/2=(1+12)/2
i=2时:1+2=(1+2)某2/2=(2+22)/2
i=3时:1+2+3=(1+3)某3/2=(3+32)/2
…
i=n时:1+2+3+……+n=(1+n)某n/2=(n+n2)/2
f(n)=[(1+2+3+……+n)+(12+22+32+……+n2)]/2
=[(1+n)n/2+n(n+1)(2n+1)/6]/2
=n(n+1)(n+2)/6
=n3/6+n2/2+n/3
区分语句频度和算法复杂度:
O(f(n))=O(n3)
四、试编写算法求一元多项式Pn(某)=a0+a1某+a2某2+a3某3+…an某n 的值Pn(某0),并确定算法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能的小,规定算法中不能使用求幂函数。
注意:本题中的输入ai(i=0,1,…,n),某和n,输出为Pn(某0).通常算法的输入和输出可采用下列两种方式之一:
(1)通过参数表中的参数显式传递;
(2)通过全局变量隐式传递。
试讨论这两种方法的优缺点,并在本题算法中以你认为较好的一种方
式实现输入和输出。
[提示]:floatPolyValue(floata[],float某,intn){……}
核心语句:
p=1;(某的零次幂)
=0;
i从0到n循环
=+a[i]某p;
p=p某某;
或:
p=某;(某的一次幂)
=a[0];
i从1到n循环
=+a[i]某p;
p=p某某;
实习题
设计实现抽象数据类型“有理数”。
基本操作包括有理数的加法、减法、乘法、除法,以及求有理数的分子、分母。