数据结构--例题探究.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
!!对给定关键字序号j(1jn),要求在无序记录A[1..n]中找到关键字从小到大排在第j位上的记录,写一个算法利用快速排序的划分思想实现上述查找。(要求用最少的时间和最少的空间) 例如:给定无序关键字{7,5,1,6,2,8,9,3},当j=4时,找到的关键字应是5。 int partition(RecType A[], int 1, int n) { int i=1,j=n;x=A[i].key; i=1; while(ij) { while(ij A[j].key=x) j--; if(ij) A[i++]=A[j]; while(ij A[i].key=x) i++; if(ij) A[j--]=A[i]; } return i; } void Find_j(RecType A[],int n,int j) n为数组长度 { i=partition (A,1,n); while(i!=j) if(ij) i=partition(A,i+1,n); ∥在后半部分继续进行划分 else i=partition(A,1,i-1); ∥在前半部分继续进行划分 } 因装填因子为0.7,有7个元素,故哈希表长m=7/0.7=10构造的哈希表如下: 散列地址 0 1 2 3 4 5 6 7 8 9 关键字 7 14 8 11 30 18 9 比较次数 1 2 1 1 1 3 3 答:ASL成功=1/7*(1*4+2*1+3*2)=12/7,失败=1/7*(3+2+1+2+1+5+4)=18/7 设图的顶点只是编号1――n,边的信息是有(用1表示)或无(用0表示),这时可用邻接矩阵表示图的存储结构。请编写算法建立无向图的邻接矩阵的存储结构 void creatgraph(int M[][],int n,int e) //设有n个顶点e条边 { int i,j; for (i=1;i=n;i++) for(j=1;j=n;j++) M[i][j]=0; for (i=1;i=e;i++) { cinij; M[i][j]=1; M[j][i]=1; } } 在根指针t所指二叉排序树中递归查找某关键字等于k的数据元素 BSTree SearchBST1(BSTree t,keyType k)? { if(!t||k==t-key) return(t); ? else if(kt-key) return(SearchBST1(t-lchild,k)); ? else return(SearchBST1(t-rchild,k));?? }? 写出快速排序中一趟划分的算法。 int partition(int R[],int s,int t) //s和t是数组的低下标和高下标 { int i=s,j=t,x=R[i].key; while(ij) { while(ij R[j].key=x) j--; R[i]=R[j]; while(ij R[i].key=x) i++; R[j]=R[i]; } r[i]=x; return i; } 要求完全利用循环队列中的元素空间,设置一个标志域tag,并以tag的值是0或1来区分尾指针和头指针相同时的队列状态是“空”还是“不空”请编写与此结构相对应的出队算法。相关类型定义如下: void?QueueOut(CycQueue cq); { if(cq.tag==0) cout队列为空\n; ??? else { cq.front=( cq.front+1) % m; ??????????????if(cq.front== cq.rear) cq.tag=0;? //空队列 } } !!设n是非负整数,下面程序片段的时间复杂度是(O(log2n)? )。 ?x=2; while(xn/2) x=2*x; 已知二叉树的二叉链表存储表示如下,试编写求二叉树深度的算法 int Height(BiTree bt) { int hl,hr; if(bt==null) return(0);????? //空二叉树深度为0 else { hl=Height(bt-lchild); ?//左子树的深度 hr=Height(bt-rchild);? //右子树的深度 if(hlhr) return(hl+1); //二叉树的深度

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档