欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    十套数据结构试题答案(共25页).docx

    • 资源ID:15111100       资源大小:70.93KB        全文页数:25页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    十套数据结构试题答案(共25页).docx

    精选优质文档-倾情为你奉上数据结构试卷(一)参考答案一、 选择题(每题2分,共20分)1.A 2.D 3.D 4.C 5.C 6.D 7.D 8.C 9.D 10.A二、填空题(每空1分,共26分)1. 正确性 易读性 强壮性 高效率2. O(n)3. 9 3 34. -1 3 4 X * + 2 Y * 3 / -5. 2n n-1 n+16. e 2e7. 有向无回路8. n(n-1)/2 n(n-1)9. (12,40) ( ) (74) (23,55,63)10. 增加111. O(log2n) O(nlog2n)12. 归并三、计算题(每题6分,共24分)1. 线性表为:(78,50,40,60,34,90)2. 邻接矩阵: 邻接表如图11所示:图113. 用克鲁斯卡尔算法得到的最小生成树为: (1,2)3, (4,6)4, (1,3)5, (1,4)8, (2,5)10, (4,7)204. 见图124444422255285283452843图12四、 读算法(每题7分,共14分)1. (1)查询链表的尾结点(2)将第一个结点链接到链表的尾部,作为新的尾结点 (3)返回的线性表为(a2,a3,an,a1) 2. 递归地后序遍历链式存储的二叉树。五、 法填空(每空2分,共8 分)true BST->left BST->right 六、 编写算法(8分)int CountX(LNode* HL,ElemType x) int i=0; LNode* p=HL;/i为计数器 while(p!=NULL) if (P->data=x) i+; p=p->next; /while, 出循环时i中的值即为x结点个数 return i; /CountX数据结构试卷(二)参考答案一、选择题1.D2.B3.C4.A5.A6.C7.B8.C二、填空题1. 构造一个好的HASH函数,确定解决冲突的方法2. stack.top+,stack.sstack.top=x3. 有序4. O(n2),O(nlog2n)5. N0-1,2N0+N16. d/27. (31,38,54,56,75,80,55,63)8. (1,3,4,5,2),(1,3,2,4,5)三、应用题1. (22,40,45,48,80,78),(40,45,48,80,22,78)2. q->llink=p; q->rlink=p->rlink; p->rlink->llink=q; p->rlink=q;3. 2,ASL=91*1+2*2+3*4+4*2)=25/94. 树的链式存储结构略,二叉树略5. E=(1,3),(1,2),(3,5),(5,6),(6,4)6. 略四、算法设计题1. 设有一组初始记录关键字序列(K1,K2,Kn),要求设计一个算法能够在O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。void quickpass(int r, int s, int t) int i=s, j=t, x=rs; while(i<j)while (i<j && rj>x) j=j-1; if (i<j) ri=rj;i=i+1; while (i<j && ri<x) i=i+1; if (i<j) rj=ri;j=j-1; ri=x;2. 设有两个集合A和集合B,要求设计生成集合C=AB的算法,其中集合A、B和C用链式存储结构表示。typedef struct node int data; struct node *next;lklist;void intersection(lklist *ha,lklist *hb,lklist *&hc)lklist *p,*q,*t;for(p=ha,hc=0;p!=0;p=p->next) for(q=hb;q!=0;q=q->next) if (q->data=p->data) break;if(q!=0) t=(lklist *)malloc(sizeof(lklist); t->data=p->data;t->next=hc; hc=t;数据结构试卷(三)参考答案一、选择题1.B2.B3.A4.A5.A6.B7.D8.C9.B10.D第3小题分析:首先用指针变量q指向结点A的后继结点B,然后将结点B的值复制到结点A中,最后删除结点B。第9小题分析:9快速排序、归并排序和插入排序必须等到整个排序结束后才能够求出最小的10个数,而堆排序只需要在初始堆的基础上再进行10次筛选即可,每次筛选的时间复杂度为O(log2n)。二、填空题1. 顺序存储结构、链式存储结构2. 9,5013. 54. 出度,入度5. 06. e=d7. 中序8. 79. O(1)10. i/2,2i+111. (5,16,71,23,72,94,73)12. (1,4,3,2)13. j+1,hashtablej.key=k14. return(t),t=t->rchild第8小题分析:二分查找的过程可以用一棵二叉树来描述,该二叉树称为二叉判定树。在有序表上进行二分查找时的查找长度不超过二叉判定树的高度1+log2n。三、计算题1 2、H(36)=36 mod 7=1; H(22)=(1+1) mod 7=2; .冲突H(15)=15 mod 7=1;.冲突 H2(22)=(2+1) mod 7=3; H(15)=(1+1) mod 7=2;H(40)=40 mod 7=5;H(63)=63 mod 7=0;H(22)=22 mod 7=1; .冲突(1) 0 1 2 3 4 5 66336152240(2)ASL=3、(8,9,4,3,6,1),10,(12,18,18) (1,6,4,3),8,(9),10,12,(18,18) 1,(3,4,6),8,9,10,12,18,(18) 1,3,(4,6),8,9,10,12,18,18 1,3, 4,6,8,9,10,12,18,18四、算法设计题1. 设计在单链表中删除值相同的多余结点的算法。typedef int datatype;typedef struct node datatype data; struct node *next;lklist;void delredundant(lklist *&head) lklist *p,*q,*s; for(p=head;p!=0;p=p->next) for(q=p->next,s=q;q!=0; ) if (q->data=p->data) s->next=q->next; free(q);q=s->next; else s=q,q=q->next; 2. 设计一个求结点x在二叉树中的双亲结点算法。typedef struct node datatype data; struct node *lchild,*rchild; bitree;bitree *q20; int r=0,f=0,flag=0;void preorder(bitree *bt, char x) if (bt!=0 && flag=0)if (bt->data=x) flag=1; return;else r=(r+1)% 20; qr=bt; preorder(bt->lchild,x); preorder(bt->rchild,x); void parent(bitree *bt,char x) int i; preorder(bt,x); for(i=f+1; i<=r; i+) if (qi->lchild->data=x | qi->rchild->data) break; if (flag=0) printf("not found xn"); else if (i<=r) printf("%c",bt->data); else printf("not parent");数据结构试卷(四)参考答案一、选择题1C2D3D4B5C6A7B8A9C10A二、填空题1. O(n2),O(nlog2n)2. p>llink->rlink=p->rlink; p->rlink->llink=p->rlink3. 34. 2k-15. n/26. 50,517. m-1,(R-F+M)%M8. n+1-i,n-i9. (19,18,16,20,30,22)10. (16,18,19,20,32,22)11. Aij=112. 等于13. BDCA14. hashtablei=0,hashtablek=s三、计算题12 (1) ABCDEF; BDEFCA;(2) ABCDEFGHIJK; BDEFCAIJKHG林转换为相应的二叉树;3H(4)=H(5)=0,H(3)=H(6)=H(9)=2,H(8)=3,H(2)=H(7)=6四、算法设计题1. 设单链表中有仅三类字符的数据元素(大写字母、数字和其它字符),要求利用原单链表中结点空间设计出三个单链表的算法,使每个单链表只包含同类字符。typedef char datatype;typedef struct node datatype data; struct node *next;lklist;void split(lklist *head,lklist *&ha,lklist *&hb,lklist *&hc) lklist *p; ha=0,hb=0,hc=0; for(p=head;p!=0;p=head) head=p->next; p->next=0; if (p->data>='A' && p->data<='Z') p->next=ha; ha=p; else if (p->data>='0' && p->data<='9') p->next=hb; hb=p; else p->next=hc; hc=p; 2. 设计在链式存储结构上交换二叉树中所有结点左右子树的算法。typedef struct node int data; struct node *lchild,*rchild; bitree;void swapbitree(bitree *bt) bitree *p; if(bt=0) return;swapbitree(bt->lchild); swapbitree(bt->rchild);p=bt->lchild; bt->lchild=bt->rchild; bt->rchild=p;3. 在链式存储结构上建立一棵二叉排序树。#define n 10typedef struct nodeint key; struct node *lchild,*rchild;bitree;void bstinsert(bitree *&bt,int key) if (bt=0)bt=(bitree *)malloc(sizeof(bitree); bt->key=key;bt->lchild=bt->rchild=0; else if (bt->key>key) bstinsert(bt->lchild,key); else bstinsert(bt->rchild,key);void createbsttree(bitree *&bt) int i; for(i=1;i<=n;i+) bstinsert(bt,random(100);数据结构试卷(五)参考答案一、选择题1A2B3A4A5D6B7B8B9C10C二、填空题1. top1+1=top22. 可以随机访问到任一个顶点的简单链表3. i(i+1)/2+j-14. FILO,FIFO5. ABDECF,DBEAFC,DEBFCA6. 8,647. 出度,入度8. ki<=k2i && ki<=k2i+19. n-i,rj+1=rj10. mid=(low+high)/2,rmid.key>k三、应用题1. DEBCA2. E=(1,5),(5,2),(5,3),(3,4),W=103. ASL=(1*1+2*2+3*4)/7=17/74. ASL1=7/6,ASL2=4/3四、算法设计题1. 设计判断两个二叉树是否相同的算法。typedef struct node datatype data; struct node *lchild,*rchild; bitree;int judgebitree(bitree *bt1,bitree *bt2) if (bt1=0 && bt2=0) return(1); else if (bt1=0 | bt2=0 |bt1->data!=bt2->data) return(0); else return(judgebitree(bt1->lchild,bt2->lchild)*judgebitree(bt1->rchild,bt2->rchild);2. 设计两个有序单链表的合并排序算法。void mergelklist(lklist *ha,lklist *hb,lklist *&hc) lklist *s=hc=0; while(ha!=0 && hb!=0) if(ha->data<hb->data)if(s=0) hc=s=ha; else s->next=ha; s=ha;ha=ha->next; else if(s=0) hc=s=hb; else s->next=hb; s=hb;hb=hb->next; if(ha=0) s->next=hb; else s->next=ha;数据结构试卷(六)参考答案一、选择题1D2A3A4A5D6D7B8A9C10B11C12A13B14D15B二、判断题1错2对3对4对5错6错7对8错9对10对三、填空题1. O(n)2. s->next=p->next; p->next=s3. (1,3,2,4,5)4. n-15. 1296. F=R7. p->lchild=0&&p->rchild=08. O(n2)9. O(nlog2n), O(n)10. 开放定址法,链地址法四、算法设计题1. 设计在顺序有序表中实现二分查找的算法。struct record int key; int others;int bisearch(struct record r , int k) int low=0,mid,high=n-1; while(low<=high) mid=(low+high)/2; if(rmid.key=k) return(mid+1); else if(rmid.key>k) high=mid-1; else low=mid+1; return(0);2. 设计判断二叉树是否为二叉排序树的算法。int minnum=-32768,flag=1;typedef struct nodeint key; struct node *lchild,*rchild;bitree;void inorder(bitree *bt) if (bt!=0) inorder(bt->lchild); if(minnum>bt->key)flag=0; minnum=bt->key;inorder(bt->rchild);3. 在链式存储结构上设计直接插入排序算法void straightinsertsort(lklist *&head) lklist *s,*p,*q; int t; if (head=0 | head->next=0) return; else for(q=head,p=head->next;p!=0;p=q->next) for(s=head;s!=q->next;s=s->next) if (s->data>p->data) break; if(s=q->next)q=p;elseq->next=p->next; p->next=s->next; s->next=p; t=p->data;p->data=s->data;s->data=t; 数据结构试卷(七)参考答案一、选择题1B2B3C4B5B6A7C8C9B10D二、判断题1对2对3对4对5对6对7对8错9错10错三、填空题1. s->left=p,p->right2. n(n-1),n(n-1)/23. n/24. 开放定址法,链地址法5. 146. 2h-1,2h-17. (12,24,35,27,18,26)8. (12,18,24,27,35,26)9. 510. i<j && ri.key<x.key,ri=x四、算法设计题1. 设计在链式结构上实现简单选择排序算法。void simpleselectsorlklist(lklist *&head) lklist *p,*q,*s; int min,t; if(head=0 |head->next=0) return; for(q=head; q!=0;q=q->next) min=q->data; s=q; for(p=q->next; p!=0;p=p->next) if(min>p->data)min=p->data; s=p; if(s!=q)t=s->data; s->data=q->data; q->data=t; 2. 设计在顺序存储结构上实现求子串算法。void substring(char s , long start, long count, char t ) long i,j,length=strlen(s); if (start<1 | start>length) printf("The copy position is wrong"); else if (start+count-1>length) printf("Too characters to be copied");else for(i=start-1,j=0; i<start+count-1;i+,j+) tj=si; tj= '0'3. 设计求结点在二叉排序树中层次的算法。int lev=0;typedef struct nodeint key; struct node *lchild,*rchild;bitree;void level(bitree *bt,int x) if (bt!=0)lev+; if (bt->key=x) return; else if (bt->key>x) level(bt->lchild,x); else level(bt->rchild,x);数据结构试卷(八)参考答案一、选择题1C2C3C4B5B6C7B8C9A10A二、判断题1对2错3对4错5错6对7对8对9对10对三、填空题1. (49,13,27,50,76,38,65,97)2. t=(bitree *)malloc(sizeof(bitree),bstinsert(t->rchild,k)3. p->next=s4. head->rlink,p->llink5. CABD6. 1,167. 08. (13,27,38,50,76,49,65,97)9. n-110. 50四、算法设计题1. 设计一个在链式存储结构上统计二叉树中结点个数的算法。void countnode(bitree *bt,int &count) if(bt!=0) count+; countnode(bt->lchild,count); countnode(bt->rchild,count);2. 设计一个算法将无向图的邻接矩阵转为对应邻接表的算法。typedef struct int vertexm; int edgemm;gadjmatrix;typedef struct node1int info;int adjvertex; struct node1 *nextarc;glinklistnode;typedef struct node2int vertexinfo;glinklistnode *firstarc;glinkheadnode;void adjmatrixtoadjlist(gadjmatrix g1 ,glinkheadnode g2 )int i,j; glinklistnode *p;for(i=0;i<=n-1;i+) g2i.firstarc=0;for(i=0;i<=n-1;i+) for(j=0;j<=n-1;j+)if (g1.edgeij=1)p=(glinklistnode *)malloc(sizeof(glinklistnode);p->adjvertex=j;p->nextarc=gi.firstarc; gi.firstarc=p;p=(glinklistnode *)malloc(sizeof(glinklistnode);p->adjvertex=i;p->nextarc=gj.firstarc; gj.firstarc=p;数据结构试卷(九)参考答案一、选择题1A2A3A4C5D6D7C8B9C10A11C12C13D14A15A二、填空题1. p->next,s->data2. 503. m-14. 6,85. 快速,堆6. 19/77. CBDA8. 69. (24,65,33,80,70,56,48)10. 8三、判断题1错2对3对4对5错6错7对8对9错10对四、算法设计题1 设计计算二叉树中所有结点值之和的算法。void sum(bitree *bt,int &s) if(bt!=0) s=s+bt->data; sum(bt->lchild,s); sum(bt->rchild,s);2 设计将所有奇数移到所有偶数之前的算法。void quickpass(int r, int s, int t) int i=s,j=t,x=rs; while(i<j) while (i<j && rj%2=0) j=j-1; if (i<j) ri=rj;i=i+1; while (i<j && ri%2=1) i=i+1; if (i<j) rj=ri;j=j-1; ri=x;3 设计判断单链表中元素是否是递增的算法。int isriselk(lklist *head)if(head=0|head->next=0) return(1);elsefor(q=head,p=head->next; p!=0; q=p,p=p->next)if(q->data>p->data) return(0);return(1);数据结构试卷(十)参考答案一、选择题1A2D3B4B5B6D7A8D9D10C11B12D二、填空题1. 4,102. O(nlog2n),O(n2)3. n4. 1,25. n(m-1)+16. q->next7. 线性结构,树型结构,图型结构8. O(n2), O(n+e)9. 8/310. (38,13,27,10,65,76,97)11. (10,13,27,76,65,97,38)12.13. struct node *rchild,bt=0,createbitree(bt->lchild)14. lklist,q=p三、算法设计题1. 设计在链式存储结构上合并排序的算法。void mergelklist(lklist *ha,lklist *hb,lklist *&hc) lklist *s=hc=0; while(ha!=0 && hb!=0) if(ha->data<hb->data)if(s=0) hc=s=ha; else s->next=ha; s=ha;ha=ha->next; else if(s=0) hc=s=hb; else s->next=hb; s=hb;hb=hb->next; if(ha=0) s->next=hb; else s->next=ha;2. 设计在二叉排序树上查找结点X的算法。bitree *bstsearch1(bitree *t, int key) bitree *p=t; while(p!=0) if (p->key=key) return(p);else if (p->key>key)p=p->lchild; else p=p->rchild; return(0);3. 设关键字序列(k1,k2,kn-1)是堆,设计算法将关键字序列(k1,k2,kn-1,x)调整为堆。void adjustheap(int r ,int n) int j=n,i=j/2,temp=rj-1; while (i>=1) if (temp>=ri-1)break; elserj-1=ri-1; j=i; i=i/2; rj-1=temp;专心-专注-专业

    注意事项

    本文(十套数据结构试题答案(共25页).docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开