复旦大学数据结构教程课后习题答案第一章

合集下载

数据结构1-4章习题答案

数据结构1-4章习题答案

第1章概论习题参考解答一、填空题1、数据的逻辑结构是数据元素之间的逻辑关系,通常有下列4类:()、()、()、()。

【答】集合、线性结构、树型结构和图状结构。

2、数据的存储结构是数据在计算机存储器里的表示,主要有4种基本存储方法:()、()、()、()。

【答】顺序存储方法、链接存储方法、索引存储方法和散列存储方法。

二、选择题1、一个算法必须在执行有穷步之后结束,这是算法的()。

(A)正确性(B)有穷性(C)确定性(D)可行性【答】B。

2、算法的每一步,必须有确切的定义。

也就是说,对于每步需要执行的动作必须严格、清楚地给出规定。

这是算法的()。

(A)正确性(B)有穷性(C)确定性(D)可行性【答】C。

3、算法原则上都是能够由机器或人完成的。

整个算法好像是一个解决问题的“工作序列”,其中的每一步都是我们力所能及的一个动作。

这是算法的()。

(A)正确性(B)有穷性(C)确定性(D)可行性【答】D。

三、简答题1、算法与程序有何异同?【答】尽管算法的含义与程序非常相似,但两者还是有区别的。

首先,一个程序不一定满足有穷性,因此它不一定是算法。

例如,系统程序中的操作系统,只要整个系统不遭受破坏,它就永远不会停止,即使没有作业要处理,它仍处于等待循环中,以待一个新作业的进入。

因此操作系统就不是一个算法。

其次,程序中的指令必须是计算机可以执行的,而算法中的指令却无此限止。

如果一个算法采用机器可执行的语言来书写,那么它就是一个程序。

2、什么是数据结构?试举一个简单的例子说明。

【答】数据结构是指数据对象以及该数据对象集合中的数据元素之间的相互关系(即数据元素的组织形式)。

例如,队列的逻辑结构是线性表(先进先出);队列在计算机中既可以采用顺序存储也可以采用链式存储;对队列可进行删除、插入数据元素以及判断是否为空队列、将队列置空等操作。

3、什么是数据的逻辑结构?什么是数据的存储结构?【答】数据元素之间的逻辑关系,也称为数据的逻辑结构。

数据结构课后习题答案第1章

数据结构课后习题答案第1章

数据结构课后习题答案第1章第 1 章绪论2005-07-14第 1 章绪论课后习题讲解1. 填空⑴()是数据的基本单位,在计算机程序中通常作为⼀个整体进⾏考虑和处理。

【解答】数据元素⑵()是数据的最⼩单位,()是讨论数据结构时涉及的最⼩数据单位。

【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。

⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。

【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有()和()两种基本⽅法,不论哪种存储结构,都要存储两⽅⾯的内容:()和()。

【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是()、()、()、()、()。

【解答】有零个或多个输⼊,有⼀个或多个输出,有穷性,确定性,可⾏性⑹算法的描述⽅法通常有()、()、()和()四种,其中,()被称为算法语⾔。

【解答】⾃然语⾔,程序设计语⾔,流程图,伪代码,伪代码⑺在⼀般情况下,⼀个算法的时间复杂度是()的函数。

【解答】问题规模⑻设待处理问题的规模为n,若⼀个算法的时间复杂度为⼀个常数,则表⽰成数量级的形式为(),若为n*log25n,则表⽰成数量级的形式为()。

【解答】Ο(1),Ο(nlog2n)【分析】⽤⼤O记号表⽰算法的时间复杂度,需要将低次幂去掉,将最⾼次幂的系数去掉。

2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表⽰的,链接存储结构中的数据元素之间的逻辑关系是由()表⽰的。

A 线性结构B ⾮线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是⽤⼀维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表⽰;链接存储结构中⼀个数据元素对应链表中的⼀个结点,元素之间的逻辑关系由结点中的指针表⽰。

⑵假设有如下遗产继承规则:丈夫和妻⼦可以相互继承遗产;⼦⼥可以继承⽗亲或母亲的遗产;⼦⼥间不能相互继承。

数据结构课后习题及解析第一章

数据结构课后习题及解析第一章

数据结构课后习题及解析第一章第一章习题一、问答题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;四、试编写算法,求一元多项式Pn(某)=a+a某+a2某2+a3某3+…an某n的值Pn(某),并确定算法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。

注意:本题中的输入ai(i=0,1,…,n),某和n,输出为Pn(某)。

