bsp; VertexNode adjlist[ MaxVertexNum ] ;
int n,e; //图的当前顶点数和弧数
}ALGraph; //邻接表类型
其中顶点表结点VertexNode
边表结点EdgeNode结构为:
阅读下列算法,并回答问题:
(1)已知某有向图存储在如图所示的邻接
表G中,写出执行f32(&G)的输出;
(2)简述算法f32的功能。
int visited[ MaxNum ];
void DFS(ALGraph * G, int i) {
EdgeNode * p;
visited [ i ] = TRUE ;
if (G - > adjlist[ i]. firstedge = = NULL)
printf( "% c ", G - > adjlist[ i]. vertex);
else {
p = G - > adjlist[ i]. firstedge;
while (p ! = NULL) {
if ( ! visited[p -> adjvex] )
DFS( G, p - > adjvex) ;
p = p->next;
}
}
}
void f32 ( ALGraph * G) {
int i;
for (i = 0; i < G->n; i ++)
visited [ i ] = FALSE ;
for (i = 0; i < G->n; i++)
if ( ! visited[i] ) DFS(G, i) ;
}
(1)
(2)
33.下列算法f33的功能是对记录序列进行双向冒泡排序。算法的基本思想为,先从前往后通过交换将关键字最大的记录移动至后端,然后从后往前通过交换将关键字最小的记录移动至前端,如此反复进行,直至整个序列按关键字递增有序为止。请在空缺处填入合适的内容,使其成为完整的算法。
#define MAXLEN 100
typedef int KeyType;
typedef struct {
KeyType key;
InfoType otherinfo;
} NodeType ;
typedef NodeType SqList[ MAXLEN ];
void f33 ( SqList R, int n)
{ int i,j,k;
NodeType t;
i =0;
j =n-l;
while (i < j) {
for ( (1) )
if (R[k].key > R[k +l].key) {
t = R[k];
R[k] = R[k +1];
R[k +1] = t;
}
j--;
for (k =j; k > i; k -- )
if ( (2) ) {
t = R[k];
R[k] = R[k-1];
R[k-1] = t;
}
(3) ;
}
}
(1)
(2)
(3)
五、算法设计题(本大题10分)
34.假设以带头结点的单链表表示线性表,单链表的类型定义如下:
typedef int DataType;
typedef struct node {
DataType data;
struct node * next;
} LinkNode, * LinkList;
编写算法,删除线性表中最大元素(假设最大值唯一存在)。函数原型为:
void f34(LinkList head) ;