收藏 分享(赏)

数据结构第二版 主编殷人昆课后答案.ppt

上传人:精品资料 文档编号:9721125 上传时间:2019-08-28 格式:PPT 页数:33 大小:119.50KB
下载 相关 举报
数据结构第二版 主编殷人昆课后答案.ppt_第1页
第1页 / 共33页
数据结构第二版 主编殷人昆课后答案.ppt_第2页
第2页 / 共33页
数据结构第二版 主编殷人昆课后答案.ppt_第3页
第3页 / 共33页
数据结构第二版 主编殷人昆课后答案.ppt_第4页
第4页 / 共33页
数据结构第二版 主编殷人昆课后答案.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、数据结构,第一单元课后参考答案,一、单选题 1. 一个数组元素ai与A *(a+i)的表示等价. A *(a+i) B a+ i C *a + i D &a+ i 2. 对于两个函数,若函数名相同,但只是_不同则不是重载函数. A 参数类型 B 参数个数 C 函数类型 3. 若需要利用形参直接访问实参,则应把形参变量说明为_参数 A 指针 B 引用 C 值,4. 下面程序段的时间复杂度为_. for ( int i = 0; i m; i+) for (int j = 0 ; j n ; j+ ) a i j = i * j ; A O(m2) B O(n2) C O(m*n) D O(m+n

2、) 5. 执行下面程序段时,执行S语句的次数为_.for ( int i = 1 ; i = n ; i+ )for ( int j = 1 ; j= i ; j+ )S ; A n2 B n2/2 C n(n+1) D n(n+1)/2,6. 下面算法的时间复杂度为B O(n).int f ( unsigned int n ) if ( n=0 | n=1 ) return 1 ;else return n*f ( n - 1 ) ; A O(1) B O(n) C O(n2) D O(n!)二、填空题 1. 数据的逻辑结构被分为集合结构、线性结构、树型结构和图形结构四种. 2. 数据的存储

3、结构被分为顺序、链接、索引和散列四种;,3. 在线性结构、树形结构和图形结构中,前驱和后继结点之间分别存在着1:1、1:N和M:N的联系. 4. 一种抽象数据类型包括数据定义和操作两个部分. 5. 当一个形参类型的长度较大时,应最好说明为引用,以节省参数值的传输时间和存储参数的空间. 6. 当需要用一个形参访问对应的实参时,则该形参应说明为引用. 7. 在函数中对引用形参的修改就是对相应实参的修改,对值或赋值形参的修改只局限在该函数的内部,不会反映到对应的实参上.,8. 当需要进行标准I/O操作时,则应在程序文件中包含iostream.h头文件,当需要进行文件I/O操作时,则应在程序文件中包含

4、fstream.h头文件. 9. 在包含有stdlib.h头文件的程序文件中,使用rand ( )%21能够产生出020之间的一个随机整数. 10. 一个记录r理论上占有的存储空间的大小等于所有域的长度之和,实际上占有的存储空间的大小即记录长度为sizeof (r). 11. 一个数组a所占有的存储空间的大小即数组长度为sizeof (a) ,下标为i的元素a i 的存储地址为 a+ i, 或者为a + i*sizeof (a i ).,12. 函数重载要求类型上,数量上或排列次序上有所不同. 13. 对于双目操作符,其重载函数带有两参数,其中至少有一个为用户自定义的类型. 14. 若对象ra

5、和rb中至少有一个是属于用户定义的类型,则执行ra=rb时,需要调用=重载函数,该函数的第一个参数应与ra的类型相同,第二个参数应与rb的类型相同. 15. 从一维数组an中顺序查找出一个最大值元素的时间复杂度为O(n),输出一个二维数组bmn中所有元素值的时间复杂度为O(m*n).,16. 在下面程序段中,s=s+p语句的执行次数为_n_,p*=j语句的执行次数为n(n+1)/2,该程序段的时间复杂度为O(n2).int i = 0, s = 0;while (+ i = n) int p = 1;for ( int j = 1; j = i; j+) p *= j ;s = s + p;

6、17. 一个算法的时间复杂度为(3n2+2nlog2n+4n-7)/(5n),其数量级表示为O(n).,18. 从一个数组a7中顺序查找元素时,假定查找第一个元素a0的概率为1/3,查找第二个元素a1的概率为1/4,查找其余元素的概率均相同,则在查找成功时同元素的平均比较次数为35/12 三、应用题 设计二次多项式ax2+bx+c的一种抽象数据类型,假定起名为Quadratic,该类型的数据部分为三个系数项a,b和c,操作部分为:请写出上面每一个操作的具体实现.,1) 初始化数据成员a,b和c(假定用记录类型Quadratic定义数据成员),每个数据成员的缺省值为0. Quadratic In

7、itQuadratic(float aa=0, float bb=0, float cc=0);Quadratic InitQuadratic( float aa, float bb, float cc ) Quadratic q ;q.a = aa ;q.b = bb ;q.c = cc ;return q ; ,2) 做两个多项式加法,即使对应的系数相加,返回相加结果. Quadratic Add ( Quadratic q1, Quadratic q2 ) Quadratic q ;q.a = q1.a + q2.a ;q.b = q1.b + q2.b ;q.c = q1.c + q2

