数据结构习题及答案——严蔚敏

合集下载

《数据结构习题》《严蔚敏》部分答案

《数据结构习题》《严蔚敏》部分答案

第三层循环
for(i=1; i<=n; i++) for(j=1; j<=i; j++) for(k=1; k<=j; k++)
@语句
i=1
j=1
1
1
j=1
1
1
i=2
j=2
2
2
n
j=1
1
1
i=3
j=2
2
2
j=3
3
3
...
...
...
...
i=n
(1+2+3+…+n)
@语句执行频度 =1+(1+2)+(1+2+3)+…+(1+2+3+…+n) =n*1+(n-1)*2+(n-2)*3+…+1*n
n
= ∑ x(n − x +1) x=1
1.9 分析:算法的时间复杂度,课本上是这样定义的:算法中基本操作重复执行的次数是问 题规模 n 的某个函数 f(n),算法的时间量度记做 T(n)=O(f(n)),他表示随问题规模 n 的增大, 算法执行时间的增长率和 f(n)的增长率相同,称做算法的时间复杂度。
倡对于繁琐的操作使用伪码和函数表示。
书写算法注意事项:
1) 算法中用到一些常用的数据结构时,最好使用教材上已经定义类型名称,如顺
序栈为 SqStack,而不要写成其它形式。
2) 算法的基本格式 status 函数名称(参数表) {
如果改参数需要返回结果值,则用&(引 用参数),否则按照正常方式书写

数据结构第2版习题答案—严蔚敏

数据结构第2版习题答案—严蔚敏

)。

第2章线性表1 .选择题(1)顺序表中 第一个 元素的存储 地址是100,每个元素的 长度为2,则第5个元素的 地址是( )。

A . 110 答案:B 解释:顺序表中的数据连续存储,所以第D . 120 5个元素的地址为: 100+2*4=108。

(3)向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移 动的元素个数为( )。

C . 63 A . 8 B . 答案:B 解释:平均要移动的元素个数为: (4) 链接存储的存储结构所占存储空间(n/2。

)。

