b分别为指向存储集合{2,4,5,7,9,12}和{2,4,5,7,9}的链表的头指针;
(2)简述算法f30的功能;
(3)写出算法f30的时间复杂度。
int f30(LinkList ha,LinkList hb)
{
//LinkList是带有头结点的单链表
//ha和hb分别为指向存储两个有序整数集合的链表的头指针
LinkList pa,pb;
pa=ha->next;
pb=hb->next;
while(pa && pb && pa->data==pb->data)
{ pa=pa->next;
pb=pb->next;
}
if(pa==NULL && pb==NULL) return 1;
else return 0;
}
(1)
(2)
(3)
31.已知稀疏矩阵采用带行表的三元组表表示,其形式说明如下:
#define MaxRow 100 //稀疏矩阵的最大行数
typedef struct {
int i,j,v; //行号、列号、元素值
}TriTupleNode;
typedef struct{
TriTupleNode data[MaxSize];
int RowTab[MaxRow+1]; //行表
int m,n,t; //矩阵的行数、列数和非零元个数
}RTriTupleTable;
下列算法f31的功能是,以行优先的顺序输入稀疏矩阵的非零元(行号、列号、元素值),建立稀疏矩阵的带行表的三元组表存储结构。请在空缺处填入合适内容,使其成为一个完整的算法。(注:矩阵的行、列下标均从1起计)
void f31(RTriTupleTable *R)
{ int i,k;
scanf(″%d %d %d″,&R->m,&R->n,&R->t);
R->RowTab[1]=0;
k=1; //k指示当前输入的非零元的行号
for(i=0; ① ;i++)
{ scanf(″%d %d %d″, ② , ③ ,&R->data[i].v);
while(k<R->data[i].i)
{ ④ ;
R->RowTab[k]=i;
}
}
}
①
②
③
④
32.已知二叉树的存储结构为二叉链表