- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)