您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 数据结构题集(C语言版)答案_严蔚敏编著
心有多大,舞台就有多大!有努力就会有回报!第1章绪论1.1简述下列术语:数据数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型解:数据是对客观事物的符号表示在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称数据元素是数据的基本单位在计算机程序中通常作为一个整体进行考虑和处理数据对象是性质相同的数据元素的集合是数据的一个子集数据结构是相互之间存在一种或多种特定关系的数据元素的集合存储结构是数据结构在计算机中的表示数据类型是一个值的集合和定义在这个值集上的一组操作的总称抽象数据类型是指一个数学模型以及定义在该模型上的一组操作是对一般数据类型的扩展1.2试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别解:抽象数据类型包含一般数据类型的概念但含义比一般数据类型更广、更抽象一般数据类型由具体语言系统内部定义直接提供给编程者定义用户数据因此称它们为预定义数据类型抽象数据类型通常由编程者定义包括定义它所使用的数据和在这些数据上所进行的操作在定义抽象数据类型中的数据部分和操作部分时要求只定义到数据的逻辑结构和操作说明不考虑数据的存储结构和操作的具体实现这样抽象层次更高更能为其他用户提供良好的使用接口1.3设有数据结构(DR)其中试按图论中图的画法惯例画出其逻辑结构图解:1.4试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)解:ADTComplex{数据对象:D={ri|ri为实数}数据关系:R={ri}基本操作:InitComplex(&Creim)操作结果:构造一个复数C其实部和虚部分别为re和imDestroyCmoplex(&C)操作结果:销毁复数CGet(Ck&e)操作结果:用e返回复数C的第k元的值Put(&Cke)操作结果:改变复数C的第k元的值为eIsAscending(C)操作结果:如果复数C的两个元素按升序排列则返回1否则返回0IsDescending(C)操作结果:如果复数C的两个元素按降序排列则返回1否则返回0Max(C&e)操作结果:用e返回复数C的两个元素中值较大的一个Min(C&e)操作结果:用e返回复数C的两个元素中值较小的一个}ADTComplexADTRationalNumber{数据对象:D={sm|sm为自然数且m不为0}数据关系:R={sm}基本操作:InitRationalNumber(&Rsm)操作结果:构造一个有理数R其分子和分母分别为s和mDestroyRationalNumber(&R)操作结果:销毁有理数RGet(Rk&e)操作结果:用e返回有理数R的第k元的值Put(&Rke)操作结果:改变有理数R的第k元的值为eIsAscending(R)操作结果:若有理数R的两个元素按升序排列则返回1否则返回0IsDescending(R)操作结果:若有理数R的两个元素按降序排列则返回1否则返回0Max(R&e)操作结果:用e返回有理数R的两个元素中值较大的一个Min(R&e)操作结果:用e返回有理数R的两个元素中值较小的一个}ADTRationalNumber1.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{casexy:z=y-x;break;casex=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(ij)j++;elsei++;}(7)x=n;y=0;//n是不小于1的常数while(x=(y+1)*(y+1)){@y++;}(8)x=91;y=100;while(y0){@if(x100){x-=10;y--;}elsex++;}解:(1)n-1(2)n-1(3)n-1(4)n+(n-1)+(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的函数形式表示)intTime(intn){count=0;x=2;while(xn/2){x*=2;count++;}returncount;}解:count=1.11已知有实现同一功能的两个算法其时间复杂度分别为和假设现实计算机可连续运算的时间为秒(100多天)又每秒可执行基本操作(根据这些操作来估算算法时间复杂度)次试问在此条件下这两个算法可解问题的规模(即n值的范围)各为多少?哪个算法更适宜?请说明理由解:n=40n=16则对于同样的循环次数n在这个规模下第二种算法所花费的代价要大得多故在这个规模下第一种算法更适宜1.12设有以下三个函数:请判断以下断言正确与否:(1)f(n)是O(g(n))(2)h(n)是O(f(n))(3)g(n)是O(h(n))(4)h(n)是O(n3.5)(5)h(n)是O(nlogn)解:(1)对(2)错(3)错(4)对(5)错1.13试设定若干n值比较两函数和的增长趋势并确定n在什么范围内函数的值大于的值解:的增长趋势快但在n较小的时候的值较大当n438时1.14判断下列各对函数和当时哪个函数增长更快?(1)(2)(3)(4)解:(1)g(n)快(2)g(n)快(3)f(n)快(4)f(n)快1.15试用数学归纳法证明:(1)(2)(3)(4)1.16试写一算法自大至小依次输出顺序读入的三个整数XY和Z的值解:intmax3(intxintyintz){if(xy)if(xz)returnx;elsereturnz;elseif(yz)returny;elsereturnz;}1.17已知k阶斐波那契序列的定义为...;试编写求k阶斐波那契序列的第m项值的函数算法k和m均以值调用的形式在函数参数表中出现解:k0为阶数n为数列的第n项intFibonacci(intkintn){if(k1)exit(OVERFLOW);int*px;p=newint[k+1];if(!p)exit(OVERFLOW);intij;for(i=0;ik+1;i++){if(ik-1)p[i]=0;elsep[i]=1;}for(i=k+1;in+1;i++){x=p[0];for(j=0;jk;j++)p[j]=p[j+1];p[k]=2*p[k-1]-x;}returnp[k];}1.18假设有ABCDE五个高等院校进行田径对抗赛各院校的单项成绩均已存入计算机并构成一张表表中每一行的形式为项目名称性别校名成绩得分编写算法处理上述表格以统计各院校的男、女总分和团体总分并输出解:typedefenum{ABCDE}SchoolName;typedefenum{FemaleMale}SexType;typedefstruct{charevent[3];//项目SexTypesex;SchoolNameschool;intscore;}Component;typedefstruct{intMaleSum;//男团总分intFemaleSum;//女团总分intTotalSum;//团体总分}Sum;SumSumScore(SchoolNamesnComponenta[]intn){Sumtemp;temp.MaleSum=0;temp.FemaleSum=0;temp.TotalSum=0;inti;for(i=0;in;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;returntemp;}1.19试编写算法计算的值并存入数组a[0..arrsize-1]的第i-1个分量中(i=12...n)假设计算机中允许的整数最大值为maxint则当narrsize或对某个使时应按出错处理注意选择你认为较好的出错处理方法解:#includeiostream.h#includestdlib.h#defineMAXINT65535#defineArrSize100intfun(inti);intmain(){intik;inta[ArrSize];coutEnterk:;cink;if(kArrSize-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);elsea[i]=2*i*a[i-1];}}for(i=0;i=k;i++){if(a[i]MAXINT)exit(0);elsecouta[i];}return0;}1.20试编写算法求一元多项式的值的值并确定算法中每一语句的执行次数和整个算法的时间复杂度注意选择你认为较好的输入和输出方法本题的输入为和输出为解:#includeiostream.h#includestdlib.h#defineN10doublepolynomail(inta[]intidoublexintn);intmain(){doublex;intni;inta[N];cout输入变量的值x:;cinx;cout输入多项式的阶次n:;cinn;if(nN-1)exit(0);cout输入多项式的系数a[0]--a[n]:;for(i=0;i=n;i++)cina[i];coutThepolynomailvalueispolynomail(anxn)endl;return0;}doublepolynomail(inta[]intidoublexintn){if(i0)returna[n-i]+polynomail(ai-1xn)*x;elseret
本文标题:数据结构题集(C语言版)答案_严蔚敏编著
链接地址:https://www.777doc.com/doc-2429706 .html