数据结构实用教程第二版答案_徐孝凯修订版剖析.docx
文本预览下载声明
第一章绪习 题 一1.有下列几种用二元组表示的数据结构,试画出它们分别对应的图形表示(当出现多个关系时,对每个关系画出相应的结构图),并指出它们分别属于何种结构。⑴ A=(K,R)其中K={a1,a2,a3...,an}R={}⑵ B=(K,R)其中K={a,b,c,d,e,f,g,h}R={r}r={a,b,b,c,c,d,d,e,e,f,f,g,g,h}⑶ C=(K,R)其中K={a,b,c,d,f,g,h}R={r}r={d,b,d,g,b,a,b,c,g,e,g,h,e,f}⑷ D=(K,R)其中K={1,2,3,4,5,6}R={r}r={(1,2),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6)}⑸ E=(K,R)其中K={48,25,64,57,82,36,75,43}R={r1,r2,r3}r1={48,25,25,64,64,57,57,82,82,36,36,75,75,43}r2={48,25,48,64,64,57,64,82,25,36,82,75,36,43}r3={25,36,36,43,43,48,48,57,57,64,64,75,75,82}解:⑴是集合结构;⑵是线性结构;⑶⑷是树型结构;⑸散列结构。只作为参考。2.设计二次多项式ax2+bx+c的一种抽象数据类型,假定起名为QIAdratic,该类型的数据部分分为三个系数项a、b和c,操作部分为:(请写出下面每一个操作的具体实现)。⑴ 初始化数据成员ab和c(假定用记录类型Quadratie定义成员),每个数据成员的默认值为0。Quadratic InitQuadratic(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;}⑵ 做两个多项式加法,即使对应的系数相加,并返回相加的结果。Quadratic Add(Quadratic q1,Quadratic q2);解: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.c;return q;}⑶ 根据给定x的值计算多项式的值。float Eval(Quadratic q,float x);解:float Eval(Quadratic q,float x){return(q.a*x*x+q.b*x+q.c);}⑷ 计算方程ax2+bx+c=0的两个实数根,对于有实根、无实根和不是实根方程(即a==0)这三种情况要返回不同的整数值,以便于工作调用函数做不同的处理。int Root(Quadratic q,float r1,float r2);解:int Root(Quadratic q,float r1,float r2){if(q.a==0)return -1;float x=q.b*q.b-4*q.a*q.c;if(x=0){r1=(float)(-q.b+sqrt(x))/(2*q.a);r2=(float)(-q.b-sqrt(x))/(2*q.a);return 1;}elsereturn 0;}⑸ 按照ax**2+bx+c的格式(x2用x**2表示)输出二次多项式,在输出时要注意去掉系数为0的项,并且当b和c的值为负时,其前不能出现加号。void Print(Quadratic q)解:void Print(Quadratic q){if(q.a) coutq.ax**2;if(q.b)if(q.b0)cout+q.bx;elsecoutq.bx;if(q.c)if(q.c0)cout+q.c;elsecoutq.c;coutend1;}3.用c++函数描述下列每一个算法,并分别求出它们的时间复杂度。⑴ 比较同一简单类型的两个数据x1和x2的大小,对于x1x2,x1=x2和x1x2这三种不同情况分别返回=和字符。假定简单类型用SimpleType表示,它可通过typedef语句定义为任一简单类型。解:char compare(SimpleType x1,SimpleType x2){if(x1x2) return;else if(x1==x2) return =;else return;}其时间复杂度为O(1)⑵ 将一个字符串中的所有字符按相反方的次序重新放置。解:void Reverse(char*p){int n=strlen(p);for(int i=0
显示全部