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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构答案打印版.docx

1、数据结构答案打印版1试卷参考答案1.填空题(1) N2 + 1 (2) 2N 1 (3) 2 (4) 队空条件:front = rear队满条件:(rear+1) % (m+1) = front 注:假设牺牲数组一个单元,只存放m个元素(6) 广度优先搜索 (8) 14 (9) 避免在插入和删除操作中将第一个结点看作是特殊结点,使程序编写简单。2.基本思想如下: (1) 存储结构:两个栈使用同一段内存空间,图示如下。栈1只做PUSH操作,对应队列的进队;栈2只做POP操作,对应队列出队操作。 (2) 队列定义: typedef structint dataM;int Top1;/栈1指针int

2、 Top2;/栈2指针SqQueue;队列初始化:SqQueue q;q.Top1= 1;q.Top2=0;(3) 进队操作: if(q.Top1=M-1)printf(“队满!”);else q.data+q.top1=e; (4) 出队操作: if (q.Top2=q.Top1+1) printf(“队空!”);else e=q.dataq. top2+;4.拓扑排序算法如下所示: void TopologicalSort(Graph g)/有向图g采用邻接表存储结构int indegreeMAX_VER;/定义各顶点入度数组indegreeint i,k,count;SqQueue q;

3、node *p;FindIndegree(indegree,g);/求出所有顶点的入度q=InitQueue();/建0入度顶点队列qfor(i=0;inext) -indegreep-no;/对k号顶点的每个邻接点的入度减1if(!indegreep-no)q=EnQueue(q,p-no);/若入度为0则进队列/for/whileif(countg.vexnum)/该有向图有回路printf(nThere is a circuit.);/ TopologicalSort对于有n个顶点,e条边的有向图的拓扑排序算法的时间复杂性为O(n+e)5.由于学号已经排好序,要求按学生成绩(总分)排名次

4、,若总分相同,则学号在前的,仍排在前面,即要求选择的排序算法具有稳定性,分析具有稳定性的排序算法有如下4种: 再从时间与空间去综合考虑,选择改进的冒泡排序好。算法如下:void bubble_sort(int a,int n)int t=0,done=0;int i,j;for(i=1;i=n-1&!done;i+)done=1;for(j=0;jaj+1)done=0; t=aj; aj=aj+1; aj+1=t; 6.归并排序算法如下: void Merge(int b,int a,int i,int m,int n) /将有序的bi.m和bm+1.n归并为有序的ai.nint j,k;f

5、or(j=m+1,k=i;(i=m)&(j=n);+k)cmp+;if(bibj)ak=bi+;change+;else ak=bj+;change+;while(i=m)ak+=bi+;change+;/将剩于的bi.m复制到awhile(j=n)ak+=bj+;change+;/将剩余的bj.n复制到a/ Mergevoid MSort(int a,int c,int s,int t)/将as.t归并排序为cs.tint m;int bMAX;if(s=t) cs=as;elsem=(s+t)/2;/将as.t平分为as.m和am+1.tMSort(a,b,s,m);/递归地将as.m归并

6、为有序的bs.mMSort(a,b,m+1,t);/递归地将am+1.t归并为有序的bm+1.tMerge(b,c,s,m,t);/将bs.m和bm+1.t归并到cs.t/ MSortvoid MergeSort(int a,int n)/对数组a做归并排序MSort(a,a,1,n);/ MergeSort7.解: 建立二叉排序树并计算平衡因子如下图: 2试卷参考答案1B2C3C4A5A6D7D8B二、填空题1O(log2N) 2(21,30,55,45,94,66,90,82) 3101 4635ab+c*ef*h-qr+/+3+6. done :=Falsej:=i DIV 2 i:=j

7、done:=TrueRi:=extra三、解答: IntRearrange(SeqList a; intn)i=0; j=n-1;t=a0;while(ij)while(i=0) j-; 若当前元素为大于等于零,指针前移if(ij)ai=aj;i+;将负数前移while(ij &ai0)i+; 当前元素为负数时指针后移if(ij) aj-=ai; 正数后移。ai=t;四解答:(1)邻接表(2)深度优先dfs广度优先bfs 五:二叉树层次遍历算法:void Levelorder(BTreeNode * BT)BTreeNode *qM;int front=0,rear=0;BTreeNode *

8、p;If(BT!=NULL) rear=(rear+1)%M;qrear=BT;while(front!=rear)front=(front+1)%M;p=qfront;coutdataleft!=NULL) rear=(rear+1)%M;qrear=p-left; if(p-right!=NULL) rear=(rear+1)%M;qrear=p-right; 六:求广义表深度算法:int Depth(GLNode *GL)if(GL=NULL) return 1;/空表深度为1if(GL-tag=false) return 0; /原子深度为0int max=0; while(GL!=N

9、ULL)if(GL-tag=True ) int dep=Depth(GL-sublist);if(depmax)max=dep;GL=GL-next;return max+1;/非空表深度为各元素的深度最大值加上13试卷参考答案一.填空题 1待排序的原始记录按关键字有序或“基本有序”排列O(n)218.4 318 4先序5第i列不为零的元素个数,第i行不为零的元素个数6AOE网中,从源点到汇点带权路径长度最长的路径。7P2 9100 10log(n-1) O(log n)二.根据要求解答下列问题.3. 中序线索二叉树为:4. 提供三种方法:(1)牺牲一个单元不用当(Q.front=Q.rea

10、r)时队列为空当((Q.rear+1) % MAXSIZE=Q.front)是为满(2)标志域法设置一个flag标志域,设(flag=0)时队列空,(flag=1)时队列满(3)计数法当(Q.length=MAXSIZE)时为满,当(Q.length=0)时为空 .当插入字母Y后,Y所形成的节点应为 X节点的右孩子,此时以Z为根的子树失去平衡,为满足平衡二叉树的要求,应进行LR型旋转,旋转后的结果为:三. 答:四.程序如下: #include #include int delduplicate(int a,int n)int i,j,k,count;i=0;while (in)j=i+1;co

