高手解答 c语言编写数据结构实例 下面的代码看不懂,高手解答

int LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))
{ /* 初始条件:顺序线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0) */
/* 操作结果:返回L中第1个与e满足关系compare()的数据元素的位序。 */
/* 若这样的数据元素不存在,则返回值为0。算法2.6 */
ElemType *p;
int i=1; /* i的初值为第1个元素的位序 */
p=L.elem; /* p的初值为第1个元素的存储位置 */
while(i<=L.length&&!compare(*p++,e))
++i;
if(i<=L.length)
return i;
else
return 0;
}
Status(*compare)(ElemType,ElemType))
这个看不懂?

while(i<=L.length&&!compare(*p++,e))
++i;
这个循环就是扫描数组找满足关系的元素的一个过程,循环条件不用解释了吧,一个是循环的边界判断条件,一个是已知的compare()函数,也就是循环的结束条件;
if(i<=L.length)
这个if语句的判断条件是i<=L.length,表示的是上边的循环式从中间跳出的,也就是找到找到了满足条件的元素,所以返回该元素的位序i,否则表示上面的循环已超出边界并且没有满足条件的元素,所以返回0;
Status(*compare)(ElemType,ElemType))是个函数指针;追问

compare函数代码怎么写

追答

这个要根据你代码的需要或者题目要的要求来写了,比如:compare(int a,int b)可以是比较a与b的大小,满足a>b反回1,否则返回0;也可以是a=b反回1,否则返回0;等等。。。需要怎么写就怎么写了!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-05
Status(*compare)(ElemType,ElemType))是个函数指针,可以指向类似下面这样的函数:
Status compare(ElemType l,ElemType r){
return l==r;
}
用于判断两个元素的大小关系等。本回答被网友采纳
第2个回答  2012-08-05
Status(*compare)(ElemType,ElemType)
这是函数指针类型的参数,通过这个参数传进来比较函数

委托一般都是通过函数参数传递,便于代码的维护与升级。
第3个回答  2012-08-10
int LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))
中compare是一个参数的名字,类型为函数指针。
相似回答