通常算法的输入和输出可采用下列两种方式之一:(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)/61.4试编写算法,求pn(某)=a0+a1某+a2某2+…….+an某n的值pn(某0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。

数据结构第一章课后习题与答案资料

数据结构第一章课后习题与答案资料

数据结构第一章课后习题与答案资料1.什么是数据结构?答:数据结构是指数据对象以及数据对象之间的关系、操作和约束的一种逻辑结构。

它关注如何将数据以及数据之间的关系组织起来,以便更高效地进行操作和使用。

2.数据结构的分类有哪些?答:数据结构可以分为线性数据结构和非线性数据结构。

线性数据结构包括数组、链表、栈和队列;非线性数据结构包括树和图。

3.什么是算法?答:算法是指解决特定问题的一系列步骤和规则。

它可以描述为一个有限的指令集,用于将输入数据转换为输出结果。

4.算法的特征有哪些?答:算法具有以下特征:•输入:算法必须有输入,可以是零个或多个。

•输出:算法必须有输出,可以是零个或多个。

•有穷性:算法必须在有限步骤内结束。

•确定性:算法的每一步骤必须明确且无歧义。

•可行性:算法的每一步骤必须可行,即可以执行。

5.算法的时间复杂度是什么?如何表示时间复杂度?答:算法的时间复杂度是指算法执行所需的时间。

它通常用大O符号表示。

常见的时间复杂度有O(1)、O(n)、O(n^2)等。

6.算法的空间复杂度是什么?如何表示空间复杂度?答:算法的空间复杂度是指算法执行所需的额外空间。

它通常用大O符号表示。

常见的空间复杂度有O(1)、O(n)、O(n^2)等。

7.什么是数据的逻辑结构?答:数据的逻辑结构是指数据对象之间的关系。

常见的逻辑结构有线性结构、树形结构和图形结构。

8.什么是数据的存储结构?答:数据的存储结构是指数据在计算机内存中的表示方式。

常见的存储结构有顺序存储结构和链式存储结构。

9.顺序存储结构和链式存储结构有什么区别?答:顺序存储结构将数据存储在一块连续的内存空间中,可以随机访问元素,但插入和删除操作需要移动大量元素。

链式存储结构将数据存储在不连续的内存空间中,通过指针相连,插入和删除操作只需要修改指针,但访问元素需要遍历链表。

10.数组和链表的区别是什么?答:数组是一种顺序存储结构,元素在内存中连续存储,可以通过下标直接访问元素;链表是一种链式存储结构,元素在内存中不连续存储,通过指针相连。

数据结构教程(含习题和答案)

数据结构教程(含习题和答案)

第一章:概论(包括习题与答案及要点)本章的重点是了解数据结构的逻辑结构、存储结构、数据的运算三方面的概念及相互关系,难点是算法复杂度的分析方法。

需要达到<识记>层次的基本概念和术语有:数据、数据元素、数据项、数据结构。

特别是数据结构的逻辑结构、存储结构及数据运算的含义及其相互关系。

数据结构的两大类逻辑结构和四种常用的存储表示方法。

需要达到<领会>层次的内容有算法、算法的时间复杂度和空间复杂度、最坏的和平均时间复杂度等概念,算法描述和算法分析的方法、对一般的算法要能分析出时间复杂度。

--------------------------------------------------------------------------------对于基本概念,仔细看书就能够理解,这里简单提一下:数据就是指能够被计算机识别、存储和加工处理的信息的载体。

数据元素是数据的基本单位,有时一个数据元素可以由若干个数据项组成。

数据项是具有独立含义的最小标识单位。

如整数这个集合中,10这个数就可称是一个数据元素.又比如在一个数据库(关系式数据库)中,一个记录可称为一个数据元素,而这个元素中的某一字段就是一个数据项。

数据结构的定义虽然没有标准,但是它包括以下三方面内容:逻辑结构、存储结构、和对数据的操作。

这一段比较重要,我用自己的语言来说明一下,大家看看是不是这样。

比如一个表(数据库),我们就称它为一个数据结构,它由很多记录(数据元素)组成,每个元素又包括很多字段(数据项)组成。

那么这张表的逻辑结构是怎么样的呢? 我们分析数据结构都是从结点(其实也就是元素、记录、顶点,虽然在各种情况下所用名字不同,但说的是同一个东东)之间的关系来分析的,对于这个表中的任一个记录(结点),它只有一个直接前趋,只有一个直接后继(前趋后继就是前相邻后相邻的意思),整个表只有一个开始结点和一个终端结点,那我们知道了这些关系就能明白这个表的逻辑结构了。

数据结构第1章习题解答

数据结构第1章习题解答

第1章习题解答1.1什么是数据结构?一个数据结构结构的二元组定义形式是什么样的?举例解释其含义。

[解答]概括地说,数据结构是互相有关联的数据元素的集合。

也就是说,数据结构是由某个数据元素的集合和该集合中的数据元素之间的关系组成的,因此数据结构可以用一个二元组来表示。

例如,B=(D,R),其中D是某一数据元素的集合,R是D上的关系的有限集。

R所表示的是集合D的数据元素之间的逻辑关系,它表示的可能是数据元素之间客观存在的某种联系,也可能是为了处理问题的需要而人为组织的数据元素之间的某种关系,因此,称之为数据的逻辑结构。

例如,一个农历节气表,就构成了一个数据结构,其数据元素是一年的农历二十四节气,数据元素之间的关系是节气的时间先后关系。

又如,一个某年级学生的成绩排序表,也是一个数据结构,其数据元素是包含成绩项的该年级的学生记录,数据元素之间的关系是学生之间的成绩高低关系。

为了在计算机中进行数据处理,必须把从实际问题中抽象出来的数据的逻辑结构映象到计算机的存储器中,即要把抽象出来的数据元素集合D 和数据元素之间的关系存储到计算机的存储器中,称之为数据的物理结构或存储结构,它是数据的逻辑结构在计算机中的表示。

1.2假设R是集合M上的一个关系,R的定义是什么?对实际问题而言,其含义是什么?[解答]如果R是对集合M自身的笛卡尔积所取的一个子集,那么我们就说“R是集合M上的一个关系”。

对实际问题而言,它表示的是集合M中元素的某种相关性。

例如,对于参加一个羽毛球比赛的运动员集合,可以用一个二元关系表示出各场比赛的胜负关系。

对于一组课程的集合,可以用一个二元关系表示出各门课程之间的先修和后续关系等等。

1.3设有集合M={d1,d2,d3,d4,d5}上的一个关R={(d1,d2),(d2,d4),(d4,d5),(d2,d5),(d1,d4),(d1,d5),(d3,d5),(d1,d3)},试说明关系R具有什么样的性质。

数据结构第1章-答案

数据结构第1章-答案

一、填空题01、数据结构是一门研究非数值计算的程序设计问题中计算机的(操作对象)以及它们之间的(关系和运算)等的学科。

02、数据结构被形式地定义为(D,R),其中D是(数据元素)的有限集合,R是D上的(关系)有限集合。

03、数据结构包括数据的(逻辑结构)、数据的(存储结构)和数据的(运算)这三个方面的内容。

04、数据结构按逻辑结构可分为两大类,它们分别是(线性结构)和(非线性结构)。

05、线性结构中元素之间存在(一对一)关系,树形结构中元素之间存在(一对多)关系,图形结构中元素之间存在(多对多)关系。

06、在线性结构中,第一个结点(没有)前驱结点,其余每个结点有且只有1个前驱结点;最后一个结点(没有)后续结点,其余每个结点有且只有1个后续结点。

07、在树形结构中,树根结点没有(前驱)结点,其余每个结点有且只有(1)个前驱结点;叶子结点没有(后续)结点,其余每个结点的后续结点数可以(任意多个)。

08、在图形结构中,每个结点的前驱结点数和后续结点数可以(任意多个)。

09、数据的存储结构可用四种基本的存储方法表示,它们分别是(顺序)、(链式)、(索引)、(散列)。

10、对于给定的n个元素,可以构造出的逻辑结构有(集合)、(线性结构)、(树形结构)、(图状结构)四种。

11、数据的运算最常用的有5种,它们分别是(插入)、(删除)、(修改)、(查找)、(排序)。

12、一个算法的效率可分为(时间)效率和(空间)效率。

13、数据结构中评价算法的两个重要指标是算法的(时间复杂度)和(空间复杂度)。

14、一个数据结构在计算机中的(映射)称为存储结构。

15、算法的五个重要特性是(有穷性)、(确定性)、(可行性)、输入、输出。

16、已知如下程序段for (i=n; i>=1; i--) //语句1{ x++; //语句2for (j=n; j>=i; j--) //语句3y++; //语句4}语句 1 执行的频度为(n+1);语句2执行的频度为(n);语句3执行的频度为(n(n+3)/2);语句4执行的频度为(n(n+1)/2)。

数据结构第1章绪论习题答案

数据结构第1章绪论习题答案

Ch1绪论1.下列与数据元素有关的叙述中,哪一个是不正确的(B)。

A.数据元素是数据的基本单位,即数据集合中的个体B.数据元素是有独立含义的数据最小单位C.数据元素又称结点D.数据元素又称作记录2.下列关于数据的逻辑结构的叙述中,哪一个是正确的(A)。

A.数据的逻辑结构是数据间关系的描述B.数据的逻辑结构反映了数据在计算机中的存储方式C.数据的逻辑结构分为顺序结构和链式结构D.数据的逻辑结构分为静态结构和动态结构3.数据的基本单位是(数据元素),在计算机中通常作为一个(整体)进行处理。

4.所有能输入到计算机中并被计算机程序处理的(符号)称为数据。

5.数据结构是一门研究非数值计算的程序设计问题中计算机的(①A)以及它们之间的(②B)和运算等的学科。

① A.数据元素 B.计算方法 C.逻辑存储 D.数据映像② A.结构 B.关系 C.运算 D.算法6.数据结构被形式的定义为(K,R),其中K是(①B)的有限集,R是K上的(②D)有限集。

① A.算法 B.数据元素 C.数据操作 D.逻辑结构② A.操作 B.映像 C.存储 D.关系7.具有线性结构的数据结构是(D)。

A.树B.图C.广义表D.栈8.在数据结构中,从逻辑上可以把数据结构分为(D)。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.内部结构和外部结构D.线性结构和非线性结构9.线性结构中元素之间存在(A)关系。

A.一对一B.一对多C.多对一D.多对多10.数据逻辑结构包括(集合)、(线性结构)、(树形结构)和(图状结构)四种类型,树形结构和图形结构合称为(非线性结构)。

11.在线性结构中,第一个结点(没有)前驱结点,其余每个结点有且只有(1)个前驱结点,最后一个结点(没有)后继结点,其余每个结点有且只有(1)个后继结点。

12.在树形结构中,树根结点没有(前驱)结点,其余每个结点有且只有(1)个前驱结点,叶子结点没有(后继)结点,其余每个结点的后继结点可以(任意多个)。

数据结构第一章答案

数据结构第一章答案

习题一1.1有下列几种用二元组表示的数据结构,试画出它们分别对应的图形表示(当出现多个关系时,对每个关系画出相应的结构图),并指出它们分别属于何种结构。

1.A=(K,R) 其中K={a1,a2,a3,…,a n}R={}2.B=(K,R),其中K={a,b,c,d,e,f,g,h}R={<a,b>,<b,c>,<c,d>,<d,e>,<e,f>,<f,g>,<g,h>}3.C=(K,R),其中K={a,b,c,d,e,f,g,h}R={<d,b>,<d,g>,<b,a>,<b,c>,<g,e>,<g,h>,<e,f>}4.D=(K,R),其中K={1,2,3,4,5,6}R={(1,2),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6)} 5.E=(K,R),其中K={48,25,64,57,82,36,75,43}R={r1,r2,r3}r1={<48,25>,<25,64>,<64,57>,<57,82>,<82,36>,<36,75>,<75,43>}r2={<48,25>,<48,64>,<64,57>,<64,82>,<25,36>,<82,75>,<36,43>}r3={<25,36>,<36,43>,<43,48>,<48,57>,<57,64>,<64,75>,<75,82>} 解:⑴是集合结构;⑵是线性结构;⑶⑷是树型结构;⑸散列结构1.2用C语言函数编写下列每一个算法,并分别求出它们的时间复杂度。

