col=A.data[p].col; q=position[col];
B->data[q].row=A.data[p].col; B->data[q].col=A.data[p].row; B->data[q].e=A.data[p].e; Position[col]++; } }
}
算法(二)
FastTransposeTSMatrix(TSMartrix A, TSMatrix *B) {
int col,t,p,q;
int position[MAXSIZE];
B->len=A.len; B->n=A.m; B->m=A.n; if(B->len>0) {
for(col=1;col<=A.n;col++) position[col]=0; for(t=1;t<=A.len;t++)
position[A.data[t].col]++; /*计算每一列的非零元素的个数*/
/*从最后一列起求每一列中第一个非零元素在B.data[]中的位置,存放在position[col]中*/
for(col=A.n,t=A.len;col>0;col--) { t=t-position[col]; position[col]=t+1; }
for(p=1;p col=A.data[p].col; q=position[col]; B->data[q].row=A.data[p].col; B->data[q].col=A.data[p].row; B->data[q].e=A.data[p].e; Position[col]++; } } } 5.6画出下面广义表的两种存储结构图示: ((((a), b)), ((( ), d), (e, f))) 【解答】 a 第一种存储结构 第二种存储结构 5.7求下列广义表运算的结果: (6) HEAD[((a,b),(c,d))]; (a,b) (7) TAIL[((a,b),(c,d))]; ((c,d)) a (8) TAIL[HEAD[((a,b),(c,d))]]; (b) (9) HEAD[TAIL[HEAD[((a,b),(c,d))]]]; b (10) TAIL[HEAD[TAIL[((a,b),(c,d))]]]; (d) 第六章 实习题 习题 1.试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。 2.对题1所得各种形态的二叉树,分别写出前序、中序和后序遍历的序列。 3.已知一棵度为k的树中有n1个度为1的结点,n2个度为2的结点,……,nk个度为k的结点,则该树中有多少个叶子结点? [提示]:参考 P.116 性质3 a ∵ n=n0 + n1 + …… + nk B=n1 + 2n2 + 3n3 + …… + knk n= B + 1 ∴ n0 + n1 + …… + nk = n1 + 2n2 + 3n3 + …… + knk + 1 ∴ n0 = n2 + 2n3 + …… + (k-1)nk + 1 4.假设一棵二叉树的先序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK,请画出该二叉树。 [提示]:参考 P.148 6. 已知二叉树有50个叶子结点,则该二叉树的总结点数 至少应有多少个? [提示]: [方法1] (1)一个叶子结点,总结点数至多有多少个? 结论:可压缩一度结点。 (2)满二叉树或完全二叉树具有最少的一度结点 a