2012年西藏自治区数据库入门深入

1、题目中要求矩阵两行元素的平均值按递增顺序排序,由于每行元素个数相等,按平均值排 列与按每行元素之和排列是一个意思。所以应先求出各行元素之和,放入一维数组中,然后 选择一种排序方法,对该数组进行排序,注意在排序时若有元素移动,则与之相应的行中各 元素也必须做相应变动。 void Translation(float *matrix,int n) //本算法对 n×n 的矩阵 matrix,通过行变换,使其各行元素的平均值按递增排列。 {int i,j,k,l; float sum,min; //sum 暂存各行元素之和 float *p, *pi, *pk; for(i=0; i<n; i++) {sum=0.0; pk=matrix+i*n; //pk 指向矩阵各行第 1 个元素. for (j=0; j<n; j++){sum+=*(pk); pk++;} //求一行元素之和. *(p+i)=sum; //将一行元素之和存入一维数组. }//for i for(i=0; i<n-1; i++) //用选择法对数组 p 进行排序 {min=*(p+i); k=i; //初始设第 i 行元素之和最小. for(j=i+1;j<n;j++) if(p[j]<min) {k=j; min=p[j];} //记新的最小值及行号. if(i!=k) //若最小行不是当前行,要进行交换(行元素及行元素之和) {pk=matrix+n*k; //pk 指向第 k 行第 1 个元素. pi=matrix+n*i; //pi 指向第 i 行第 1 个元素. for(j=0;j<n;j++) //交换两行中对应元素. {sum=*(pk+j); *(pk+j)=*(pi+j); *(pi+j)=sum;} sum=p[i]; p[i]=p[k]; p[k]=sum; //交换一维数组中元素之和. }//if }//for i free(p); //释放 p 数组. }// Translation [算法分析] 算法中使用选择法排序,比较次数较多,但数据交换(移动)较少.若用其它排序方 法,虽可减少比较次数,但数据移动会增多.算法时间复杂度为 O(n2). 2、我们用 l 代表最长平台的长度,用 k 指示最长平台在数组 b 中的起始位置(下标) 。用 j 记住局部平台的起始位置, 用 i 指示扫描 b 数组的下标, i 从 0 开始, 依次和后续元素比较, 若局部平台长度(i-j)大于 l 时,则修改最长平台的长度 k(l=i-j)和其在 b 中的起始位 置(k=j) ,直到 b 数组结束,l 即为所求。 void Platform (int b[ ], int N) //求具有 N 个元素的整型数组 b 中最长平台的长度。 {l=1;k=0;j=0;i=0; while(i<n-1) {while(i<n-1 && b[i]==b[i+1]) i++; if(i-j+1>l) {l=i-j+1;k=j;} //局部最长平台 i++; j=i; } //新平台起点 printf(“最长平台长度%d,在 b 数组中起始下标为%d” ,l,k); }// Platform

3、请设计一个算法,要求该算法把二叉树的叶子结点按从左到右的顺序连成一个单链表,表 头指针为 head。 二叉树按二叉链表方式存储,链接时用叶子结点的右指针域来存放单链表 指针。分析你的算法的时、空复杂度。 4、设 T 是一棵满二叉树,编写一个将 T 的先序遍历序列转换为后序遍历序列的递归算法。


相关文档

2012西藏自治区数据库入门深入
2012年西藏自治区学习数据库深入
2012年西藏自治区数据库入门纲要
2014年西藏自治区数据库入门深入
2010年西藏自治区数据库入门深入
2015年西藏自治区数据库入门深入
2011年西藏自治区数据库入门深入
2012年西藏自治区数据库入门摘要
2013西藏自治区数据库入门深入
2013年西藏自治区数据库入门深入
电脑版