数据结构课后答案

数据结构课后答案
1
B.等于
1
C.小于
1
D.不可以确立
答案:C
解说:储存密度是指一个结点数据自己所占的储存空间和整个结点所占的储存空间之比,假定单
链表一个结点自己所占的空间为D,指针域所占的空间为N,则储存密度为:D/(D+N),必定小于
(8)将两个各有n个元素的有序表合并成一个有序表,其最少的比较次数是()。
1。
A.n
n个结点的有序单链表的时间复杂度是(
B.O(n)C.O(n2)
)。
D.O(nlog2n)
答案:C
解说:单链表创立的时间复杂度是O(n),而要成立一个有序的单链表,则每生成一个新结点时需
要和已有的结点进行比较,确立适合的插入地点,所以时间复杂度是O(n2)。
(12)以下说法错误的选项是()。
A.求表长、定位这两种运算在采纳次序储存结构时实现的效率不比采纳链式储存结构时实现的
号、姓名、性别等都是数据项。
数据对象 :是性质同样的数据元素的会合,是数据的一个子集。比如:整数数据对象是会合
N={0,
±1,±2,},字母字符数据对象是会合C={‘A’,‘B’, ,‘Z’, ‘a’,‘b’, ,‘z’},学生基本信息表也但是一个数据对象。
数据结构 :是互相之间存在一种或多种特定关系的数据元素的会合。换句话说,数据结构是带“结构”的数据元素的会合, “结构”就是指数据元素之间存在的关系。
C.必定是不连续的
D.连续或不连续都能够
答案:D
(6)线性表L在()状况下合用于使用链式结构实现。
A.需常常改正L中的结点值B.需不停对L进行删除插入
C.L中含有大批的结点D.L中结点结构复杂
答案:
B
解说:链表最大的优点在于插入和删除时不需要挪动数据,直接改正指针即可。

