ImageVerifierCode 换一换
格式:DOCX , 页数:115 ,大小:50.62KB ,
资源ID:28298596      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28298596.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实用第二版答案徐孝凯课案.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实用第二版答案徐孝凯课案.docx

1、数据结构实用第二版答案徐孝凯课案 第一章绪习 题 一1.有下列几种用二元组表示的数据结构,试画出它们分别对应的图形表示(当出现多个关系时,对每个关系画出相应的结构图),并指出它们分别属于何种结构。 A=(K,R)其中K=a1,a2,a3.,anR= B=(K,R)其中K=a,b,c,d,e,f,g,hR=rr=, C=(K,R)其中K=a,b,c,d,f,g,hR=rr=, D=(K,R)其中K=1,2,3,4,5,6R=rr=(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,43R=

2、r1,r2,r3r1=,r2=,r3=,解:是集合结构;是线性结构;是树型结构;散列结构。只作为参考。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)Qua

3、dratic 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)retu

4、rn(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);re

5、turn 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.a0)cout+q.bx;elsecoutq.b0)cout+q.c;elsecoutq.c;coutx2,x1=x2和x1=和x2) return;else if(x1=x2) return =;else return;其时间复杂度为O(1) 将一个字符串中的所有字符按相反方的次序重新放置。解

6、:void Reverse(char*p)int n=strlen(p);for(int i=0;in/2;i+)char ch;ch=pipi=pn-i-1;pn-i-1=ch;其时间复杂度为O(n) 求一维double型数组an中的所有元素之乘积。解:double product(double a,int n)double p=1;for(int i=0;in;i+)p*=ai;return p;其时间复杂度为O(n) 计算ni=0xi/i+1的值。解:double Accumulate(double x,int n)double p=1,s=1;for(int i=1;i=n;i+)p*

7、=x;s+=p/(i+1);return s;其时间复杂度为O(n) 假定一维数组an中的每个元素值均在0,200区间内,分别统计出落在0,20),20,50),50,80),80,130),130,200等各区间的元素个数。解:int Count(int a,int n,int c5)/用数组c5保存统计结果int d5=20,50,80,130,201;/用来保存各统计区间的上限int i,j;for(i=0;i5;i+)ci=0;/给数组c5中的每个元素赋初值0for(i=0;in;i+)if(ai200)return 0;/返回数值0表示数组中数据有错,统计失败for(j=0;j5;j

8、+)/查找ai所在区间if(ai=n和N=n的条件,Lin和Col为引用/形参,它是对应实参的别名,其值由实参带回Lin=0;Col=0;for(int i=0;im;i+)for(int j=0;jaLinCol)Lin=i;Col=j;其时间复杂度为O(m*n)4.指出下列各算法的功能并求出其时间复杂度。 int prime(int n)int i=2;int x=(int)sqrt(n);while(ix)return 1;elsereturn 0;解:判断n是否是一个素数,若是则返回数值1,否则返回0。该算法的时间复杂度为O(n1/2)。 int sum1(int n)int p=1,

9、s=0;for(int i=1;i=n;i+)p*=i;s+=p;return s;解:计算i!(上标为n,下标为i=1)的值,其时间的复杂度为O(n)。 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;解:计算i!的值,时间复杂度为O(n2) int fun(int n)int i=1,s=1;while(sn)s+=+i;return i;解:求出满足不等式1+2+3.+in的最小i值, 其时间复杂度为O(n1/2)。 void UseFile(ifstream&

10、 inp,int c10)/假定inp所对应的文件中保存有n个整数for(int i=0;ix)i=x%10;ci+;解:利用数组c10中的每个元素ci对应统计出inp所联系的整数文件中个位值同为i的整数个数,时间复杂度为O(n) void mtable(int n)for(int i=1;i=n;i+)for(int j=i;j=n;j+)couti*j=setw(2)i*j;coutend1;解:打印出一个具有n行的乘法表,第i行(1in)中有n-i+1个乘法项,每个乘法项为i与j(ijn)的乘积,时间复杂度为O(n2)。 void cmatrix(int aMN,int d)/M和N为全

11、局整型常量for(int i=0;iM;i+)for(int j=0;jN;j+)aij*=d;解:使数组aMN中的每一个元素均详细以d的值,时间复杂度为O(M*N) void matrimult(int aMN,int bNL,int cML)/int i,j,k;for(i=0;iM;i+)for(j=0;jL;j+)cij=0;for(i=0;iM;i+)for(j=0;jL;j+)for(k=0;kN;k+)cij+=aik*bkj;解:矩阵相乘,即aMNbNLcML,时间复杂度为O(MNL)。5.题目略解:void InitSet(Set& s)for(int i=1;i=SETSI

12、ZE;i+)s.mi=0;解:void InitSet(Set& s,int a,int n)fot(int i=0;in;i+)s.mai=1;解:Set operator + (Set s1,Set s2)Set s;InitSet(s);for(int i=1;i=SETSIZE;i+)if(s1.mi=1)|s2.mi=1)s.mi=1;return s;解:Set operator*(Set s1,Set s2)Set s;InitSet(s);for(int i=1;i=SETSIZE;i+)if(s1.mi=1)&(s2.mi=1)s.mi=1;return s;解:Boolea