8、.c ;return q ; 3) 根据给定x的值计算多项式的值. float Eval ( Quadratic q , float x ) return ( q.a * x * x + q.b*x + q.c ) ; ,4) 计算方程ax2+bx+c=0的两个实数根,对于有实根、无实根和不是二次方程(即a=0)这三种情况都要返回不同的整数值,以便调用函数能够做不同的处理. int Root ( Quadratic q, float ,5) 按照ax*2+bx+c的格式(x2用x*2表示)输出二次多项式,在输出时要注意去掉系数为0的项,并且当b和c的值为负时,其前不能出现加号. void Pr

9、int ( Quadratic q ) if ( q.a ) cout 0 ) cout 0 ) cout “+“ q.c ;else cout q.c ;cout endl ; ,2. 指出下列各算法的功能并求出其时间复杂度. 1) int Prime ( int n ) int i = 1 ; int x = ( int ) sqrt ( n ) ; while ( + i x ) return 1 ; else return 0 ; 判断n是否是一个素数, 若是则返回1, 否则返回0, 时间复杂度为,2) int sum1 ( int n ) int p = 1, s = 0 ;for

10、( int i = 1; i = n ; i+ ) p *= i ;s += p ;return s ; 计算: 时间复杂度为O(n),3) int sum2 ( int n ) int s = 0 ;for ( int i = 1; i = n ; i+ ) int p = 1;for ( int j = 1; j = i ; j+)p *= j ; 计算:s += p ; return s ;,4)int fun ( int n ) int i = 1, s = 1 ; while ( s = n的最小i值, 时间复杂度为O(sqrt (n),5) void UseFile (ifstre

11、am利用数组C中的每个元素对应统计inp所联系的整数文件中个位数值同为i的整数个数时间复杂度O(n),6) void mtable ( int n) for ( int i = 1; i= n; i+) for ( int j = i ; j = n; j+ )cout i “*“ j “=“setw ( 2 ) i * j “ “;cout endl ;打印出一个具有n行的乘法表, 第i行中有n-i+1个乘法项, 每个乘法项为i*j;时间复杂度为O(n2),7) void cmatrix ( int aMN, int d) /M和N为全局整型常量for ( int i = 0; i M; i

12、+)for ( int j = 0; j N; j+)a i j *= d ;数组a中每个元素均乘以d的值, 时间复杂度为O(n2),8) void matrimult (int aMN, int bNL, int cML) /M,N和L均为全局整型常量 int i , j , k; for ( i = 0; i M ; i+) for( j = 0 ; j L ; j+) c i j = 0 ; for ( i = 0 ; i M ; i+ ) for ( j = 0 ; j L ; j+ ) for ( k = 0; k N ; k+ ) c i j += a i k * bk j ; 矩

13、阵相乘, 即aMN*bMNcML 时间复杂度为O(M*N*L),一、在下面的每个程序段中,假定线性表La的类型为List,元素类型ElemType为int,并假定每个程序段是连续执行的,试写出每个程序段执行后所得到的线性表La.(1) InitList (La);int a = 48, 26, 57, 34, 62 ,79 ;for ( i = 0 ; i 6 ; i+ )InsertFront ( La , a i ) ;TraverseList ( La ) ; / (79,62,34,57,26,48)(2) InitList ( La ) ;for ( i = 0; i 6 ; i+)

14、Insert ( La , a i ) ;TraverseList ( La ) ; / (26,34,48,57,62,79),(3) Insert ( La , 56 ) ;DeleteFront ( La ) ;InsertRear ( La , DeleteFront ( La ) ) ;TraverseList ( La ) ;(48,56,57,62,79,34)(4) for ( i = 1; i = 3; i+ ) int x = GetElem ( La, i );if (x % 2 = 0 ) Delete ( La, x ) ;TraverseList (La);(56,

15、57,79,34),(5) ClearList ( La ) ;for ( i = 0 ; i 6 ; i+ )InsertRear ( La , a i );Delete ( La , a 5 ) ;Sort ( La ) ;Insert ( La , a5 / 2 ) ;TraverseList ( La ) ;(26,34,39,48,57,62),二、对于List类型的线性表,编写出下列每个算法. 1) 从线性表中删除具有最小值的元素并由函数返回,空出的位置由最后一个元素填补,若线性表为空则显示出错信息并退出运行; Elemtype DelMaxValue ( List ,(2) 从线

16、性表中删除第i个元素并由函数返回. int Delete ( List ,(3) 向线性表中第i个元素位置插入一个元素. void Insert (List ,(4) 从线性表中删除具有给定值x的所有元素. void delete2 (List ,4. 对于结点类型为LNode的单链表,编写出下列每个算法; (1) 将一个单链表按逆序链接,即若原单链表中存储元素的次序为a1, a2, .an ,则逆序链接后变为an, an-1 ,.a 1. void Contrary (LNode * ,(2)删除单链表中的第i个结点. void Delete1( LNode * ,if (q = = NUL

17、L) cerr“Index is outof range!“endl ; exit (1) ; if ( p = NULL ) HL = HLnext ; else pnext = qnext ; delete q ; ,(3) 从单链表中查找出所有元素的最大值,该值由函数返回,若单链表为空,则显示出错信息并停止运行. ElemType MaxValue ( LNode *HL) if ( HL = NULL) cerr “Linked list is empty!“ endl ; exit ( 1 ) ; ElemType max = HLdata ; LNode *p = HLnext ; while ( p != NULL) if ( max pdata) max = pdata ; p = pnext ; return max ; ,(4)统计出单链表中结点的值等于给定值x的结点数. int Count(LNode *HL, ElemType x ) int j = 0 ; while ( HL != NULL ) if ( HLdata = x ) j+ ; HL = HLnext ; return j ; ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报