数据结构课后习题第一章

数据结构课后习题第一章

第1篇一、引言借壳投标,是指投标人在不具备投标资格或者投标条件不符合要求的情况下,通过与其他企业或者个人合作,借用其资质或者条件参与投标的行为。

借壳投标在我国招投标市场中较为普遍,但因其存在诸多法律风险,本文将就借壳投标的法律后果进行分析。

二、借壳投标的法律后果1. 违反招投标法律法规借壳投标违反了《中华人民共和国招标投标法》等相关法律法规,投标人在投标过程中,必须具备投标资格和符合投标条件。

借壳投标行为,不仅损害了公平竞争的市场环境,还可能导致中标无效。

2. 民事责任(1)赔偿损失:借壳投标行为给招标人、其他投标人以及国家利益造成损失的,投标人应当依法承担赔偿责任。

(2)违约责任:投标人借壳投标,违反了招投标合同的相关约定,应当承担违约责任。

3. 刑事责任(1)对投标人:借壳投标行为涉嫌犯罪的,如串通投标罪、虚假投标罪等,投标人可能面临刑事责任。

(2)对招标人、评标委员会成员等:若招标人、评标委员会成员等参与借壳投标,涉嫌犯罪的,也可能承担刑事责任。

4. 行政责任(1)行政处罚:借壳投标行为违反了招投标法律法规,投标人和相关责任人员可能面临行政处罚,如罚款、取消投标资格等。

