严蔚敏数据结构题集(c语言版)史上最全答案(一题可有多解).docx
《严蔚敏数据结构题集(c语言版)史上最全答案(一题可有多解).docx》由会员分享,可在线阅读,更多相关《严蔚敏数据结构题集(c语言版)史上最全答案(一题可有多解).docx(198页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第1章绪论1.1解:数据是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素是数据的基本单位,在计算机程序中通常作为个整体进行考虑和处理。数据对象是性质相同的数据元素的集合,是数据的个子集。数据结构是相互之间存在种或多种特定关系的数据元素的集合。存储结构是数据结构在计算机中的表示。数据类型是个值的集合和定义在这个值集上的一组操作的总称。抽象数据类型是指个数学模型以及定义在该模型上的组操作。是对一般数据类型的扩展。1. 2试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。解:抽象数据类型包含一般数据类型的概念,但含义比一般数
2、据类型更广、更抽象。一般数据类型由具体语言系 统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据类型通常由编程者定义,包 括定义它所使用的数据和在这些数据上所进行的操作。在定义抽象数据类型中的数据部分和操作部分时,要求只定义 到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供 良好的使用接口。1.3 解:(dT)(d4)1. 4 解:ADT Complex 数据对象:D=r,i|r,i为实数数据关系:R=基本操作:InitRationalNumber(&R, s, m)操作结果:构造一个有理数R,其分子和分母分别为
3、s和mDestroyRationalNumber(&R)操作结果:销毁有理数RGet (R, k, &e)操作结果:用e返回有理数R的第k元的值Put (&R, k, e)操作结果:改变有理数R的第k元的值为eIsAscending(R)操作结果:若有理数R的两个元素按升序排列,则返回1,否则返回 IsDescending(R)操作结果:若有理数R的两个元素按降序排列,则返回1,否则返回 Max (R, &e)操作结果:用e返回有理数R的两个元素中值较大的个Min(R, &e)操作结果:用e返回有理数R的两个元素中值较小的一个ADT RationalNumber1.5 试画出与下列程序段等价的
4、框图。(1) product=l; i=l;while(i=n)product *= i;i+;)(2) i=0;do i+; while(i!=n) & (ai!=x);(3) switch case x438 时,n 50/7 log2 n1.14 解:(l)g(n)快(2)g(n)快(3)f(n)快(4) f(n)快1.1 15试用数学归纳法证明:(1) /2 = .( + *2 +1)/6 n 0) z=i(2) = (xrt+, -l)/(x-l) (x l,n 0)i=0(3)右2=2-1(/71)1=1(4)豆-1) = 2(nl)1.16 试写算法,自大至小依次输出顺序读入的三
5、个整数X, 丫和Z的值 解:int max3(int x, int y,int z)if(xy)if(xz) return x;else return z;elseif(yz) return y;else return z;解2:void print_descending(int x,int y,int z)按从大到小顺序输出三个数scanf(H%d,%d,%dn,&x,&y,&z);if(xy) xy; 0为表示交换的双目运算符,以下同if(yz) yz;if(xvy) xv-y; 冒泡排序printf(M%d %d %dM,x,y,z);/print_descending解3:(上机已实现
6、)要求实现下列函数:void Descend(int &x, int &y, int &z);/按从大到小顺序返回x, y和z的值/void 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.17 解:k0为阶数,n为数列的第n项 int Fibonacci(int k, int n)(if(kl) exit(OVERFLOW);int *p, x;p=new intk+1;if(!p) exit(OVE
7、RFLOW);int i, j;for(i=0;ik+1;i+) if(ik-l) pi=0;else pi=l;for(i=k+l;in+l;i+) x二p;for(j=0;jk;j+) pj=pj+l;pk=2*pk-l-x; return pk;解2:Status fib(int k,int m,int &f)求k阶斐波那契序列的第m项的值f int tempd;if(k2llm0) return ERROR;if(mk-l) f=0;else if (m=k-1) f=l;else(for(i=0;i=k-2;i+) tempi=0;tempk-l=l;初始化for(i=k;i=m;i
8、+)/求Hl序列第k至第m个元素的值(sum=0;for(j=i-k;ji;j+) sum+=tempj;tempi=sum;)f=tempm;)return OK;/fib分析:通过保存已经计算出来的结果,此方法的时间复杂度仅为O(m9).如果采用递归编程(大多数人都会首先想到递归方 法),则时间复杂度将高达O(kAm).解3:(上机已实现)要求实现下列函数:Status Fibonacci(int k, int m, int &f);/如果能求得k阶斐波那契序列的第m项的值f(则返回0K; */否则(比如,参数k和m不合理)返回ERROR*/Status Fibonacci(int k,
9、int m, int &f) /求k阶斐波那契序列的第m项的值f */(int temp200, i, j, sum;if(k2|m0) return ERROR;if(mk-l) f=0;else if(m=kT) f=l;else(for(i=0;i=k-2;i+) tempi=0;tempk-l=l;/初始化for(i=k; i=m; i+)/求出序列第k至第m个元素的值(sum=0;for(j=i-k;j=i-l;j+) sum+=tempj;tempi=sum;f=tempm;)return OK;1. 18 解:typedef enumA, B, C, D, E SchoolNam
10、e;typedef enumFemale, Male SexType;typedef struct (char event 3; 项目SexType sex;SchoolName school; int score; Component;typedef structint Mal eSum;男团总分int FemaleSum;女团总分int TotalSum;团体总分 Sum;Sum SumScore(SchoolName sn, Component a, int n) Sum temp;temp. MaleSum;temp. FernaleSum=0;temp. TotalSum=0; in
11、t i;for (i=0;in;i+) if(ai. school=sn) if(ai. sex=Male) temp. MaleSum+=ai. score;if(ai. sex=Female) temp. Fema1eSum+=ai. score; )temp. TotalSum=temp. MaleSum+temp. FemaleSum; return temp;)解二:typedef struct char *sport;enum male,female gender;char schoolname; 校名为或Echar *result; int score; resulttype;t
12、ypedef struct int malescore;int femalescore;int total score; scoretype;void summary(resulttype result)求各校的男女总分和团体总分,假设结果已经储存在result口数组中scoretype score;i=0;while(resulti.sport!=NULL)(switch(resulti.schoolname)(case A:score 0 .totalscore+=resu 11 i. score;if(resulti.gender=0) score 0 .malescore+=resul
13、ti.score;else score 0 .femalescore+=resulti.score;break;case ,B:score.totalscore+=resulti.score;if(resulti.gender=O) score.malescore+=resulti.score;else score.femalescore+=resulti.score;break;i+:1for(i=0;i5;i+)(printf(HSchool %d:nn,i);printf(Total score of male:%dnn,scorei.malescore);printf(MTotal s
14、core of female:%dn,scorei.femalescore);printf(Total score of all:%dnnu,scorei.totalscore);)/summary解3:(上机已实现)要求实现下列函数:void Scores(ResultType *result, ScoreType *score);/求各校的男、女总分和团体总分,并依次存入数组score */*假设比赛结果已经储存在result数组中,*/ 并以特殊记录 ,male,0 (域 scorce=0) */*表示结束*/相关数据类型定义如下:typedef enum female,male Sex
15、;typedef struct char *sport; 项目名称Sex gender; / 性别(女:female:男:male)char schoolname; / 校名为或Echar *result; /Z 成绩int score; / 得分(7,5,4,3,2 或 1) ResultType;typedef struct int malescore; /Z 男子总分int femalescore; /Z 女子总分inttotalscore; /Z男女团体总分 ScoreType;void Scores(ResuItType *result, ScoreType *score)/求各校的
16、男、女点分和团体总分,穽依次存入数组score */假设比赛结果已经储存在result数组中,*/ 并以特殊记录male,二,(域 scorce=0) */表示结束/(int i=0;while(resulti.sport !=NULL)(switch(resulti.schoolname)(case *A:score0.totalscore+=resulti.score;if(resulti.gender=O) scorefO.femalescore+=resulti.score;else score0.malescore+=resulti.score;break;case B:score
17、1 .totalscore+=resultli.score;if(resulti.gender=O) score 1 .femalescore+=resulti.score;else score 1 .malescore+=resulti.score;break;case C:score2.totalscore+=resulti.score;if(resulti.gender=O) score2.femalescore+=resulti.score;else score2.malescore+=resulti.score;break;case D:score 3 . totalscore+=r
18、e sultfi. score;if(resulti.gender=O) score3.femalescore+=resulti.score;else score3.malescore+=resulti.score; break;case E:score4.totalscore+=resulti.score;if(resulti.gender=O) score4.femalescore+=resulti.score;else score4J.malescore+=resulti.score; break; i+;)for(i=0;i5;i+)(printf(MSchool %d:nn,i);p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 严蔚敏 数据结构 语言版 史上最全 答案 一题可有多解
限制150内