第二章中:
抽象数据类型线性表的定义(第19页):
其中有一个基本操作:GetElem( L, i, &e){……}其e采用的是引用型参数。
但是:
在第20页算法2.1中有GetElem( L, i, e);我想问的是为什么不是GetElem( L, i, &e)?
在算法2.2中也有类似的问题:GetElem( La, i, ai)为什么不是GetElem( La, i, &ai)?我在猜是不是此处的ai不用返回到函数外面,所以不把ai当做引用型参数?
算法2.2中还有ListInsert(Lc,++K,bj)不是ListInsert(&Lc,++K,bj),是不是因为最前面已经定义了viod MergeList(List La,List Lb,List &Lc),所以ListInsert(Lc,++K,bj)的Lc就省略&……是这样的吗?
void MergeList(List La, List Lb, List &Lc) {
// 本算法将非递减的有序表 La 和 Lb 归并为 Lc
InitList(Lc); // 构造空的线性表 Lc
i = j = 1; k = 0;
La_len = ListLength(La);
Lb_len = ListLength(Lb);
while ((i <= La_len) && (j <= Lb_len)) { // La 和 Lb 均不空 }
GetElem(La,i,ai); GetElem(Lb, j, bj);
if(ai<=bj) { ListInsert(Lc, ++K, ai); ++i; }
else{ListInsert(Lc, ++K, bj); ++j;}
while (i <= La_len) { // 当La不空时
GetElem(La, i++, ai);
ListInsert(Lc, ++k, ai);
} // 插入 La 表中剩余元素
while (j <= Lb_len) { // 当Lb不空时
GetElem(Lb, j++, bj);
ListInsert(Lc, ++k, bj);
} // 插入 Lb 表中剩余元素
} // merge_list
这个程序的
InitList(Lc); 不是InitList(&Lc);
GetElem(La,i,ai); 不是GetElem(La,i,&ai);
GetElem(Lb, j, bj);不是GetElem(Lb, j, &bj);
ListInsert(Lc, ++K, ai); 不是 ListInsert(&Lc, ++K, ai);
现在可以解释了原因了……呵呵