sp; (2) ;
}
(3) ;
}
}
(1)
(2)
(3)
32. 阅读下列算法,并回答问题:
(1)假设数组L[8]={3,0,5,1,6,4,2,7},写出执行函数调用f32(L,8)后的L;
(2)写出上述函数调用过程中进行元素交换操作的总次数。
void f32(int R[],int n){
int i,t;
for (i=0;i<n-1;i++)
while (R[i]!=i){
t=R[R[i]];
R[R[i]]=R[i];
R[i]=t;
}
}
(1)
(2)
33. 已知带头结点的单链表中的关键字为整数,为提高查找效率,需将它改建为采用拉链法处理冲突的散列表。设散列表的长度为m,散列函数为Hash(key)=key%m。链表的结点结构为: 。请在空缺处填入适当内容,使其成为一个完整算法。
void f33 (LinkList L, LinkList H[], int m)
{//由带头结点的单链表L生成散列表H,散列表生成之后原链表不再存在
int i,j;
LinkList p,q;
for (i=0;i<m;i++)
H[i]= (1) ;
p=L->next;
while(p)
{
q=p->next;
j=p->key%m;
(2) ;
H[j]=p;
(3) ;
}
free(L);
}
(1)
(2)
(3)
五、算法设计题(本大题10分)
34. 假设以带双亲指针的二叉链表作为二叉树的存储结构,其结点结构的类型说明如下所示:
typedef char DataType;
typedef struct node {
DataType data;
struct node *lchild, *rchild; //左右孩子指针
struct node *parent; //指向双亲的指针
} BinTNode;
typedef BinTNode *BinTree;
若px为指向非空二叉树中某个结点的指针,可借助该结构求得px所指结点在二叉树的中序序列中的后继。
(1)就后继的不同情况,简要叙述实现求后继操作的方法;
(2)编写算法求px所指结点的中序序列后继,并在算法语句中加注注释。