严蔚敏数据结构题集(c语言版)史上最全答案(一题可有多解).pdf
《严蔚敏数据结构题集(c语言版)史上最全答案(一题可有多解).pdf》由会员分享,可在线阅读,更多相关《严蔚敏数据结构题集(c语言版)史上最全答案(一题可有多解).pdf(203页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第1章 绪 论1.1 解:数据是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。数据对象是性质相同的数据元素的集合,是数据的一个子集。数据结构是相互之间存在一种或多种特定关系的数据元素的集合。存储结构是数据结构在计算机中的表示。数据类型是一个值的集合利定义在这个值集上的一组操作的总称。抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。是对一般数据类型的扩展。1.2试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。解:抽象数据类型包含一般数据类型的概念,
2、但含义比一般数据类型更广、更抽象。一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。1.3 解:(dT)-(d3)-(d4)1.4 解:A D T C o m p l e x 数据对象:D=r,i|r,i 为实数数据关系:R=基本操作:I n i t C o m p l e x(&C,r e,i m)操
3、作结果:构造一个复数C,其实部和虚部分别为r e 和 i mD e s t r o y C m o p l e x(&C)操作结果:销毁复数CG e t (C,k,&e)操作结果:用 e 返回复数C的第k 元的值P u t (&C,k,e)操作结果:改变复数C的第k元的值为eI s A s c e n di n g(C)操作结果:如果复数C的两个元素按升序排列,则返回1,否则返回0I s D e s c e n di n g(C)操作结果:如果复数C的两个元素按降序排列,则返回1,否则返回0M a x (C,&e)操作结果:用 e 返回复数C的两个元素中值较大的一个M i n(C,&e)操作结
4、果:用 e 返回复数C的两个元素中值较小的一个 A D T C o m p l e xA D T R a t i o n a l N u m b e r 数据对象:D=s,m|s,m 为自然数,且 m不为0 数据关系:R=基本操作:I n i t R a t i o n a l N u m b e r(&R,s,m)操作结果:构造一个有理数R,其分子和分母分别为s 和 mD e s t r o y R a t i o n a l N u m b e r(&R)操作结果:销毁有理数RG e t (R,k,&e)操作结果:用 e 返回有理数R的第k 元的值P u t (&R,k,e)操作结果:改变
5、有理数R的第k 元的值为eI s A s c e n di n g(R)操作结果:若有理数R的两个元素按升序排列,则返回1,否则返回0I s D e s c e n di n g(R)操作结果:若有理数R的两个元素按降序排列,则返回1,否则返回0M a x (R,&e)操作结果:用 e 返回有理数R的两个元素中值较大的 个M i n(R,&e)操作结果:用 e 返回有理数R的两个元素中值较小的一个 A D T R a t i o n a l N u m b e r1.5 试画出与下列程序段等价的框图。(1)p r o du c t=l:i=l;w h i l e(i =n)p r o du c
6、 t *=i;i+;)(2)i=0;do i+;w h i l e(i!=n)&(a i !=x);(3)s w i t c h c a s e x 4 3 8 时,n2 5 0 n l o g2 n1.1 4 解:g(n)快 g(n)快(3)f(n)快(4)f(n)快1.1 5 试用数学归纳法证明:(1)/=(+欢2 +1)/6 (n 0)fx=(*l)/(x T)(x*l,N0)(3)2=2 1 (n 1)i=l(4)汽 1)=2 (n 1)1.1 6 试写一算法,自大至小依次输出顺序读入的三个整数X,Y和Z的值解:int max3(int x,int y,int z)(if(xy)i f
7、(xz)return x;else return z;elsei f(yz)return y;else return z;解2:void print_descending(int x,int y,int z)按从大到小顺序输出三个数(scanf(n%d,%d,%dM,&x,&y,&z);if(xy;为表示交换的双目运算符,以下同if(yz)yz;if(xy;冒泡排序printf(%d%d%dn,x,y,z);/print_descending解3:(上机自实现)要求实现下列函数:void Descend(int&x,int&y,int&z);/*按从大到小顺序返回x,y 和 z 的 值*/vo
8、id Descend(int&x,int&y,int&z)/*按从大到小顺序返回x,y 和 z 的 值*/(int temp;if(xy)temp=x;x=y;y=temp;if(y=temp)y=temp;elsey=x;x=temp;)1.1 7 解:k 0 为阶数,n 为数列的第n 项int Fibonacci(int k,int n)(if(kl)e x it(OVERFLOW);int*p,x;p=new intk+1;if(!p)e x it(OVERFLOW);int i,j;for(i=0;ik+l;i+)if(i k-l)pi=0;else p i=l;f o r (i=k+
9、l;i n+l;i+)x=p 0;f o r(j=0;j k;j+)p j=p j+U;p k=2*p k-l-x;r e t u r n p k;)解 2:S t a t u s f i b(i n t k,i n t m,i n t&f)求k阶斐波那契序列的第m项的值f(i n t t e m p d;i f(k 2l l m 0)r e t u r n ERROR;i f(m k-l)f=0;e l s e i f (m=k-1)f=l;e l s e(f o r(i=0;i=k-2;i+)t e m p i=0;t e m p k.1 =1;初血化f o r(i=k;i v=m;i+)
10、求出序歹U 第 k至第m个元素的值(s u m=0;f o r(j=i-k;j i;j+)s u m 4-=t e m p j;t e m p i=s u m;)f=t e m p m;)r e t u r n OK;/f i b分析:通过保存已经计算出来的结果,此方法的时间复杂度仅为O(m 八 2).如果采用递归编程(大多数人都会首先想到递归方法),则时间复杂度将高达O(k 八 m).解 3:(上机已实现)要求实现下列函数:S t a t u s Fi b o n a c c i(i n t k,i n t m,i n t&f);/*如果能求得k阶斐波那契序列的第m项的值f,则返回OK;*/
11、*否则(比如,参数k 和 m不合理)返回ERROR*/S t a t u s Fi b o n a c c i(i n t k,i n t m,i n t&f)/*求 k阶斐波那契序列的第m项的值f */(i n t t e m p 200,i,j,s u m;i f(k 2|m 0)r e t u r n ERROR;i f(m k-l)f=0;e l s e i f(m=k-l)f=l;e l s e(f o r(i=0;i=k-2;i+)t e m p i=0;t e m p k-l=l;初始化f o r (i=k;i=m;i+)求出序列第k 至第m个元素的值(s u m=0;f o r
12、 (j=i-k;j=i-l;j+)s u m+=t e m p j;t e m p i=s u m;)f=t e m p m;)r e t u r n OK;1.18 解:typedef enum(A,B,C,I),E SchoolName;typedef enumFemale,Male SexType;typedef struct char event 3;项目SexType sex;SchoolName school;int score;Component;typedef struct(int Mal eSum;男团总分int Ferna 1 eSum;女团总分int TotalSum;团
13、体总分 Sum;Sum SumScore(SchoolName sn,Component a,int n)(Sum temp;temp.MaleSum=O;temp.FemaleSum=O;temp.TotalSum=0;int i;for(i=0;in;i+)if(a i.school=sn)if(a ij.sex二 二 Male)temp.MaleSum+=aiJ.score;if(aij.sex二 二 Female)temp.FemaleSum+=ai.score;)temp.TotalSum=temp.MaleSum+temp.FemaleSum;return temp;)解二:typ
14、edef struct char*sport;enum male,female gender;char schoolname;校名为 或Echar*result;int score;)resulttype;typedef struct int malescore;int femalescore;int totalscore;scoretype;void summary(resulttype result)求各校的男女总分和团体总分,假设结果已经储存在resull数组中scoretype score;i=0;while(resulti.sport!=NULL)(switch(resulli.sc
15、hoolname)(case A:score 0.totalscore+=resulti.score;if(resulti.gender=0)score 0.malescore+=resulti.score;else score 0.femalescore+=resulti.score;break;case B:score.totalscore+=resulti.score;if(resulti.gender=0)score.malescore+=resulti.score;else score.femalescore+=resulti.score;break;i+;for(i=0;i5;i+
16、)(printf(nSchool%d:nu,i);printf(nTotaI score of male:%dnM,scorei.malescore);printf(Total score o f female:%dn,score i.femalescore);printf(Total score of all:%dnn,scorei.totalscore);)/summary解 3:(上机已实现)要求实现下列函数:void Scores(ResultType result,ScoreType*score);/*求各校的男、女总分和团体总分,并依次存入数组score*/*假设比赛结果已经储存在
17、result数组中,*/*并 以 特 殊 记 录 male,1;,H,0 (scorce=0)*/*表示结束*/相关数据类型定义如下:typedef enum female,male Sex;typedef struct char*sport;/项目名称Sex gender;/性 别(女:female;男:male)char schoolname;/校名为A?B?C?D或Echar*result;/成绩int score;/得 分(7,5,4,3,2 或 1)ResultType;typedef struct int malescore;/男子总分int femalescore;/女子总分in
18、t totalscore;/男女团体总分 ScoreType;void Scores(ResultType result,ScoreType*score)/*求各校的男、女总分和团体总分,并依次存入数组score*/*假设比赛结果已经储存在result口数组中,*/*并以特殊记录T m ale,二”,0 (域 scorce=0)*/*表示结束*/(int i=0;while(resulti.sport!=NULL)(switch(resultij.schoolname)(case A:score0.totalscore+=resulti.score;if(resulti.gender=O)sc
19、ore0.femalescore+=resulti.score;else score0.malescore+=resulti.score;break;case B:score 1 J.totalscore+=resultliJ.score;if(resulti.gender=O)scorel.femalescore+=resulti.score;else score1.malescore+=resulti.score;break;case C:score2.totalscore+=resulti.score;if(resulti.gender=O)score2.femalescore+=res
20、ulti.score;else scorel2J.malescore+=resulti.score;break;case D:score3.totalscore+=resulti.score;if(resulti.gender=O)score3.femalescore+=resulti.score;else score3.malescore+=resulti.score;break;case E:score4.totalscore+=result i.score;if(resultliJ.gender=O)scorel4J.femalescore+=resultiJ.score;else sc
21、ore4J.malescore+=resultLi.score;break;)i+;for(i=0;i5;i+)(printfCchool%d:ni);printf(Total score of male:%dnn,scoreij.malescore);printf(nTotal score of female:%dnH,scorei.femalescore);printf(Total score of all:%dnn,scorei.totalscore);1.19 解:#include#include#define MAXINT 65535define ArrSize 100int fun
22、(int i);int main()(int i,k;int aA rrSize;coutArrSize-l)exit(0);for(i=0;iMAXINT)exit(0);else ai=2*i*ai-l;)for(i=0;iMAXINT)exit(0);else coutai?z ;return 0;)解二:Status algol 19(int aARRSIZE)求 i!*2八 i 序列的值且不超过 maxint(last=1;for(i=1 ;i=ARRSIZE;i+)(ai-l=last*2*i;if(ai-l/last)!=(2*i)reurn OVERFLOW;last=ai-l
23、;return OK;/algol 19分析:当某一项的结果超过了 maxint时,它除以前面一项的商会发生异常.1.20void polyvalue()f l o a t a d;f l o a t *p=a;p r i n t f(nI n p u t n u m b e r o f t e r m s:);s c a n f(%dn,&n);p r i n t f(nI n p u t t h e%d c o e f f i c i e n t s f r o m a O t o a%d:n ,n,n);f o r(i=0;i=n;i+)s c a n f(%f ,p+);p r i n
24、 t f(nI n p u t v a l u e o f x:n);s c a n f(M%f;&x);p=a;x p=1 ;s u m=0;/x p用于存放x的i次方f o r(i=0;i=n;i+)(s u m+=x p*(*p+);x p:i:=x;)p r i n t f(Va l u e i s:%f ,s u m);/p o l y v a l u e解3:(上机已实现)要求实现下列函数:S t a t u s S e r i e s(i n t ARRS I Z E,i n t a );/*求i!*2 T序列的值并依次存入长度为ARRS 1Z E的数组a;*/*若所有值均不超过
25、MAX I NT,则返回O K,否则返回OVERFL OW */S t a t u s S e r i e s(i n t ARRS I Z E,i n t a )/*求i!*2 T序列的值并依次存入长度为ARRS I Z E的数组a;*/*若所有值均不超过MAX I NT,则返回0 K,否则返回OVERFL OW */(i n t s=l,i,t;f o r(i=l;i t)r e t u r n OVERFL OW;s=a i-l;r e t u r n OK;)1.20 解:#i n c l u d e#i n c l u d e d e f i n e N 10d o u b l e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 严蔚敏 数据结构 语言版 史上最全 答案 一题可有多解
限制150内