(2)行政处分:若招标人、评标委员会成员等参与借壳投标,涉嫌违纪的,可能面临行政处分。

5. 信誉损失借壳投标行为损害了投标人的信誉,可能导致其在招投标市场中的竞争力下降,甚至被市场淘汰。

三、案例分析某施工单位甲,因不具备某工程项目的投标资格,便与具有投标资格的乙公司达成合作协议,由甲公司借用乙公司的资质参与投标。

在投标过程中,甲公司被认定为借壳投标,导致中标无效。

随后,甲公司因违反招投标法律法规,被罚款10万元,并取消其一年内的投标资格。

四、防范措施1. 加强法律法规宣传,提高投标人的法律意识。

2. 严格审查投标人资质,确保投标行为合法合规。

3. 建立健全招投标监督机制,加大对借壳投标行为的查处力度。

4. 完善招投标合同条款,明确违约责任。

数据结构课本习题答案

数据结构课本习题答案

数据结构课本习题答案数据结构第⼀章绪论⼀、单项选择题1、(1)A(2)B2、(1)B(2)D3、C4、A5、A6、(1)C(2)A7、(1)C(2)A8、C9、C 10、B 11、D⼆、填空题1、存储结构、算法2、⾮线性结构3、线性、树型、图形4、映射5、线性结构、树型结构、图形结构6、有穷性、确定性、可⾏性7、错误三、算法分析1、(1)O(n)、(2)O(n) 、(3)O(n)、(4)O(n)、(5)O(n)、(6)O(log3n)、(7) O(log2n)2、(1) order()函数是⼀个递归排序过程,设T(n)是排序n个元素所需要的时间。

在排序n个元素时,算法的计算时间主要花费在递归调⽤order()上。

第⼀调⽤时,处理的元素序列个数为n-1,也就是对余下的n-1个元素进⾏排序,所需要的计算时间应为T(n-1)。

⼜因为在其中的循环中,需要n-1次⽐较。

所以排序n个元素所需要的时间为:T(n)=T(n-1)+n-1 n﹥1据此可得:T(1)=0T(2)=T(1)+1=0+1=1T(n)=T(n-1)+n-1 n﹥1求解过程为:T(n)=[T(n-2)+(n-2)]+n-1=[T(n-3)+(n-3)]+(n-2)+n-1=…=(T(1)+1)+2+…+ n-1=0+1+2+…+ n-1=n(n-1)/2=O(n2)故order函数的时间复杂度为O(n2)(2)解:设fact(n)数是T(n)。

该函数中语句If (n≤1),return1;的运⾏时间是O(1),语句return(n*fact(n-1)); 运⾏时间是T(n-1)+O(1),其中O(1)为乘法运算的时间。

因此T(n)=O(1)n≤1T(n)= T(n-1)+O(1) n>1则T(n)=O(1)+T(n-1)=2*O(1)+T(n-2)=…=(n-1)*O(1)+T(1)=n*O(1)=O(n)即fact(n)的时间复杂度为O(n)。

数据结构第一章参考答案

数据结构第一章参考答案

习题11.填空题(1)(___________)是指数据之间的相互关系,即数据的组织形式。

