写出排序过程。
(1)
(2)
四、算法阅读题(本大题共4小题,每小题5分,共20分)
30. 阅读下列算法,并回答问题:
(1)设顺序表L=(3,7,11,14,20,51),写出执行f30(&L,15)之后的L;
(2)设顺序表L=(4,7,10,14,20,51),写出执行f30(&L,10)之后的L;
(3)简述算法的功能。
void f30(SeqList*L, DataType x)
{
int i =0, j;
while (i<L->length && x>L->data[i])i++;
if(i<L->length && x==L->data[i]) {
for(j=i+1;j<L->length;j++)
L->data[j-1]=L->data[j];
L->length--;
} else {
for(j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=x;
L->length++;
}
}
(1)
(2)
(3)
31. 已知图的邻接表表示的形式说明如下:
#define MaxNum 50 //图的最大顶点数
typedef struct node {
int adjvex; //邻接点域
struct node *next; //链指针域
} EdgeNode; //边表结点结构描述
typedef struct {
char vertex; //顶点域
EdgeNode *firstedge; //边表头指针
} VertexNode; //顶点表结点结构描述
typedef struct {
VertexNode adjlist[MaxNum]; //邻接表
int n, e; //图中当前的顶点数和边数
} ALGraph; //邻接表结构描述
下列算法输出图G的深度优先生成树(或森林)的边。阅读算法,并在空缺处填入合适的内容,使其成为一个完整的算法。
typedef enum {FALSE, TRUE} Boolean;
Boolean visited[MaxNum];
void DFSForest(ALGraph *G){
int i;
for(i=0;i<G->n;i++) visited[i]= (1) ;
for(i=0;i<G->n;i++) if (!visited[i]) DFSTree(G,i);
}
void DFSTree(ALGraph *G, int i) {
EdgeNode *p;
visited[i]=TRUE;
p=G->adjlist[i]. firstedge;
while(p!=NULL){
if(!visited[p->adjvex]){
printf(″<%c,%c>″,G->adjlist[i]. vertex,
G->adjlist[p->adjvex]. vertex);
&nb