11、unt=0;while (jn & aj=ai) j+;count+;if (count!=0)for(k=j;kn;k+)ak-count=ak;n=n-count;i+; return n;void main(void)int n;/元素个数int a100;/存放表中的元素int i;cout输入元素个数n;for (i=0;iai;coutaisetw(5);coutendl;n=delduplicate(a,n);cout现在元素的个数为n=nendl;for(i=0;in;i+)coutaisetw(5);coutlchild;if (p!=null) count+;while (

12、p-rchild!=null) count+;T-degree=count; if (T-lchild)DegreeOfTree(T-lchild);if (T-rchild)DegreeOfTree(T-rchild);retrun T;六.算法如下:#define MAX_VERTEX_NUM20Typedef struct ArcNodeInt adjvex;Struct ArcNode *nextarc;InfoType*info;ArcNode;Typedef struct VNodeVertexType data;ArcNode *firstarc;VNode,AdjListMAX

13、_VERTEX_NUM;Typedef structAdjListverticed;Intvexnum,arcnum;Intkind;ALGraph;Boolean visitedMAX;Status (*VisitFunc)(int v);Void BFSTraverse(ALGraph G,Status(* Visit)(int v)For(v=0;vG.vexnum;+v)visitedv=FALSE;InitQueue(Q); For(v=0;vlchild;p=p-rchild;二. 解答:3. 1)if(Q.rear+1)%maxqsize=Q.front)队列满 2) if(q.

14、rear=q.front) and (q.flag=1) 队列满5. 堆为:(12,38,25,50,76,66,49,98) 四. 解答:int partition(SqList &L,int low,int high)L.r0=L.rlow;Pivotkey=L.rlow.key;while(lowhigh)while(low=pivotkey) -high;L.rlow=L.rhigh;while(lowhigh&L.rlow.key=pivotkey) +low;L.rhigh=L.rlow;L.rlow=L.r0;Void qsort(sqlist &L,int low,int hi

15、gh)if(lowLChild);/* 求左子树的深度 */hr=computbal(bt-RChild);/* 求右子树的深度 */bt-bal=hl-hr;/*求出平衡因子*/max=hlhr?hl:hr;/* 得到左、右子树深度较大者*/return(max+1);/* 返回树的深度 */六.解答:Status topologicalsort(ALGraph G)findInDegree(G,indegree);initstack(s);for(i=0;inextarc)k=p-adjvex;if(!(-indegreek) push(s,k);if(countg.vexnum)retu

16、rn error;else return ok;七.解答:顺序栈类型定义:Typedef struct selemtype *base;selemtype *top;int stacksize;sqstack;循环队列的类型定义:Typedef structQelemtype *base;int front;int rear;squeue;二叉链表的类型定义Typedf struct BitNodeTElemType data;Struct BitNode *lchild,*rchild;BitNode,*BitTree;邻接表类型定义:#define MAX_VERTEX_NUM 20Typ

17、edef struct arcnodeint adjvex;struct arcnode *nextarc;infotype *info;arcnode;Typedef strcut vnodevertextype data;arcnode *firstarc;vnode,adjlistMAX_VERTEX_NUM;Typedef structAdjlist vertices;int vexnum,arcnum;int kind;algraph;5试卷参考答案一、填空题 1. 随机存取数据方便 2. 100 3. EDCBA 4. 插入 5. (rear-qulen+m+1)%(m+1)6.

18、m+n-1 7. P2 9. O(log10n) 10. 52二、 Prim算法:假设N=(V,E)是连通网,TE是N的最小生成树的边的集合。算法从U=u0(u0V),TE=开始,重复执行下述操作:在所有uU,vV-U的边(u, v) E 中找一条代价最小的边(u0, v0)并入集合TE,同时v0并入U,直到U=V为止。此时TE中有n-1条边,则T=(V,TE)为N的最小生成树。时间复杂度为O(n2),与边数无关,适合于求边稠密的网的最小生成树。 Kruskal算法从另一个途径求网的最小生成树。假设N=(V,E)是连通网,则令最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,),图中

19、每个顶点自成一个连通分量。在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将该边加入到T中,否则舍去此边而选择下一条代价最小的边。依此类推,直到T中所有顶点都在同一个连通分量上为止。时间复杂度为O(eloge),与边数有关,适合于求边稀疏的网的最小生成树。 三、 四快速排序不稳定。例如: 3 5 5 3 1 排序后结果:1 3 3 5 5五 /统计字符串s中t的个数 #include #include /子串定位 int FindSubString(char s,char t, int pos)int i=pos,j=0;int slen = strlen(s);int tlen = strlen(t);while(islen & jtlen)if(si=tj)i+;j+;elsei= i-j+1;j = 0;if(j=tlen)return i-j;else return -1;/主程序 void main()char *s =abcdbcdefgbcdabcd;char *t = bcd;int pos = 0;int cnt

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

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