13、n operator(int elt,Set s)if(s.melt=1)return True;elsereturn False;解:void Inisert(Set& s,int n)s.mn=1;解:void Delete(Set& s,int n)s.mn=0;解:ostream& operator(ostream& ostr,Set& s)ostrfor(int i=1;i=SETSIZE;i+)if(s.mi=1)ostri,;ostrend1;return ostr;第二章 线性表 习题 二1.解:(79,62,34,57,26,48)解:(26,34,48,57,62,79)解

14、:(48,56,57,62,79,34)解:(56,57,79,34)解:(26,34,39,48,57,62)2.解:为了排版方便,假定采用以下输出格式表示单链接表的示意图;每个括号内的数据表示一个元素结点,其中第一个数据为元素值,第二个数据为后继结点的指针,第一个元素结点前的数值为表头指针。(7(79,6),(62,5),(34,4),(57,3),(26,2),(48,0)(3(26,5),(34,2),(48,4),(57,6),(62,7),(79,0)(2(48,8),(56,4),(57,6),(62,7),(79,5),(34,0)(8(56,4),(57,7),(79,5),

15、(34,0)3.对于List类型的线性表,编写出下列每个算法。 从线性表中删除具有最小值的元素并由函数返回,空出的位置由最后一个元素填补,若线性表为空则显示出错信息并退出运行。解: ElemType DMValue(List&L)/从线性表中删除具有最小值的元素并由函数返回,空出的位置/由最后一个元素填补,若线性表为空则显示出错信息并退出运行if(ListEmpty(L)cerrList is Empty!end1;exit(1);ElemType x;x=L.list0;int k=0;for(int i=1;iL.size;i+)ElemType y=L.listi;if(yx)x=y;k

16、=i;L.listk=L.listL.size-1;L.size-;return x; 从线性表中删除第i个元素并由函数返回。解:int Deletel(List& L,int i)/从线性表中删除第i个元素并由函数返回if(iL.size)cerrIndex is out range!end1;exit(1);ElemType x;x=L.listi-1;for(int j=i-1;jL.size-1;j+)L.listj=L.listj+1;L.size-;return x; 向线性表中第i个元素位置插入一个元素。解:void Inser1(List& L,int i,ElemType x

17、)/向线性表中第i个元素位置插入一个元素if(iL.size+1)cerrIndex is out range!end1;exit(1);if(L.size=MaxSize)cerrList overflow!i-1;j-)L.listj+1=L.listj;L.listi-1=x;L.size+; 从线性表中删除具有给定值x的所有元素。解:void Delete2(List& L,ElemType x)/从线性表中删除具有给定值x的所有元素int i=0;while(iL.size)if(L.listi=x)for(int j=i+1;jL.sizr;j+)L.listj-1=L.listj

18、;L.size-;elsei+; 从线性表中删除其值在给定值s和t之间(要求s小于t)的所有元素。解:void Delete3(List& L,ElemType s,ElemType t)/从线性表中删除其值在给定值s和t之间的所有元素int i=0;while(i=s)&(L.listi=t)for(int j=i+1;jL.size;j+)L.listj-i=L.listj;L.size-;elsei+; 从有序表中删除其值在给定值s和t之间(要求s小于t)的所有元素。解:void Delete4(List& L,ElemType s,ElemType t)/从有序表中删除其值在给定值s和

19、t之间的所有元素int i=0;while(iL.size)/从有序表L中查找出大于等于s的第一个元素if(L.listis)i+;else break;if(iL.size)While(i+jL.size)&(L.listi+j=t)j+;/求出s和t之间元素的个数for(int k=i+j;kMaxSize)cerrList overflow!end1;exit(1);int i=0,j=0,k=0;while(iL1.size)&(jL2.size)if(L1.listi=L2.listj) /将L1中的元素赋给LL.listk=L1.listi;i+;else /将L2中的元素赋给LL

20、.listk=L2.listj;j+;k+;while(iL1.size) /将L1中剩余的元素赋给LL.listk=L1.listi;i+;k+;while(jL2.size) /将L2中剩余的元素赋给LL.listk=L2.listj;j+;k+;L.size=k; 从线性表中删除所有其值重复的元素,使其所有元素的值均不同,如对于线性表(2,8,9,2,5,5,6,8,7,2),则执行此算法后变为(2,8,9,5,6,7)。解:void Delete5(List& L)/从线性表中删除所有其值重复的元素,使其所有元素的值均不同int i=0;while(iL.size)int j=i+1;

21、while(jL.size) /删除重复值为L.listi的所有元素if(L.listj=L.listi)for(int k=j+1;knext; /p指向下一个待逆序的结点/将q结点插入到已陈序单链表的表头q-next=HL;HL=q; 删除单链表中的第i个结点。解:void Delete1(LNode*&HL,int i)/删除单链表中的第i个结点if(i1|HL=NULL)cerrIndex is out range!next;j+;if(cp=NULL)cerrIndex is out range!next;elseap-next=cp-next;delete cp; 从单链表中查找出

22、所有元素的最大值,该值由函数返回,若单链表为空,则显示出错信息并停止运行。解:ElemType MaxValue(LNode*HL)/从单链表中查找出所有元素的最大值,该值由函数返回if(HL=NULL)cerrLinked list is empty!data;LNode*p=HL-next;while(p!=NULL)if(maxdata) max=p-data;p=p-next;return max; 统计出单链表中结点的值等于给定值x的结点数。解:int Count(LNode*HL,ElemType x)/统计出单链表中结点的值等于给定值x的结点数int n=0;while(HL!=NULL)if(HL-data=x) n+;HL=HL-next;return n; 根据一

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1