A .分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针 B .只有一部分,存放结点值C .只有一部分,存储表示结点间关系的指针D .分两部分,一部分存放结点值,另一部分存放结点所占单元数答案:A(5) 线性表若采用链式存储结构时,要求内存中可用存储单元的地址(A .必须是连续的C . 一定是不连续的答案:D(6) 线性表1在( B •部分地址必须是连续的D •连续或不连续都可以)情况下适用于使用链式结构实现。

B.需不断对L 进行删除插入 D.L 中结点结构复杂A .需经常修改L 中的结点值C . L中含有大量的结点答案:B解释:链表最大的优点在于插入和删除时不需要移动数据,直接修改指针即可。

(7) 单链表的存储密度( )。

A .大于1 B .等于1答案:C 解释:存储密度是指一个结点数据本身所占的存储空间和整个结点所占的存储空间之比,假设单链表一个结点本身所占的空间为 D ,指针域所占的空间为 N ,则存储密度为:D/(D+N),—定小于 1。

(8) 将两个各有 n 个元素的有序表归并成一个有序表,其最少的比较次数是(C •小于1D •不能确定 B . 2n-1 C . 2n D . n-1C . 100答案:A解释:当第一个有序表中所有的元素都小于(或大于)第二个表中的元素,只需 要用第二个表中的第一个元素依次与第一个表的元素比较,总计比较n 次。

严蔚敏版数据结构课后习题答案-完整版

严蔚敏版数据结构课后习题答案-完整版

2n
2
,g
n
n n2
n5
解: (1)g(n) 快 (2)g(n) 快 (3)f(n) 快 (4) f(n) 快
1.15 试用数学归纳法证明:
n
(1)
i 2 n n 1 2n 1 / 6
i1
n0
n
(2)
xi
i0
xn 1 1 / x 1
x 1, n 0
n
(3)
2i 1 2n 1
i1
n1
n
(4)
2i 1 n 2
(2) 以函数的返回值判断正确与否常用于子程序的测试,便于实 现程序的局部控制。
(3) 用整型函数进行错误处理的优点是可以给出错误类型,便于 迅速确定错误。 1.7 在程序设计中,可采用下列三种方法实现输出和输入:
(1) 通过 scanf 和 printf 语句; (2) 通过函数的参数显式传递; (3) 通过全局变量隐式传递。 试讨论这三种方法的优缺点。
解:(1) 用 scanf 和 printf 直接进行输入输出的好处是形象、 直 观,但缺点是需要对其进行格式控制,较为烦琐,如果出现错误,则 会引起整个系统的崩溃。
(2) 通过函数的参数传递进行输入输出,便于实现信息的隐蔽, 减少出错的可能。
(3) 通过全局变量的隐式传递进行输入输出最为方便,只需修改 变量的值即可,但过多的全局变量使程序的维护较为困难。 1.8 设 n 为正整数。试确定下列各程序段中前置以记号 @的语句的频 度:
i1
n1
1.16 试写一算法,自大至小依次输出顺序读入的三个整数 X,Y 和 Z
的值
解:
int max3(int x,int y,int z)
{

严蔚敏++数据结构习题集答案

严蔚敏++数据结构习题集答案

第二章习题与解答一判断题1.线性表的逻辑顺序与存储顺序总是一致的。

2.顺序存储的线性表可以按序号随机存取。

3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。

4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。

5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。

6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。

7.线性表的链式存储结构优于顺序存储结构。

8.在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。

9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。

10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。

二单选题 (请从下列A,B,C,D选项中选择一项)1.线性表是( ) 。

(A) 一个有限序列,可以为空;(B) 一个有限序列,不能为空;(C) 一个无限序列,可以为空;(D) 一个无序序列,不能为空。

2.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。

插入一个元素时平均要移动表中的()个元素。

(A) n/2 (B) n+1/2 (C) n -1/2 (D) n3.线性表采用链式存储时,其地址( ) 。

(A) 必须是连续的;(B) 部分地址必须是连续的;(C) 一定是不连续的;(D) 连续与否均可以。

4.用链表表示线性表的优点是()。

(A)便于随机存取(B)花费的存储空间较顺序存储少(C)便于插入和删除(D)数据元素的物理顺序与逻辑顺序相同5.某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( )存储方式最节省运算时间。

(A)单链表(B)双链表(C)单循环链表(D)带头结点的双循环链表6.循环链表的主要优点是( )。

(A)不在需要头指针了(B)已知某个结点的位置后,能够容易找到他的直接前趋(C)在进行插入、删除运算时,能更好的保证链表不断开(D)从表中的任意结点出发都能扫描到整个链表7.下面关于线性表的叙述错误的是( )。

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

第1章4.答案:(1)顺序存储结构顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。

(2)链式存储结构顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。

但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址。

所以链式存储结构通常借助于程序设计语言的指针类型来描述。

5. 选择题(1)~(6):CCBDDA\6.(1)O(1) (2)O(m*n) (3)O(n2)(4)O(log3n) (5)O(n2) (6)O(n)(第2章1.选择题(1)~(5):BABAD (6)~(10): BCABD (11)~(15):CDDAC\2.算法设计题(1)将两个递增的有序链表合并为一个递增的有序链表。

要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。

表中不允许有重复的数据。

[题目分析]合并后的新表使用头指针Lc指向,pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点,从第一个结点开始进行比较,当两个链表La和Lb均为到达表尾结点时,依次摘取其中较小者重新链接在Lc表的最后。

如果两个表中的元素相等,只摘取La表中的元素,删除Lb表中的元素,这样确保合并后表中无重复的元素。

当一个表到达表尾结点,为空时,将非空表的剩余元素直接链接在Lc表的最后。

void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){法设计题(1)将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。

当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空。

两个栈均从两端向中间增长。

试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。

数据结构习题及答案——严蔚敏_课后习题答案 精品

数据结构习题及答案——严蔚敏_课后习题答案 精品

第一章绪论选择题1.组成数据的基本单位是()(A)数据项(B)数据类型(C)数据元素(D)数据变量2.数据结构是研究数据的()以及它们之间的相互关系。

(A)理想结构,物理结构(B)理想结构,抽象结构(C)物理结构,逻辑结构(D)抽象结构,逻辑结构3.在数据结构中,从逻辑上可以把数据结构分成()(A)动态结构和静态结构(B)紧凑结构和非紧凑结构(C)线性结构和非线性结构(D)内部结构和外部结构4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。

①(A)数据元素(B)计算方法(C)逻辑存储(D)数据映像②(A)结构(B)关系(C)运算(D)算法5.算法分析的目的是()。

(A)找出数据结构的合理性(B)研究算法中的输入和输出的关系(C)分析算法的效率以求改进(D)分析算法的易懂性和文档性6.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。

①(A)计算方法(B)排序方法(C)解决问题的有限运算序列(D)调度方法②(A)可执行性、可移植性和可扩充性(B)可行性、确定性和有穷性(C)确定性、有穷性和稳定性(D)易读性、稳定性和安全性二、判断题1.数据的机内表示称为数据的存储结构。

()2.算法就是程序。

()3.数据元素是数据的最小单位。

()4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。

()5.算法的时间复杂度取决于问题的规模和待处理数据的初态。

()三、填空题1.数据逻辑结构包括________、________、_________ 和_________四种类型,其中树形结构和图形结构合称为_____。

2.在线性结构中,第一个结点____前驱结点,其余每个结点有且只有______个前驱结点;最后一个结点______后续结点,其余每个结点有且只有_______个后续结点。

3.在树形结构中,树根结点没有_______结点,其余每个结点有且只有_______个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以_________。

【课后习题及答案】严蔚敏-数据结构课后习题及答案解析

【课后习题及答案】严蔚敏-数据结构课后习题及答案解析

6.算 法 的 五 个 重 要 特 性 是 _______、_______、______、_______、_______。 7.数据结构的三要素是指______、_______和________。 8.链式存储结构与顺序存储结构相比较,主要优点是 ________________________________。 9.设有一批数据元素,为了最快的存储某元素,数据结构宜用_________ 结构,为了方便插入一个元素,数据结构宜用____________结构。
四、算法分析题
for(i=1; i<=n; i++) for(j =1; j <=i ; j++) x=x+1; 分 析 :该 算 法 为 一 个 二 重 循 环 ,执 行 次 数 为 内 、外 循 环 次 数 相 乘 ,但 内 循环次数不固定,与外循环有关,因些,时间频度 T(n)=1+2+3+…+n=n*(n+1)/2 有 1/4≤T(n)/n2≤1,故它的时间复杂度为O(n2), 即T(n)与 n2 数 量级相同。 2、分析下列算法段的时间频度及时间复杂度 for (i=1;i<=n;i++) for (j=1;j<=i;j++) for ( k=1;k<=j;k++) x=i+j-k; 分析算法规律可知时间频度 T(n)=1+(1+2)+(1+2+3)+...+(1+2+3+…+n) 由于有 1/6 ≤ T(n)/ n3 ≤1,故时间复杂度为O(n3)
精品课程
课后习题答案数据结构-严来自敏 课后习题及答案解析第一章 绪论

数据结构C语言版第版习题答案—严蔚敏简化版

数据结构C语言版第版习题答案—严蔚敏简化版

数据结构C语言版第版习题答案—严蔚敏简化版 The following text is amended on 12 November 2020.第2章线性表1.选择题(1)顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。

A.110 B.108 C.100 D.120答案:B解释:顺序表中的数据连续存储,所以第5个元素的地址为:100+2*4=108。

(3)向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数为()。

A.8 B. C.63 D.7答案:B解释:平均要移动的元素个数为:n/2。

(4)链接存储的存储结构所占存储空间()。

A.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针B.只有一部分,存放结点值C.只有一部分,存储表示结点间关系的指针D.分两部分,一部分存放结点值,另一部分存放结点所占单元数答案:A(5)线性表若采用链式存储结构时,要求内存中可用存储单元的地址()。

A.必须是连续的 B.部分地址必须是连续的C.一定是不连续的 D.连续或不连续都可以答案:D(6)线性表L在()情况下适用于使用链式结构实现。

A.需经常修改L中的结点值B.需不断对L进行删除插入C.L中含有大量的结点D.L中结点结构复杂答案:B解释:链表最大的优点在于插入和删除时不需要移动数据,直接修改指针即可。

(7)单链表的存储密度()。

A.大于1 B.等于1 C.小于1 D.不能确定答案:C解释:存储密度是指一个结点数据本身所占的存储空间和整个结点所占的存储空间之比,假设单链表一个结点本身所占的空间为D,指针域所占的空间为N,则存储密度为:D/(D+N),一定小于1。

(8)将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是()。

A.n B.2n-1 C.2n D.n-1答案:A解释:当第一个有序表中所有的元素都小于(或大于)第二个表中的元素,只需要用第二个表中的第一个元素依次与第一个表的元素比较,总计比较n次。

数据结构习题及答案——严蔚敏_课后习题答案

数据结构习题及答案——严蔚敏_课后习题答案

第一章绪论选择题1.组成数据的基本单位是A数据项B数据类型C数据元素D数据变量2.数据结构是研究数据的以及它们之间的相互关系。

A理想结构物理结构B理想结构抽象结构C物理结构逻辑结构D抽象结构逻辑结构 3.在数据结构中从逻辑上可以把数据结构分成A动态结构和静态结构B紧凑结构和非紧凑结构C线性结构和非线性结构D内部结构和外部结构 4.数据结构是一门研究非数值计算的程序设计问题中计算机的①以及它们之间的②和运算等的学科。

①A数据元素B计算方法C逻辑存储D数据映像②A结构B关系C运算D算法5.算法分析的目的是。

A 找出数据结构的合理性B研究算法中的输入和输出的关系C分析算法的效率以求改进D分析算法的易懂性和文档性6.计算机算法指的是①它必须具备输入、输出和②等5个特性。

①A计算方法B排序方法C解决问题的有限运算序列D调度方法②A可执行性、可移植性和可扩充性B可行性、确定性和有穷性C确定性、有穷性和稳定性D易读性、稳定性和安全性二、判断题1.数据的机内表示称为数据的存储结构。

2.算法就是程序。

3.数据元素是数据的最小单位。

4.算法的五个特性为有穷性、输入、输出、完成性和确定性。

5.算法的时间复杂度取决于问题的规模和待处理数据的初态。

三、填空题 1.数据逻辑结构包括________、________、_________ 和_________四种类型其中树形结构和图形结构合称为_____。

2.在线性结构中第一个结点____前驱结点其余每个结点有且只有______个前驱结点最后一个结点______后续结点其余每个结点有且只有_______个后续结点。

3.在树形结构中树根结点没有_______结点其余每个结点有且只有_______个前驱结点叶子结点没有________结点其余每个结点的后续结点可以_________。

4.在图形结构中每个结点的前驱结点数和后续结点数可以_________。

5.线性结构中元素之间存在________关系树形结构中元素之间存在______关系图形结构中元素之间存在_______关系。

严蔚敏版数据结构课后习题答案-完整版

严蔚敏版数据结构课后习题答案-完整版

第1章 绪论之巴公井开创作简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和笼统数据类型.解:数据是对客观事物的符号暗示.在计算机科学中是指所有能输入到计算机中并被计算机法式处置的符号的总称.数据元素是数据的基本单元,在计算机法式中通常作为一个整体进行考虑和处置.数据对象是性质相同的数据元素的集合,是数据的一个子集. 数据结构是相互之间存在一种或多种特定关系的数据元素的集合.存储结构是数据结构在计算机中的暗示.数据类型是一个值的集合和界说在这个值集上的一组把持的总称.笼统数据类型是指一个数学模型以及界说在该模型上的一组把持.是对一般数据类型的扩展.试描述数据结构和笼统数据类型的概念与法式设计语言中数据类型概念的区别.解:笼统数据类型包括一般数据类型的概念,但含义比一般数据类型更广、更笼统.一般数据类型由具体语言系统内部界说,直接提供给编程者界说用户数据,因此称它们为预界说数据类型.笼统数据类型通常由编程者界说,包括界说它所使用的数据和在这些数据上所进行的把持.在界说笼统数据类型中的数据部份和把持部份时,要求只界说到数据的逻辑结构和把持说明,不考虑数据的存储结构和把持的具体实现,这样笼统条理更高,更能为其他用户提供良好的使用接口.1.3 设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =试按图论中图的画法惯例画出其逻辑结构图.解:1.4 试仿照三元组的笼统数据类型分别写出笼统数据类型复数和有理数的界说(有理数是其分子、分母均为自然数且分母不为零的分数).解:ADT Complex{数据对象:D={r,i|r,i为实数}数据关系:R={<r,i>}基本把持:InitComplex(&C,re,im)把持结果:构造一个复数C,其实部和虚部份别为re和imDestroyCmoplex(&C)把持结果:销毁复数CGet(C,k,&e)把持结果:用e返回复数C的第k元的值Put(&C,k,e)把持结果:改变复数C的第k元的值为eIsAscending(C)把持结果:如果复数C的两个元素按升序排列,则返回1,否则返回0IsDescending(C)把持结果:如果复数C的两个元素按降序排列,则返回1,否则返回0Max(C,&e)把持结果:用e返回复数C的两个元素中值较年夜的一个Min(C,&e)把持结果:用e返回复数C的两个元素中值较小的一个}ADT ComplexADT RationalNumber{数据对象:D={s,m|s,m为自然数,且m不为0}数据关系:R={<s,m>}基本把持:InitRationalNumber(&R,s,m)把持结果:构造一个有理数R,其分子和分母分别为s和mDestroyRationalNumber(&R)把持结果:销毁有理数RGet(R,k,&e)把持结果:用e返回有理数R的第k元的值Put(&R,k,e)把持结果:改变有理数R的第k元的值为eIsAscending(R)把持结果:若有理数R的两个元素按升序排列,则返回1,否则返回0IsDescending(R)把持结果:若有理数R的两个元素按降序排列,则返回1,否则返回0Max(R,&e)把持结果:用e返回有理数R的两个元素中值较年夜的一个Min(R,&e)把持结果:用e返回有理数R的两个元素中值较小的一个}ADT RationalNumber1.5 试画出与下列法式段等价的框图.(1) product=1; i=1;while(i<=n){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;default: z=(x-y)/abs(x)*abs(y);}1.6 在法式设计中,经常使用下列三种分歧的犯错处置方式:(1) 用exit语句终止执行并陈说毛病;(2) 以函数的返回值区别正确返回或毛病返回;(3) 设置一个整型变量的函数参数以区别正确返回或某种毛病返回.试讨论这三种方法各自的优缺点.解:(1)exit经常使用于异常毛病处置,它可以强行中断法式的执行,返回把持系统.(2)以函数的返回值判断正确与否经常使用于子法式的测试,便于实现法式的局部控制.(3)用整型函数进行毛病处置的优点是可以给犯毛病类型,便于迅速确定毛病.1.7 在法式设计中,可采纳下列三种方法实现输出和输入:(1) 通过scanf和printf语句;(2) 通过函数的参数显式传递;(3) 通过全局变量隐式传递.试讨论这三种方法的优缺点.解:(1)用scanf和printf直接进行输入输出的好处是形象、直观,但缺点是需要对其进行格式控制,较为烦琐,如果呈现毛病,则会引起整个系统的解体.(2)通过函数的参数传递进行输入输出,便于实现信息的隐蔽,减少犯错的可能.(3)通过全局变量的隐式传递进行输入输出最为方便,只需修改变量的值即可,但过多的全局变量使法式的维护较为困难.1.8 设n为正整数.试确定下列各法式段中前置以记号@的语句的频度:(1) i=1; k=0;while(i<=n-1){@ k += 10*i;i++;}(2) i=1; k=0;do {@ k += 10*i;i++;} while(i<=n-1);(3) i=1; k=0;while (i<=n-1) { i++;@ k += 10*i;}(4) k=0;for(i=1; i<=n; i++) {for(j=i; j<=n; j++)@ k++;}(5) for(i=1; i<=n; i++) {for(j=1; j<=i; j++) {for(k=1; k<=j; k++)@ x += delta;}(6) i=1; j=0;while(i+j<=n) { @ if(i>j) j++;else i++;}(7) x=n; y=0; // n是不小于1的常数while(x>=(y+1)*(y+1)) {@ y++;}(8) x=91; y=100;while(y>0) {@ if(x>100) { x -= 10; y--; }else x++;}解:(1) n-1(2) n-1(3) n-1(4) n+(n-1)+(n-2)+...+1=2)1(+ n n(5) 1+(1+2)+(1+2+3)+...+(1+2+3+...+n)=∑=+ nii i12)1(=∑∑∑∑====+=+=+ninininiiiiii i1121212121)(21)1(21=)32)(1(121)1(41)12)(1(121++=++++nnnnnnnn(6) n(7)⎣⎦n向下取整(8) 11001.9 假设n为2的乘幂,而且n>2,试求下列算法的时间复杂度及变量count的值(以n的函数形式暗示).int Time(int n) { count = 0;x=2; while(x<n/2) { x *= 2;count++; }return count; }解:)(log 2n o count=2log 2-n1.11 已知有实现同一功能的两个算法,其时间复杂度分别为()nO 2和()10n O ,假设现实计算机可连续运算的时间为710秒(100多天),又每秒可执行基本把持(根据这些把持来估算算法时间复杂度)510次.试问在此条件下,这两个算法可解问题的规模(即n 值的范围)各为几多?哪个算法更适宜?请说明理由.解:12102=n n=40 121010=n n=16则对同样的循环次数n,在这个规模下,第二种算法所花费的价格要年夜很多.故在这个规模下,第一种算法更适宜. 1.12 设有以下三个函数:()10002124++=n n n f ,()3450015n n n g +=,()n n n n h log 5005.3+= 请判断以下断言正确与否:(1) f(n)是O(g(n)) (2) h(n)是O(f(n)) (3) g(n)是O(h(n)) (4) h(n)是O(n)(5) h(n)是O(nlogn)解:(1)对 (2)错 (3)错 (4)对 (5)错1.13 试设定若干n 值,比力两函数2n 和n n 2log 50的增长趋势,并确定n 在什么范围内,函数2n 的值年夜于n n 2log 50的值.解:2n 的增长趋势快.但在n 较小的时候,n n 2log 50的值较年夜. 当n>438时,n n n 22log 50>1.14 判断下列各对函数()n f 和()n g ,那时∞→n ,哪个函数增长更快?(1) ()()310!ln 102nn n n f ++=,()724++=n n n g(2)()()()25!ln +=n n f ,()5.213n n g =(3)()141.2++=n n n f ,()()()n n n g +=2!ln (4) ()()()2223n n n f +=,()()52n n n g n +=解:(1)g(n)快 (2)g(n)快 (3)f(n)快 (4) f(n)快5 试用数学归纳法证明: (1) ()()6/12112++=∑=n n n ini ()0≥n(2) ()()1/11--=+=∑x xx n ni i()0,1≥≠n x(3) 12211-=∑=-n ni i ()1≥n(4) ()2112n i n i =-∑=()1≥n1.16 试写一算法,自年夜至小依次输出顺序读入的三个整数X,Y 和Z 的值解:int max3(int x,int y,int z) {if(x>y)if(x>z) return x; else return z; elseif(y>z) return y; else return z; }1.17 已知k 阶斐波那契序列的界说为0=f ,01=f ,…,02=-k f ,11=-k f ;kn n n n f f f f ---+++= 21, ,1,+=k k n试编写求k 阶斐波那契序列的第m 项值的函数算法,k 和m 均以值调用的形式在函数参数表中呈现.解:k>0为阶数,n 为数列的第n 项 int Fibonacci(int k,int n) {if(k<1) exit(OVERFLOW);int *p,x;p=new int[k+1];if(!p) exit(OVERFLOW);int i,j;for(i=0;i<k+1;i++){if(i<k-1) p[i]=0;else p[i]=1;}for(i=k+1;i<n+1;i++){x=p[0];for(j=0;j<k;j++) p[j]=p[j+1];p[k]=2*p[k-1]-x;}return p[k];}1.18 假设有A,B,C,D,E五个高等院校进行田径对立赛,各院校的,并输出.解:typedef enum{A,B,C,D,E} SchoolName;typedef enum{Female,Male} SexType;typedef struct{char event[3]; //项目SexType sex;SchoolName school;int score;} Component;typedef struct{int MaleSum;//男团总分int FemaleSum;//女团总分int TotalSum;//团体总分} Sum;Sum SumScore(SchoolName sn,Component a[],int n){Sum temp;temp.MaleSum=0; temp.FemaleSum=0; temp.TotalSum=0; int i;for(i=0;i<n;i++){ if(a[i].school==sn){if(a[i].sex==Male) temp.MaleSum+=a[i].score;if(a[i].sex==Female) temp.FemaleSum+=a[i].score; } }temp.TotalSum=temp.MaleSum+temp.FemaleSum; return temp; }1.19 试编写算法,计算ii 2!*的值并存入数组a[0..arrsize-1]的第i-1个分量中(i=1,2,…,n).假设计算机中允许的整数最年夜值为maxint,则当n>arrsize 或对某个()n k k ≤≤1,使int max 2!>•kk 时,应按犯错处置.注意选择你认为较好的犯错处置方法.解:#include<iostream.h> #include<stdlib.h> #define MAXINT 65535 #define ArrSize 100 int fun(int i); int main() {int i,k;int a[ArrSize]; cout<<"Enter k:"; cin>>k;if(k>ArrSize-1) exit(0); for(i=0;i<=k;i++){ if(i==0) a[i]=1; else{if(2*i*a[i-1]>MAXINT) exit(0); else a[i]=2*i*a[i-1]; }}for(i=0;i<=k;i++){if(a[i]>MAXINT) exit(0); else cout<<a[i]<<" "; }return 0; }1.20 试编写算法求一元多项式的值()∑==ni ii n x a x P 0的值()0x P n ,并确定算法中每一语句的执行次数和整个算法的时间复杂度.注意选择你认为较好的输入和输出方法.本题的输入为()n i a i ,,1,0 =,0x 和n ,输出为()0x P n .解:#include<iostream.h> #include<stdlib.h> #define N 10double polynomail(int a[],int i,double x,int n); int main() {double x; int n,i; int a[N];cout<<"输入变量的值x:"; cin>>x;cout<<"输入多项式的阶次n:"; cin>>n;if(n>N-1) exit(0);cout<<"输入多项式的系数a[0]--a[n]:"; for(i=0;i<=n;i++) cin>>a[i]; cout<<"The polynomail value is"<<polynomail(a,n,x,n)<<endl; return 0; }double polynomail(int a[],int i,double x,int n) {if(i>0) return a[n-i]+polynomail(a,i-1,x,n)*x;else return a[n];}本算法的时间复杂度为o(n).第2章线性表2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点).解:头指针是指向链表中第一个结点的指针.首元结点是指链表中存储第一个数据元素的结点.头结点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为了方便对链表的把持.它可以对空表、非空表以及首元结点的把持进行统一处置.2.2 填空题.解:(1) 在顺序表中拔出或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与元素在表中的位置有关.(2) 顺序表中逻辑上相邻的元素的物理位置肯定紧邻.单链表中逻辑上相邻的元素的物理位置纷歧定紧邻.(3) 在单链表中,除首元结点外,任一结点的存储位置由其前驱结点的链域的值指示.(4) 在单链表中设置头结点的作用是拔出和删除首元结点时不用进行特殊处置.2.3 在什么情况下用顺序表比链表好?解:当线性表的数据元素在物理位置上是连续存储的时候,用顺序表比用链表好,其特点是可以进行随机存取.2.4 对以下单链表分别执行下列各法式段,并画出结果示意图.解:2.5 画出执行下列各行语句后各指针及链表的示意图.L=(LinkList)malloc(sizeof(LNode));P=L;for(i=1;i<=4;i++){P->next=(LinkList)malloc(sizeof(LNode));P=P->next;P->data=i*2-1;}P->next=NULL;for(i=4;i>=1;i--) Ins_LinkList(L,i+1,i*2);for(i=1;i<=3;i++) Del_LinkList(L,i);解:2.6 已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的谜底中选择合适的语句序列.a. 在P结点后拔出S结点的语句序列是__________________.b. 在P结点前拔出S结点的语句序列是__________________.c. 在表首拔出S结点的语句序列是__________________.d. 在表尾拔出S结点的语句序列是__________________.(1) P->next=S;(2) P->next=P->next->next;(3) P->next=S->next;(4) S->next=P->next;(5) S->next=L;(6) S->next=NULL;(7) Q=P;(8) while(P->next!=Q) P=P->next;(9) while(P->next!=NULL) P=P->next;(10) P=Q;(11) P=L;(12) L=S;(13) L=P;解:a. (4) (1)b. (7) (11) (8) (4) (1)c. (5) (12)d. (9) (1) (6)2.7 已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的谜底中选择合适的语句序列.a. 删除P结点的直接后继结点的语句序列是____________________.b. 删除P结点的直接前驱结点的语句序列是____________________.c. 删除P结点的语句序列是____________________.d. 删除首元结点的语句序列是____________________.e. 删除尾元结点的语句序列是____________________.(1) P=P->next;(2) P->next=P;(3) P->next=P->next->next;(4) P=P->next->next;(5) while(P!=NULL) P=P->next;(6) while(Q->next!=NULL) { P=Q; Q=Q->next; }(7) while(P->next!=Q) P=P->next;(8) while(P->next->next!=Q) P=P->next;(9) while(P->next->next!=NULL) P=P->next;(10) Q=P;(11) Q=P->next;(12) P=L;(13) L=L->next;(14) free(Q);解:a. (11) (3) (14)b. (10) (12) (8) (3) (14)c. (10) (12) (7) (3) (14)d. (12) (11) (3) (14)e. (9) (11) (3) (14)2.8 已知P结点是某双向链表的中间结点,试从下列提供的谜底中选择合适的语句序列.a. 在P结点后拔出S结点的语句序列是_______________________.b. 在P结点前拔出S结点的语句序列是_______________________.c. 删除P结点的直接后继结点的语句序列是_______________________.d. 删除P结点的直接前驱结点的语句序列是_______________________.e. 删除P结点的语句序列是_______________________.(1) P->next=P->next->next;(2) P->priou=P->priou->priou;(3) P->next=S;(4) P->priou=S;(5) S->next=P;(6) S->priou=P;(7) S->next=P->next;(8) S->priou=P->priou;(9) P->priou->next=P->next;(10) P->priou->next=P;(11) P->next->priou=P;(12) P->next->priou=S;(13) P->priou->next=S;(14) P->next->priou=P->priou;(15) Q=P->next;(16) Q=P->priou;(17) free(P);(18) free(Q);解:a. (7) (3) (6) (12)b. (8) (4) (5) (13)c. (15) (1) (11) (18)d. (16) (2) (10) (18)e. (14) (9) (17)2.9 简述以下算法的功能.(1) Status A(LinkedList L) { //L是无表头结点的单链表if(L && L->next) {Q=L;L=L->next;P=L;while(P->next) P=P->next;P->next=Q;Q->next=NULL;}return OK;}(2) void BB(LNode *s, LNode *q) {p=s;while(p->next!=q) p=p->next;p->next =s;}void AA(LNode *pa, LNode *pb) {//pa和pb分别指向单循环链表中的两个结点BB(pa,pb);BB(pb,pa);}解:(1) 如果L的长度不小于2,将L的首元结点酿成尾元结点.(2) 将单循环链表拆成两个单循环链表.2.10 指出以下算法中的毛病和低效之处,并将它改写为一个既正确又高效的算法.Status DeleteK(SqList &a,int i,int k){//本过程从顺序存储结构的线性表a中删除第i个元素起的k 个元素if(i<1||k<0||i+k>a.length) return INFEASIBLE;//参数分歧法else {for(count=1;count<k;count++){//删除第一个元素for(j=a.length;j>=i+1;j--) a.elem[j-i]=a.elem[j];a.length--;}return OK;}解:Status DeleteK(SqList &a,int i,int k){//从顺序存储结构的线性表a中删除第i个元素起的k个元素//注意i的编号从0开始int j;if(i<0||i>a.length-1||k<0||k>a.length-i) return INFEASIBLE;for(j=0;j<=k;j++)a.elem[j+i]=a.elem[j+i+k];a.length=a.length-k;return OK;}2.11 设顺序表va中的数据元素递增有序.试写一算法,将x拔出到顺序表的适当位置上,以坚持该表的有序性.解:Status InsertOrderList(SqList &va,ElemType x){//在非递加的顺序表va中拔出元素x并使其仍成为顺序表的算法int i;if(va.length==va.listsize)return(OVERFLOW);for(i=va.length;i>0,x<va.elem[i-1];i--)va.elem[i]=va.elem[i-1];va.elem[i]=x;va.length++;return OK;}2.12 设()m a a A ,,1 =和()n b b B ,,1 =均为顺序表,A '和B '分别为A 和B 中除去最年夜共同前缀后的子表.若='='B A 空表,则B A =;若A '=空表,而≠'B 空表,或者两者均不为空表,且A '的首元小于B '的首元,则B A <;否则B A >.试写一个比力A ,B 年夜小的算法.解:Status CompareOrderList(SqList &A,SqList &B){int i,k,j;k=A.length>B.length?A.length:B.length;for(i=0;i<k;i++){if(A.elem[i]>B.elem[i]) j=1;if(A.elem[i]<B.elem[i]) j=-1;}if(A.length>k) j=1;if(B.length>k) j=-1;if(A.length==B.length) j=0;return j;}2.13 试写一算法在带头结点的单链表结构上实现线性表把持Locate(L,x);解:int LocateElem_L(LinkList &L,ElemType x){int i=0;LinkList p=L;while(p&&p->data!=x){p=p->next;i++;}if(!p) return 0;else return i;}2.14 试写一算法在带头结点的单链表结构上实现线性表把持Length(L).解://返回单链表的长度int ListLength_L(LinkList &L) {int i=0;。

数据结构课后习题答案详解(C语言版-严蔚敏)

数据结构课后习题答案详解(C语言版-严蔚敏)

数据结构习题集答案(C语言版严蔚敏)第2章线性表2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。

解:头指针是指向链表中第一个结点的指针。

首元结点是指链表中存储第一个数据元素的结点。

头结点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为了方便对链表的操作。

它可以对空表、非空表以及首元结点的操作进行统一处理。

2.2 填空题。

解:(1) 在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与元素在表中的位置有关。

(2) 顺序表中逻辑上相邻的元素的物理位置必定紧邻。

单链表中逻辑上相邻的元素的物理位置不一定紧邻。

(3) 在单链表中,除了首元结点外,任一结点的存储位置由其前驱结点的链域的值指示。

(4) 在单链表中设置头结点的作用是插入和删除首元结点时不用进行特殊处理。

2.3 在什么情况下用顺序表比链表好?解:当线性表的数据元素在物理位置上是连续存储的时候,用顺序表比用链表好,其特点是可以进行随机存取。

2.4 对以下单链表分别执行下列各程序段,并画出结果示意图。

解:2.5 画出执行下列各行语句后各指针及链表的示意图。

L=(LinkList)malloc(sizeof(LNode)); P=L;for(i=1;i<=4;i++){P->next=(LinkList)malloc(sizeof(LNode));P=P->next; P->data=i*2-1;}P->next=NULL;for(i=4;i>=1;i--) Ins_LinkList(L,i+1,i*2);for(i=1;i<=3;i++) Del_LinkList(L,i);解:2.6 已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。

a. 在P结点后插入S结点的语句序列是__________________。

数据结构习题集答案(C语言版严蔚敏) 高清完整版

数据结构习题集答案(C语言版严蔚敏) 高清完整版

第 1 章绪论1.1简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1.3设有数据结构(D,R),其中D = {d1, d 2, d 3, d 4},R = {r},r = {(d1, d 2), (d 2, d3),(d 3, d 4)}试按图论中图的画法惯例画出其逻辑结构图。

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

解:ADT Complex{数据对象:D={r,i|r,i 为实数}数据关系:R={<r,i>}基本操作:InitComplex(&C,re,im)操作结果:构造一个复数 C,其实部和虚部分别为re 和 imDestroyCmoplex(&C)操作结果:销毁复数 CGet(C,k,&e)操作结果:用 e 返回复数C 的第k 元的值Put(&C,k,e)操作结果:改变复数 C 的第k 元的值为eIsAscending(C)操作结果:如果复数 C 的两个元素按升序排列,则返回 1,否则返回 0IsDescending(C)操作结果:如果复数 C 的两个元素按降序排列,则返回 1,否则返回 0 Max(C,&e)操作结果:用 e 返回复数C 的两个元素中值较大的一个Min(C,&e)操作结果:用 e 返回复数C 的两个元素中值较小的一个}ADT ComplexADT RationalNumber{数据对象:D={s,m|s,m 为自然数,且 m 不为 0}数据关系:R={<s,m>}基本操作:InitRationalNumber(&R,s,m)操作结果:构造一个有理数 R,其分子和分母分别为 s 和mDestroyRationalNumber(&R)操作结果:销毁有理数 RGet(R,k,&e)操作结果:用 e 返回有理数 R 的第k 元的值Put(&R,k,e)操作结果:改变有理数 R 的第k 元的值为 eIsAscending(R)操作结果:若有理数 R 的两个元素按升序排列,则返回 1,否则返回 0 IsDescending(R)操作结果:若有理数 R 的两个元素按降序排列,则返回 1,否则返回 0 Max(R,&e)操作结果:用 e 返回有理数 R 的两个元素中值较大的一个Min(R,&e)操作结果:用 e 返回有理数 R 的两个元素中值较小的一个}ADT RationalNumber1.5试画出与下列程序段等价的框图。

严蔚敏版数据结构课后习题答案-完整版

严蔚敏版数据结构课后习题答案-完整版

第1章绪论1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1.3 设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =试按图论中图的画法惯例画出其逻辑结构图。

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

解:ADT Complex{数据对象:D={r,i|r,i 为实数}数据关系:R={<r,i>}基本操作: InitComplex(&C,re,im)操作结果:构造一个复数C ,其实部和虚部分别为re和imDestroyCmoplex(&C)操作结果:销毁复数CGet(C,k,&e)操作结果:用e返回复数C的第k元的值Put(&C,k,e)操作结果:改变复数C的第k元的值为eIsAscending(C)操作结果:如果复数C的两个元素按升序排列,则返回1,否则返回0IsDescending(C)操作结果:如果复数C的两个元素按降序排列,则返回1,否则返回0Max(C,&e)操作结果:用e返回复数C的两个元素中值较大的一个Min(C,&e)操作结果:用e返回复数C的两个元素中值较小的一个}ADT ComplexADT RationalNumber{数据对象:D={s,m|s,m为自然数,且m不为0}数据关系:R={<s,m>}基本操作:InitRationalNumber(&R,s,m)操作结果:构造一个有理数R,其分子和分母分别为s和mDestroyRationalNumber(&R)操作结果:销毁有理数RGet(R,k,&e)操作结果:用e返回有理数R的第k元的值Put(&R,k,e)操作结果:改变有理数R的第k元的值为eIsAscending(R)操作结果:若有理数R的两个元素按升序排列,则返回1,否则返回0IsDescending(R)操作结果:若有理数R的两个元素按降序排列,则返回1,否则返回0Max(R,&e)操作结果:用e返回有理数R的两个元素中值较大的一个Min(R,&e)操作结果:用e返回有理数R的两个元素中值较小的一个}ADT RationalNumber1.5 试画出与下列程序段等价的框图。

严蔚敏版数据结构课后习题答案-完整版

严蔚敏版数据结构课后习题答案-完整版

第1章绪论1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1.3 设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =试按图论中图的画法惯例画出其逻辑结构图。

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

解:ADT Complex{数据对象:D={r,i|r,i 为实数}数据关系:R={<r,i>}基本操作: InitComplex(&C,re,im)操作结果:构造一个复数C ,其实部和虚部分别为re和imDestroyCmoplex(&C)操作结果:销毁复数CGet(C,k,&e)操作结果:用e返回复数C的第k元的值Put(&C,k,e)操作结果:改变复数C的第k元的值为eIsAscending(C)操作结果:如果复数C的两个元素按升序排列,则返回1,否则返回0IsDescending(C)操作结果:如果复数C的两个元素按降序排列,则返回1,否则返回0Max(C,&e)操作结果:用e返回复数C的两个元素中值较大的一个Min(C,&e)操作结果:用e返回复数C的两个元素中值较小的一个}ADT ComplexADT RationalNumber{数据对象:D={s,m|s,m为自然数,且m不为0}数据关系:R={<s,m>}基本操作:InitRationalNumber(&R,s,m)操作结果:构造一个有理数R,其分子和分母分别为s和mDestroyRationalNumber(&R)操作结果:销毁有理数RGet(R,k,&e)操作结果:用e返回有理数R的第k元的值Put(&R,k,e)操作结果:改变有理数R的第k元的值为eIsAscending(R)操作结果:若有理数R的两个元素按升序排列,则返回1,否则返回0IsDescending(R)操作结果:若有理数R的两个元素按降序排列,则返回1,否则返回0Max(R,&e)操作结果:用e返回有理数R的两个元素中值较大的一个Min(R,&e)操作结果:用e返回有理数R的两个元素中值较小的一个}ADT RationalNumber1.5 试画出与下列程序段等价的框图。

数据结构 严蔚敏 清华大学出版社 习题及答案

数据结构 严蔚敏 清华大学出版社 习题及答案

第1章绪论 (2)1、填空题 (2)2、应用题 (2)第2章线性表 (3)1、填空题 (3)2、选择题 (3)3、判断题 (4)4、程序设计题 (4)第3章栈和队列 (6)1、填空题 (6)2、选择题 (6)3、判断题 (7)第4章串 (7)1、选择题 (7)2、判断题 (7)第5章数组和广义表 (7)1、填空题 (7)2、选择题 (7)3、判断题 (8)第6章树和二叉树 (8)1、填空题 (8)2、选择题 (9)3、判断题 (9)4、应用题 (9)5、读程序写结果 (16)第7章图 (17)1、填空题 (17)2、选择题 (17)3、判断题 (18)4、应用题 (18)5、程序设计题 (22)第8章动态存储管理 (23)1、填空题 (23)2、选择题 (23)3、判断题 (23)4、应用题 (23)5、程序设计题 (23)第9章查找 (23)1、选择题 (23)2、判断题 (24)3、应用题 (24)4、程序设计题 (26)第10章内部排序 (27)1、填空题 (27)2、选择题 (27)3、判断题 (27)4、应用题 (28)第11章外部排序 (28)第12章文件 (28)第1章绪论1、填空题1.常见的数据结构有_线性__结构,__树形___结构,__图形__结构等三种。

2.常见的存储结构有__顺序存储_______结构,__链式存储____结构等两种。

3.数据的基本单位是_数据元素___,它在计算机中是作为一个整体来处理的。

4.数据结构中的结构是指数据间的逻辑关系,常见的结构可分为两大类,__线性结构____和__非线性结构___。

2、应用题1、给出以下算法的时间复杂度.void fun(int n){int i=1,k=100;while(i<n){k=k+1;i=i+2;}}时间复杂度为____O(n)_____。

2、给出以下算法的时间复杂度.void fun2(int n){int i=1,k=100;while(i<n){i=i*10;k=k+1;}}时间复杂度为____O(log n)___________。

严蔚敏版数据结构课后习题答案-完整版

严蔚敏版数据结构课后习题答案-完整版

第1章 绪论宇文皓月1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1.3 设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =试按图论中图的画法惯例画出其逻辑结构图。

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

解:ADT Complex{数据对象:D={r,i|r,i 为实数}数据关系:R={<r,i>}基本操纵:InitComplex(&C,re,im)操纵结果:构造一个复数C,其实部和虚部分别为re和im DestroyCmoplex(&C)操纵结果:销毁复数CGet(C,k,&e)操纵结果:用e返回复数C的第k元的值Put(&C,k,e)操纵结果:改变复数C的第k元的值为eIsAscending(C)操纵结果:如果复数C的两个元素按升序排列,则返回1,否则返回0 IsDescending(C)操纵结果:如果复数C的两个元素按降序排列,则返回1,否则返回0 Max(C,&e)操纵结果:用e返回复数C的两个元素中值较大的一个Min(C,&e)操纵结果:用e返回复数C的两个元素中值较小的一个}ADT ComplexADT RationalNumber{数据对象:D={s,m|s,m为自然数,且m不为0}数据关系:R={<s,m>}基本操纵:InitRationalNumber(&R,s,m)操纵结果:构造一个有理数R,其分子和分母分别为s和m DestroyRationalNumber(&R)操纵结果:销毁有理数RGet(R,k,&e)操纵结果:用e返回有理数R的第k元的值Put(&R,k,e)操纵结果:改变有理数R的第k元的值为eIsAscending(R)操纵结果:若有理数R的两个元素按升序排列,则返回1,否则返回0 IsDescending(R)操纵结果:若有理数R的两个元素按降序排列,则返回1,否则返回0 Max(R,&e)操纵结果:用e返回有理数R的两个元素中值较大的一个Min(R,&e)操纵结果:用e返回有理数R的两个元素中值较小的一个}ADT RationalNumber1.5 试画出与下列程序段等价的框图。

严蔚敏版数据结构课后习题答案-完整版

严蔚敏版数据结构课后习题答案-完整版

(2) n-1
(3) n-1 (4) n+(n-1)+(n-2)+...+1=
n(n 1) 2
(5) 1+(1+2)+(1+2+3)+...+(1+2+3+...+n)=
n i (i 1) i1 2
= = (6) n
1n i (i 1)
1 n (i 2
i)
1 n i2
1n i
2 i1
2i 1
2i 1
2n
2
,g
n
n n2
n5
解: (1)g(n) 快 (2)g(n) 快 (3)f(n) 快 (4) f(n) 快
1.15 试用数学归纳法证明:
n
(1)
i 2 n n 1 2n 1 / 6
i1
n0
n
(2)
xi
i0
xn 1 1 / x 1
x 1, n 0
n
(3)
2i 1 2n 1
i1
n1
n
(4)
2i 1 n 2
while(x<n/2) {
x *= 2; count++;
}
return cБайду номын сангаасunt;
}
解: o(log 2 n) count= log 2 n 2 1.11 已知有实现同一功能的两个算法,其时间复杂度分别为
O 2n 和
O n10 ,假设现实计算机可连续运算的时间为 107 秒( 100 多天),又每
(1) product=1; i=1; while(i<=n){ product *= i; i++; }

严蔚敏版数据结构课后习题答案-完整版

严蔚敏版数据结构课后习题答案-完整版

第1章绪论之南宫帮珍创作1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1.3 设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =试按图论中图的画法惯例画出其逻辑结构图。

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

解:ADT Complex{数据对象:D={r,i|r,i 为实数}数据关系:R={<r,i>}基本操纵:InitComplex(&C,re,im)操纵结果:构造一个复数C ,其实部和虚部分别为re 和imDestroyCmoplex(&C)操纵结果:销毁复数CGet(C,k,&e)操纵结果:用e返回复数C的第k元的值Put(&C,k,e)操纵结果:改变复数C的第k元的值为eIsAscending(C)操纵结果:如果复数C的两个元素按升序排列,则返回1,否则返回0IsDescending(C)操纵结果:如果复数C的两个元素按降序排列,则返回1,否则返回0Max(C,&e)操纵结果:用e返回复数C的两个元素中值较大的一个Min(C,&e)操纵结果:用e返回复数C的两个元素中值较小的一个}ADT ComplexADT RationalNumber{数据对象:D={s,m|s,m为自然数,且m不为0}数据关系:R={<s,m>}基本操纵:InitRationalNumber(&R,s,m)操纵结果:构造一个有理数R,其分子和分母分别为s和mDestroyRationalNumber(&R)操纵结果:销毁有理数RGet(R,k,&e)操纵结果:用e返回有理数R的第k元的值Put(&R,k,e)操纵结果:改变有理数R的第k元的值为eIsAscending(R)操纵结果:若有理数R的两个元素按升序排列,则返回1,否则返回0IsDescending(R)操纵结果:若有理数R的两个元素按降序排列,则返回1,否则返回0Max(R,&e)操纵结果:用e返回有理数R的两个元素中值较大的一个Min(R,&e)操纵结果:用e返回有理数R的两个元素中值较小的一个}ADT RationalNumber1.5 试画出与下列程序段等价的框图。

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

第一章绪论一、选择题1.组成数据的基本单位是()(A)数据项(B)数据类型(C)数据元素(D)数据变量2.数据结构是研究数据的()以及它们之间的相互关系。

(A)理想结构,物理结构(B)理想结构,抽象结构(C)物理结构,逻辑结构(D)抽象结构,逻辑结构3.在数据结构中,从逻辑上可以把数据结构分成()(A)动态结构和静态结构(B)紧凑结构和非紧凑结构(C)线性结构和非线性结构(D)内部结构和外部结构4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。

① (A)数据元素(B)计算方法(C)逻辑存储(D)数据映像② (A)结构(B)关系(C)运算(D)算法5.算法分析的目的是()。

(A)找出数据结构的合理性(B)研究算法中的输入和输出的关系(C)分析算法的效率以求改进(D)分析算法的易懂性和文档性6.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。

① (A)计算方法(B)排序方法(C)解决问题的有限运算序列(D)调度方法② (A)可执行性、可移植性和可扩充性(B)可行性、确定性和有穷性(C)确定性、有穷性和稳定性(D)易读性、稳定性和安全性二、判断题1.数据的机内表示称为数据的存储结构。

()2.算法就是程序。

()3.数据元素是数据的最小单位。

()4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。

()5.算法的时间复杂度取决于问题的规模和待处理数据的初态。

()三、填空题1.数据逻辑结构包括________、________、_________ 和_________四种类型,其中树形结构和图形结构合称为_____。

2.在线性结构中,第一个结点____前驱结点,其余每个结点有且只有______个前驱结点;最后一个结点______后续结点,其余每个结点有且只有_______个后续结点。

3.在树形结构中,树根结点没有_______结点,其余每个结点有且只有_______个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以_________。

4.在图形结构中,每个结点的前驱结点数和后续结点数可以_________。

5.线性结构中元素之间存在________关系,树形结构中元素之间存在______关系,图形结构中元素之间存在_______关系。

6.算法的五个重要特性是_______、_______、______、_______、_______。

7.数据结构的三要素是指______、_______和________。

8.链式存储结构与顺序存储结构相比较,主要优点是________________________________。

9.设有一批数据元素,为了最快的存储某元素,数据结构宜用_________结构,为了方便插入一个元素,数据结构宜用____________结构。

四、算法分析题1.求下列算法段的语句频度及时间复杂度参考答案:一、选择题1. C2.C3. C4. A、B5. C6.C、B二、判断题:1、√2、×3、×4、×5、√三、填空题1、线性、树形、图形、集合? ;非线性(网状)2、没有;1;没有;13、前驱;1;后继;任意多个4、任意多个5、一对一;一对多;多对多6、有穷性;确定性;可行性;输入;输出7、数据元素;逻辑结构;存储结构 8、插入、删除、合并等操作较方便 9、顺序存储;链式存储四、算法分析题for(i=1; i<=n; i++)for(j =1; j <=i ; j++)x=x+1;分析:该算法为一个二重循环,执行次数为内、外循环次数相乘,但内循环次数不固定,与外循环有关,因些,时间频度T(n)=1+2+3+…+n=n*(n+1)/2有1/4≤T(n)/n2≤1,故它的时间复杂度为O(n2), 即T(n)与n2 数量级相同。

2、分析下列算法段的时间频度及时间复杂度for (i=1;i<=n;i++)for (j=1;j<=i;j++)for ( k=1;k<=j;k++)x=i+j-k;分析算法规律可知时间频度T(n)=1+(1+2)+(1+2+3)+...+(1+2+3+…+n)由于有1/6 ≤ T(n)/ n3 ≤1,故时间复杂度为O(n3)第二章线性表一、选择题1.一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )(A)110 (B)108(C)100 (D)1202. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。

(A)64(B)63 (C)63.5 (D)73.线性表采用链式存储结构时,其地址()。

(A) 必须是连续的 (B) 部分地址必须是连续的(C) 一定是不连续的 (D) 连续与否均可以4. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s 所指结点,则执行()(A)s->next=p;p->next=s; (B) s->next=p->next;p->next=s; (C)s->next=p->next;p=s; (D)p->next=s;s->next=p;5.在一个单链表中,若删除p所指结点的后续结点,则执行()(A)p->next=p->next->next; (B)p=p->next;p->next=p->next->next;(C)p->next=p->next; (D)p =p->next->next;6.下列有关线性表的叙述中,正确的是()(A)线性表中的元素之间隔是线性关系(B)线性表中至少有一个元素(C)线性表中任何一个元素有且仅有一个直接前趋(D)线性表中任何一个元素有且仅有一个直接后继7.线性表是具有n个()的有限序列(n≠0)(A)表元素(B)字符(C)数据元素(D)数据项二、判断题1.线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。

()2.如果没有提供指针类型的语言,就无法构造链式结构。

()3.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余的结点只有一个前驱和后继。

()4.语句p=p->next完成了指针赋值并使p指针得到了p指针所指后继结点的数据域值。

()5.要想删除p指针的后继结点,我们应该执行q=p->next ;p->next=q->next; free(q)。

()三、填空题1.已知P为单链表中的非首尾结点,在P结点后插入S结点的语句为:_______________________ 。

2.顺序表中逻辑上相邻的元素物理位置( )相邻,单链表中逻辑上相邻的元素物理位置_________相邻。

3.线性表L=(a1,a2,...,an)采用顺序存储,假定在不同的n +1个位置上插入的概率相同,则插入一个新元素平均需要移动的元素个数是________________________4.在非空双向循环链表中,在结点q的前面插入结点p的过程如下:p->prior=q->prior;q->prior->next=p;p->next=q;______________________;5.已知L是无表头结点的单链表,是从下列提供的答案中选择合适的语句序列,分别实现:(1)表尾插入s结点的语句序列是_______________________________(2) 表尾插入 s结点的语句序列是_______________________________1.p->next=s;2.p=L;3.L=s;4.p->next=s->next;5.s->next=p->next;6.s->next=L;7.s->next=null;8.w hile(p->next!= Q)? p=p-next;9.w hile(p->next!=null) p=p->next;四、算法设计题1.试编写一个求已知单链表的数据域的平均值的函数(数据域数据类型为整型)。

2.已知带有头结点的循环链表中头指针为head,试写出删除并释放数据域值为x的所有结点的c函数。

3.某百货公司仓库中有一批电视机,按其价格从低到高的次序构成一个循环链表,每个结点有价格、数量和链指针三个域。

现出库(销售)m台价格为h的电视机,试编写算法修改原链表。

4.某百货公司仓库中有一批电视机,按其价格从低到高的次序构成一个循环链表,每个结点有价格、数量和链指针三个域。

现新到m 台价格为h的电视机,试编写算法修改原链表。

5.线性表中的元素值按递增有序排列,针对顺序表和循环链表两种不同的存储方式,分别编写C函数删除线性表中值介于a与b(a≤b)之间的元素。

6.设A=(a0,a1,a2,...,an-1),B=(b0,b1,b2,...,bm-1)是两个给定的线性表,它们的结点个数分别是n和m,且结点值均是整数。

若n=m,且 ai= bi (0≤i<n ),则A=B;若n<m ,且ai=bi (0≤i<n ),则A<B;若存在一个j, j<m ,j<n ,且ai=bi (0≤i<j ),若aj<bj,则A<B,否则 A>B。

试编写一个比较A和B的C函数,该函数返回 -1或 0或 1,分别表示 A<B或 A=B或 A>B。

7.试编写算法,删除双向循环链表中第k个结点。

8.线性表由前后两部分性质不同的元素组成(a0,a1,...,an-1,b0,b1,...,bm-1),m和n为两部分元素的个数,若线性表分别采用数组和链表两种方式存储,编写算法将两部分元素换位成(b0,b1,...,bm-1,a0,a1,...,an-1),分析两种存储方式下算法的时间和空间复杂度。

9.用循环链表作线性表(a0,a1,...,an-1)和(b0,b1,...,bm-1)的存储结构,头指针分别为ah和bh,设计C函数,把两个线性表合并成形如(a0,b0,a1,b1,…)的线性表,要求不开辟新的动态空间,利用原来循环链表的结点完成合并操作,结构仍为循环链表,头指针为head,并分析算法的时间复杂度。

10.试写出将一个线性表分解为两个带有头结点的循环链表,并将两个循环链表的长度放在各自的头结点的数据域中的C函数。

其中,线性表中序号为偶数的元素分解到第一个循环链表中,序号为奇数的元素分解到第二个循环链表中。

11.试写出把线性链表改为循环链表的C函数。

相关文档
最新文档