通常人们认为它包含三个方面的内容,分别为数据的(___________)、(___________)及其运算。

答案:数据结构逻辑结构存储结构(2)(___________)是数据的基本单位,在计算机程序中通常作为一个整体进行处理。

答案:数据元素(3)数据元素之间的不同逻辑关系代表不同的逻辑结构,常见的逻辑结构有(___________)、(___________)、(___________)和(___________)。

答案:集合线形结构树结构图结构(4)数据的存储结构考虑的是如何在计算机中存储各个数据元素,并且同时兼顾数据元素间的逻辑关系。

基本的存储结构通常有两大类:(___________)和(___________)。

答案:顺序存储结构链式存储结构(5)通常一个问题可以有多种不同的算法,但每个算法必须满足5个准则:输入、输出、(___________)、(___________)和(___________)。

答案:有穷性确定性可行性(6)通常通过衡量算法的(___________)复杂度和(___________)复杂度来判定一个算法的好坏。

答案:时间空间(7)常见时间复杂性的量级有:常数阶O(___________)、对数阶O(___________)、线性阶O(___________)、线性对数阶O(___________)、平方阶O(___________)、和指数阶O(___________)。

通常认为,当问题规模较大时,具有(___________)量级的算法是不可计算的。

答案:1 log n n n log n n2 2n指数(8)STL提供的标准容器有顺序容器、(___________)和(___________)。

答案:排序容器哈希容器(9)算法可认为是STL的精髓,所有算法都是采用(___________)的形式提供的。

(完整版) 《数据结构》教材课后习题+答案

(完整版) 《数据结构》教材课后习题+答案

第1章绪论习题1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

3.简述逻辑结构的四种基本关系并画出它们的关系图。

4.存储结构由哪两种基本的存储方法实现?5.选择题(1)在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。

