数据结构--C语言版--绪论课后题及答案

每学一章,都会更新课后习题及我做的答案,我会自己做一遍然后更正标准答案在这里,全文原创,部分习题会加一点我认为有难点的注释,一起学习。

BTW,最近浏览了一下基本上所有的有关本书学习的帖子答案都是第二版的,应该是同一个作者然后大家纷纷照搬过来的,我拿到的是07年出版的,应该是第三版的书,答案不官方,但基本可以为答案负责,如有错误请指正,THX。

1、简述下列术语:数据、数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型

数据:是指能输入计算机并被计算机程序处理的符号的介质的总成

数据元素:是数据的基本单位

数据对象:是性质相同的数据元素的集合

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合;也叫数据的逻辑结构

存储结构:数据结构在计算机中的表示称为数据存储结构,也叫物理结构

数据类型:是对数据的一个分类,用以刻画操作对象的特性

抽象数据类型:是指一个数学模型以及定义在该模型上的一组操作

2、试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别

本书数据结构的概念是:结构类型是一种数据类型和定义在其上的一组操作组成。我认为这个概念这里的一组操作就是本书与二级语言中定义的数据类型的区别。(答案也确实如此)

3、设有数据结构(D,R),其中:

D={d1,d2,d3d4}, R={r} ,r={(d1,d2), (d2,d3), (d3,d4)}

试按照图论中图的画法画出其逻辑结构图

注:此题太烦了,自己画画就行了

4、此题略

大概思路:写出三元组(D,S,P)然后在InitTriplet阶段写出复数和有理数的形式。

5、试画出下列程序的等价框图

1)

product = 1; i=1;
while(i<=n) {
product * =i;  //product = product *i
i++;
}

2)

i=0;
do {
i++;
} while ((i!=n)&&(a[i]!=x));

同上

3)

switch {
case x<y; z=y-x; break;
case x ==y; z =abs(x*y); break;  // abs()为取绝对值
default: z=(x-y)/abs(x)*abs(y);
}

同上

6、在程序设计中常用到下列三种不同的出错处理方式

1)用exit语句终止执行并报告错误

2)以函数的返回值区别正确返回和错误返回

3)设置一个整型变量的函数参数以区别正确返回或某种错误返回

说一说各自的优缺点;

答:1):强制终止程序或正在执行的函数,返回操作系统。优点是:方便快捷,缺点是:不知道函数的bug出现在什么地方,无法排查错误

2):优点:可以知道具体哪一步的错误,缺点:无法知道是函数本身执行错误还是参数调用错误

3):优点:可以比较详细的知道BUG发生的原因。缺点:对于代码量较大的工程太过繁琐复杂

7、此题略

8、设n为正整数,试确定下列各程序段中前置以记号@的语句频度

注:语句频度的计算是该语句的重复执行次数

1)

i=1; k=0;
while(i<=n-1){
@ k +=10 * i;
i++;
}

@的语句频度为n-1

2)

 i=1; k=0;

    do {
        @  k += 10*i;

           i++;

    } while(i<=n-1);

语句频度是:n-1

3)

i=1;k=0;
while(i<=n-1){
i++;
@ k+=10*i;
}

语句频度是n-1

4)

 k=0;

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

            @  k++;

    }

语句频度是 n^2

5)的思路同上

6)语句频度是n

7)语句频度同上

8)语句频度是11

9、假设n为2的乘幂,并且n>2,试求下列算法的时间算法复杂度以及变量count的值
 

int Time(int n) {
count = 0; x=2;

while(x<n/2) {
x *= 2; count++;

}

return count;

}

这个算法的复杂度=O(n),原因是:n为2的乘幂,设n 是2^n,x=2,则x是2^1,判断条件可以等价于

2^1<2^n-1?  于是复杂度是n,count的值是n

10、此题略

11、已知有实现同一功能的两个算法,其时间复杂度分别为和,假设现实计算机可连续运算的时间为秒(100多天),又每秒可执行基本操作(根据这些操作来估算算法时间复杂度)次。试问在此条件下,这两个算法可解问题的规模(即n值的范围)各为多少?哪个算法更适宜?请说明理由

由题可知,计算机的计算能力为10^12,则对于第一个算法,2^n=10000^9,算出来n是大于30的

第二种,n^10=10^12,得到15<n<16,所以很明显第一种的算法更优

12、13、14都比较简单

15、这题是前面基础题里面稍微有点难度的,因为数学归纳法如果不是考研党的话可能已经忘了,这里把数学归纳法贴出来。

根据上面的例子

1)\sum_{i=1}^{n}i^2=\frac{n(n+1)(2n+1)}{6}

证(1):当n=1时,1^2=1(1+1)(2+1)/6,等式成立

假设,n=m时,等式也成立,即原式。

则当n=m+1时,右边\frac{(m+1)(m+2)(2m+3}{6}=\frac{(m)(m+1)(2m+1)}{6}+(m+1)^{2}可知n=m+1时,也成立。证毕

持续更新中……明天更新算法题

参考文献: 1、维基百科

                   2、严蔚敏--《数据结构》-C语言版

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 绪论 一、基本内容 数据、数据元素、数据对象、数据结构、存储结构和数据类型等概念术语的确定含义;抽象数据类型的定义、表示和实现方法;描述算法的类C语言算法设计的基本要求以及从时间和空间角度分析算法的方法。 二、学习要点 1.熟悉各名词、术语的含义,掌握基本概念,特别是数据的逻辑结构和存储结构之间的关系。分清哪些是逻辑结构的性质,哪些是存储结构的性质。 2.了解抽象数据类型的定义、表示和实现方法。 3.熟悉类C语言的书写规范,特别要注意值调用和引用调用的区别,输入、输出的方式以及错误处理方式。 4.理解算法五个要素的确切含义:①动态有穷性(能执行结束);②确定性(对于相同的输入执行相同的路径);③有输入;④有输出;⑤可行性(用以描述算法的操作都是足够基本的)。 5.掌握计算语句频度和估算算法时间复杂度的方法。 三、基础知识题 1.1 简述下列术语:数据、数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。 答:数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据对象是性质相同的数据元素的集合,是数据的一个子集。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 存储结构是数据结构在计算机中的表示(又称映像)。 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。 1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。 答:简单地说,数据结构定义了一组按某些关系结合在一起的数组元素。数据类型不仅定义了一组带结构的数据元素,而且还在其上定义了一组操作。程序设计语言中的数据类型是一个值的集合和定义在这个值集上的一组操作的总称。而抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值