严蔚敏数据结构题集C语言版答案.docx
《严蔚敏数据结构题集C语言版答案.docx》由会员分享,可在线阅读,更多相关《严蔚敏数据结构题集C语言版答案.docx(133页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、可以失败,不可以失志。可以失望,不可以绝望。只要眷恋奇迹,会得到奇迹的眷恋。 严蔚敏数据结构C语言版答案详解第1章绪论1 .!简述下列术语:数据数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型解:数据是对客观事物的符号表示在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称数据元素是数据的基本单位在计算机程序中通常作为个整体进行考虑和处理数据对象是性质相同的数据元素的集合是数据的个子集数据结构是相互之间存在种或多种特定关系的数据元素的集合存储结构是数据结构在计算机中的表示数据类型是个值的集合和定义在这个值集上的组操作的总称抽象数据类型是指个数学模型以及定义在该模型
2、上的组操作是对一般数据类型的扩展1. 2试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别解:抽象数据类型包含一般数据类型的概念但含义比一般数据类型更广、更抽象一般数据类型由具体语言系统内部定义直接提供给编程者定义用户数据因此称它们为预定义数据类型抽象数据类型通常由编程者定义包括定义它所使用的数据和在这些数据上所进行的操作在定义抽象数据类型中的数据部分和操作部分时要求只定义到数据的逻辑结构和操作说明不考虑数据的存储结构和操作的具体实现这样抽象层次更高更能为其他用户提供良好的使用接口1.3 设有数据结构(DR)其中试按图论中图的画法惯例画出其逻辑结构图解:1.4 试仿照三元组的
3、抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其 分子、分母均为自然数且分母不为零的分数)解:ADT Complex 数据对象:D=r i I r i为实数 数据关系:R=基本操作:InitRationalNumber(&R s m)操作结果:构造个有理数R 其分子和分母分别为s和mDestroyRationalNumber(&R) 操作结果:销毁有理数RGet (R k &e)操作结果:用e返回有理数R的第k元的值 Put(&Rk e)操作结果:改变有理数R的第k元的值为e IsAscending(R)操作结果:若有理数R的两个元素按升序排列 则返回1 否则返回IsDescen
4、ding(R)操作结果:若有理数R的两个元素按降序排列 则返回1 否则返回Max (R &e)操作结果:用e返回有理数R的两个元素中值较大的个 Min(R&e)操作结果:用e返回有理数R的两个元素中值较小的个 ADT RationalNumber1.5 试画出与下列程序段等价的框图(1) product=l; i=l;while (i=n)product *- i;i+;)(2) i=0;do i+; while(i!=n) & (ai!=x);(3) switch case xy: z=y-x; break;case x=y: z=abs(x*y); break;default: z=(x-
5、y)/abs(x)*abs(y);)1.6 在程序设计中常用下列三种不同的出错处理方式:(1)用exit语句终止执行并报告错误;(2)以函数的返回值区别正确返回或错误返回;(3)设置个整型变量的函数参数以区别正确返回或某种错误返回试讨论这三种方法各自的优缺点解:(l)exit常用于异常错误处理它可以强行中断程序的执行返回操作系统(2)以函数的返回值判断正确与否常用于子程序的测试便于实现程序的局部控制(3)用整型函数进行错误处理的优点是可以给出错误类型便于迅速确定错误1.7 在程序设计中可采用下列三种方法实现输出和输入:(1)通过scanf和printf语句:(2)通过函数的参数显式传递;(3)
6、通过全局变量隐式传递试讨论这三种方法的优缺点解:(1)用scanf和printf直接进行输入输出的好处是形象、直观 但缺点是需要对其进行格式控制较为烦琐如果出现错误则会引起整个系统的崩溃(2)通过函数的参数传递进行输入输出便于实现信息的隐蔽 减少出错的可能(3)通过全局变量的隐式传递进行输入输出最为方便 只需修改变量的值即可但过多的全局变量使程序的维护较为困难1.8 设n为正整数试确定下列各程序段中前置以记号的语句的频度:(1) i=l; k=0;while(i=n-l) k += 10*i: i+;)(2) i=l; k=0;do k += 10*i; i+; while(i=n-l);(3
7、) i=l; k=0;while (i=n-l) i+; k += 10*i;)(4) k=0;for(i=l; i=n; i+) for(j=i; j=n; j+) k+;)(5) for(i=l; i=n; i+) for(j=l; j=i; j+) for(k=l; k=j; k+) x += delta;)(6) i=l: j=0;while(i+jj) j+; else i+;(7) x=n; y=0;/ n是不小于1的常数while(x=(y+l)*(y+l) y+;(8) x=91; y=100;while(y0) if(x100) x -= 10; y; else x+;)解:
8、(1) n-1(2) n-1n-1(4) n+(nT) + (n-2)+.+1=(5) 1+(1+2) + (1+2+3)+. +(1+2+3+. +n)-(6) n(7)向下取整(8) 11001.9假设n为2的乘累并且n2试求下列算法的时间复杂度及变量count的值(以n的函数形式表示)int Time(int n) count = 0; x=2;while(x438时1. 14判断下列各对函数和 当时哪个函数增长更快?(1)(2)(3)(4)解:(l)g(n)快(2)g(n)快(3)f(n)快(4) f(n)快 1.15试用数学归纳法证明:(1)(2)(3)(4)1.16 试写算法自大至
9、小依次输出顺序读入的三个整数X丫和Z的值解:int max3(int xint yint z)(if(xy)if(xz) return x;else return z;elseif(yz) return y;else return z;1.17 一知k阶斐波那契序列的定义为试编写求k阶斐波那契序列的第m项值的函数算法 k和m均以值调用的形式在函数参数表中出现解:k0为阶数n为数列的第n项int Fibonacci(int kint n)(if(kl) exit(OVERFLOW);int *px;p二new intk+1;if(!p) exit(OVERFLOW);int ij;for(i=0
10、;ik+l;i+)if(ik-l) pi=0;else pi=l;for(i=k+l;in+l;i+)x=p0;for(j=0;jk;j+) pj=pj+U;pk=2*pk-l-x;return p|_k;1.18 假设有ABCDE五个高等院校进行田径对抗赛 各院校的单项成绩均已存入计算机 并构成一张表 表中每一行的形式为 项目名称 性别 校名 成绩 得分 编写算法 处理上述表格以统计各院校的男、女总分和团体总分 并输出解: typedef enum(A BCDE SchoolName;typedef enumFemaleMale SexType; typedef struct char ev
11、ent 3; 项目 SexType sex;SchoolName school; int score; Component;typedef structint Mal eSum;男团总分int Ferna 1 eSum; 女团总分 int TotalSum; /团体总分 Sum;Sum SumScore(SchoolName sn Component a int n) Sum temp;temp. MaleSum=0;temp. FemaleSum=O;temp. TotalSum=0;int i;for(i=0;iarrsize或对某个使时应按出错处理注意选择你认为较好的出错处理方法解:#i
12、nclude#include#define MAXINT 65535#define ArrSize 100int fun(int i);int main()(int ik:int aArrSize;cout“Enter k:;cink;if(kArrSize-l) exit(0);for(i=0;iMAXINT) exit(0);else ai=2*i*ai-l;for(i=0;iMAXINT) exit(O); else coutai*)return 0;1.20试编写算法求一元多项式的值的值并确定算法中每语句的执行次数和整个算法的时间复杂度 注意选择你认为较好的输入和输出方法本题的输入为和
13、输出为解:#include#includedefine N 10double polynomail(int aint idouble xint n);int main() (double x;int ni;int aN;cout”输入变量的值x:;cinx;cout输入多项式的阶次n:;cinn;if(nN-l) exit(0);cout”输入多项式的系数a0an:;for (i=0; i=n; i+) cinai;coutThe polynomail value is polynomail (anxn)0) return an-i+polynomail(a i-1xn) *x;else re
14、turn an;本算法的时间复杂度为。(n)第2章线性表2.!描述以下三个概念的区别:头指针头结点首元结点(第一个元素结点)解:头指针是指向链表中第一个结点的指针首元结点是指链表中存储第一个数据元素的结点头结点是在首元结点之前附设的个结点该结点不存储数据元素其指针域指向首元结点其作用主要是为了方便对链表的操作它可以对空表、非空表以及首元结点的操作进行统处理2.2 填空题解:(1)在顺序表中插入或删除个元素需要平均移动表中一半元素具体移动的元素个数与元素在表中的位置有关(2)顺序表中逻辑上相邻的元素的物理位置必定紧邻单链表中逻辑上相邻的元素的物理位置不一定紧邻(3)在单链表中除了首元结点外任结点
15、的存储位置由其前驱结点的链域的值指示(4)在单链表中设置头结点的作用是插入和删除首元结点时不用进行特殊处理2.3 在什么情况下用顺序表比链表好?解:当线性表的数据元素在物理位置上是连续存储的时候用顺序表比用链表好其特点是可以进行随机存取2.4 对以下单链表分别执行下列各程序段并画出结果示意图解:2. 5画出执行下列各行语句后各指针及链表的示意图L=(LinkList)malloc(sizeof(LNode); P=L; for(i=l;inext=(LinkLi st)malloc(sizeof(LNode);P=P-next; P-data=i*2-l;)P-next=NULL;for(i=
16、4;i=l;i) Ins_LinkList(Li+1i*2);for(i=l;inext=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) wh i1e(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)
17、(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) wh i1e(P!=NULL) P=P-next;(6) while(Q-next!=NULL) P=Q; Q=Q-next; (7) while(P-next!=Q) P=P-n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 严蔚敏 数据结构 语言版 答案
限制150内