A.存储结构B.存储实现C.逻辑结构D.运算实现(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。

A.数据具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等(4)以下说法正确的是()。

A.数据元素是数据的最小单位B.数据项是数据的基本单位C.数据结构是带有结构的各数据项的集合D.一些表面上很不相同的数据可以有相同的逻辑结构(5)以下与数据的存储结构无关的术语是()。

A.顺序队列 B. 链表 C. 有序表 D. 链栈(6)以下数据结构中,()是非线性数据结构A.树B.字符串C.队D.栈6.试分析下面各程序段的时间复杂度。

(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;(4)i=1;while(i<=n)i=i*3;(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。

数据结构课后习题详解(超完整超经典)

数据结构课后习题详解(超完整超经典)

数据结构课后习题详解(超完整超经典)第1章绪论1.1简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

解:数据是对客观事物的符号表示。

在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。

数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

数据对象是性质相同的数据元素的集合,是数据的一个子集。

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

存储结构是数据结构在计算机中的表示。

数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

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

是对一般数据类型的扩展。

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

解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。

一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。

抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。

在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。

1.3设有数据结构(D,R),其中Dd1,d2,d3,d4,Rr,rd1,d2,d2,d3,d3,d4试按图论中图的画法惯例画出其逻辑结构图。

解:1.4试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。

解:数据对象:D={r,i|r,i为实数}数据关系:R={}基本操作:操作结果:构造一个复数C,其实部和虚部分别为re和imDetroyCmople某(&C)操作结果:销毁复数CGet(C,k,&e)操作结果:用e返回复数C的第k元的值操作结果:改变复数C的第k元的值为e操作结果:如果复数C的两个元素按升序排列,则返回1,否则返回0Put(&C,k,e)IAcending(C)ADTRationalNumber{数据对象:D={,m|,m为自然数,且m不为0}数据关系:R={}基本操作:InitRationalNumber(&R,,m)操作结果:构造一个有理数R,其分子和分母分别为和mDetroyRationalNumber(&R)操作结果:销毁有理数RGet(R,k,&e)操作结果:用e返回有理数R的第k元的值操作结果:改变有理数R 的第k元的值为e操作结果:若有理数R的两个元素按升序排列,则返回1,否则返回0操作结果:若有理数R的两个元素按降序排列,则返回1,否则返回0操作结果:用e返回有理数R的两个元素中值较大的一个操作结果:用e 返回有理数R的两个元素中值较小的一个Put(&R,k,e)IAcending(R)IDecending(R)Ma某(R,&e)Min(R,&e) IDecending(C)操作结果:如果复数C的两个元素按降序排列,则返回1,否则返回0操作结果:用e返回复数C的两个元素中值较大的一个操作结果:用e 返回复数C的两个元素中值较小的一个Ma某(C,&e)Min(C,&e) }ADTRationalNumber(1)product=1;i=1;while(i<=n){product某=i;i++;}(2)i=0;do{i++;}while((i!=n)&&(a[i]!=某));(3)witch{cae某1.5试画出与下列程序段等价的框图。

数据结构第一章习题答案

数据结构第一章习题答案

题1.7 实现输入和输出的三种方式:
(1) 直接和外部环境进行信息交换,复用性 较差,一般仅用在人机对话的用户界面中; (2) 和调用环境进行信息交换,安全性好, 使模块内部出现的错误不外传,进行模块测 试时,只要保证本模块从入口到出口的结果 正确即可。 (3) 交换方式同(2),但不安全,容易出现各 模块的错误滚动传递。
• 1.12 设有以下三个函数:
• f(n)=21n4+n2+1000,g(n)=15n4+500n3,h(n)=50 00n 3.5+nlogn
• 请判断以下断言正确与否: • (1) f(n)是O(g(n) ) 正确 • (2) h(n) 是O(f(n) ) 错误 • (3) g(n) 是O(h(n)) 错误 • (4) h(n) 是O(n 3.5) 正确 • (5) h(n) 是O(nlogn) 错误
• 数据:指能够被计算机识别、存储和加工处理的 信息载体。
• 数据元素:就是数据的基本单位,在某些情况下, 数据元素也称为元素、结点、顶点、记录。数据 元素有时可以由若干数据项组成。
• 数据类型:是一个值的集合以及在这些值上定义 的一组操作的总称。
• 数据结构:指的是数据之间的相互关系,即数据 的组织形式。一般包括三个方面的内容:数据的逻 辑结构、存储结构和数据的运算。
题1.8 学会系统分析的方法
(5) for( i=1; i<=n; i++)
for (j=1; j<=i; j++)
for (k=1; k<=j; k++)
语句频度
=
ni j
1
ni

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

ch='y'; for(i=0;ch=='y'||ch=='Y';i++) {q=(NODE*)malloc(sizeof(NODE)); if(p==NULL) root=q; else p->next=q; printf("\nPlease input the DATA of node %d:\n",i); scanf("%d",&(q->data)); getchar(); printf("Please input the EXP of node %d:\n",i); scanf("%d",&(q->exp)); getchar(); printf("Do you want to continue(Y/N)?\n"); scanf("%c",&ch); getchar(); p=q; } p->next=NULL; return(root); } void print(NODE *root) {int i=0; if(!root) printf("\n0"); while(i++,root!=NULL) {printf("\nNODE %d:\tDATA:%d\tEXP:%d",i,root->data,root->exp); root=roo一个求解给定多项式在 X=Xo(Xo 为指定的某个值)时的值的 C 函数。 存储法:定义结构数组 struct node { int exp; float coef; }; typedef struct node TERM #define max 100
NODE a[max]; 算法步骤:1 令 sum=0, i=0 2 算出第 i 项的值,并与 sum 相加。 3 若 i<n, 则转 2,否则 return(sum) 程序: float cal ( float x, TERM a[ ], int n ) { float sum; int i, j, k; for ( i=0; i<n; i++ ) { for ( k=1, j=1; j<= a[i ]. Exp; j++) k=k*x; sum+= a[i ].coef*k; } return(sum); } 测试用例: 令 x=2; 多项式为 3x6+8x4+5x2+9 结果为 349。
print(b); c=multi(a,b); printf("\n\n\nC:\n"); print(c); } 五:测试数据: 输入: A:5X^6+3X^4+2X B:7X^3+3X^2+5 输出: C:35X^9+15X^8+21X^7+34X^6+29X^4+6X^3+10X 输入: A:0 B:5X^3+2X^2 输出:0 输入: A:3X^2+5X^1 B:3X^1-5 C:0
NODE *multi(NODE *a,NODE *b) {NODE *pa,*pb,*pc,*qc,*p,*c=NULL; int exp,data,flag; for(pa=a;pa!=NULL;pa=pa->next) for(pb=b;pb!=NULL;pb=pb->next) {exp=pa->exp+pb->exp;data=pa->data*pb->data; if(data) {flag=search(exp,c,&pc,&qc); if(flag) if(!(data+qc->data)) {pc->next=qc->next;free(qc);} else (qc->data)+=data; else {p=(NODE *)malloc(sizeof(NODE)); p->data=data;p->exp=exp; if(!pc) c=p; else pc->next=p; p->next=qc; } } } return(c); }
1.1:比较 2 个线性链表的 C 函数
1. 存储法:用两个数组存放线性表。 2. 存储结构:一般的顺序存储方式。 3. 源程序: int comp(int a[],int as,int b[],int bs) { int tmp=as>bs?as:bs; int i; for(i=0;i<tmp;i++) { if(a[i]>b[i]) return 1; if(a[i]<b[i]) return -1; } if(as>bs) return 1; if(bs>as) return -1; return 0; } 4.测试用例: 1. A[3]={1,2,3} B[3]={1,2,3} output : 0; 2. A[3]={1.2.3} B[3]={1,1,3} output: 1; 3. A[3]={1,2,3} B[3]={1,2,4} output: -1 4. A[3]={1,2,3} B[4]={1,2,3,0} output: -1; 5. A[4]={1,2,3,0} B[3]={1,2,3} output: 1; 6. A[4]={1,2,3,0} B[3]={1,3,2} output:-1;
NODE* creat() {NODE *root,*p,*q; char ch; int i; printf("Do you want to creat a null one(Y/N)?\n"); scanf("%c",&ch); getchar(); if(ch=='y'||ch=='Y') return(NULL); p=NULL;
main() { char ch; NODE *a,*b,*c; clrscr(); printf("Now please input A:\n"); a=creat(); printf("Now please input B:\n"); b=creat(); printf("\nA:\n"); print(a); printf("\nB:\n");
int search(int exp,NODE *c,NODE **pc,NODE **qc) { *pc=NULL; *qc=c; if(c==NULL) return(0); while((*qc)->exp>exp) {*pc=*qc;*qc=(*qc)->next;} if((*qc)->exp==exp) return(1); return(0); }
1.2
写一个倒置顺序存贮的线性表的 C 函数。要求用最少的附加存贮空间来完成。 分析:假设用数组 a 存贮一组 int 类型的数据,每次将 a[0]取出,其余数依次前移,然后 将 a[0]放到 尚未倒置的数据元素的最后,直至整个数组完成倒置。 (1)取 t=a[0],余下的 a[1],a[2],...a[n-1]依次前移一个位置; (2)a[n-1]=t; 算法: (3)对由 a[0],a[1]...a[n-2]组成的数组重复上述步骤。 程序: # include<stdio.h> # define N 10 void reverse(a,n) int a[]; int n; {int t,i,j=0; while(j<n-1) {t=a[0]; for(i=0;i<n-j-1;i++) a[i]=a[i+1];
a[i]=t; j++; } } void main( ) {int a[N]; int i; printf("Input the array:\n"); for(i=0;i<N;i++) scanf("%d", &a[i]); reverse(a,N); printf("The reversed array:\n"); for(i=0;i<N;i++); printf("%d ",a[i]); printf("\n"); } Sample: Input the array: 0123456789 The reversed array: 9876543210
1.5
实现多项式乘法 一:存储结构: 多项式以线性链表存储,以增加其插入删除的效率。结果多项式与所给多项式采取 相同的存储结构,以方便实现多项式的连乘。 二:分析 多项式的加法书上有源程序,而乘法与加法相似,只是由于乘法的规则与加法 不同,因此我用了一个双重循环来实现(详见源程序) ,得到一个结果项之后,查找结 果链表,若已有,则看是否相加之后为 0,若为 0,则将该项删去,否则,就直接改系 数,若没有,则直接链上。 原本想用数组加链表的索引法来实现,但据分析后,认为并不能显著提高效率, 显得得不偿失,因此,我就使用了最原始的方法,请老师同学多多指教。 三:输入/输出 输入:先输入 A、B 多项式(根据提示) 输出:A、B、C(A×B) 四:源程序 #include<stdio.h> struct node{ int exp; int data; struct node *next; }; typedef struct node NODE;
1.3
在具有 n 个结点的顺序存贮的线性表中,对值相同的结点只保留一个,把多余的结点删 除掉,使线性表中没有值相同的结点。试编写一个实现上述操作的 C 函数,并分析该程序的 执行时间。 解答: 首先应对线性表中每一个结点进行搜索, 找到和他值相同的结点就把其删除, 同时改变 原结点的个数。主要运用两层循环:最外层对线性表中的第 0 到第 n-2 个元素进行扫描,第 二层是对于第一层的每一个元素从其后面一个元素开始扫描, 检查是否有和该元素值相同的 元素若有则删除该元素,若无则循环关键值+1 进行下一个元素比较,直到线性表最后一个 元素,然后在回到上层循环。如此继续,直到跳出所有循环时,所得线性表即为题目要求的 线性表。 下面给出实现的函数。Sq_delete()为删除一个结点的函数,i 表示所要删除的结点的 下标,del()为删除线性表中所有相同结点的函数。其中 list[]为进行操作的线性表,*p_m 和*p_n 在两个函数中都表示线性表中结点个数。 #include<stdio.h> #define M 100 int sq_delete(int list[],int *p_m,int i) { int j; if(i<0||i>=*p_m) return(1); for(j=i+1;j<*p_m;j++)
相关文档
最新文档