新手线性表 LocateElem中 compare 定义?
#include<stdio.h>#include<stdlib.h>
#define LIST_INIT_SIZE 30
#define LISTINCREMENT 10
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
Status InitList(SqList *pL){
(*pL).elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!(*pL).elem) return OVERFLOW;
(*pL).length=0;
(*pL).listsize=0;
return OK;
}
int ListLength(SqList *pL){
return pL->length;
}
void GetElem(SqList *pL,int i,ElemType *e)
{
if((i>=1)&&(i<=(*pL).length))
*e=(*pL).elem[i-1];
}
Status ListInsert(SqList *pL,int i,ElemType e)
{
int *p,*q,*newbase;
if(i<1||(i>(*pL).length+1))
return ERROR;
if((*pL).length>=(*pL).listsize)
{ newbase=(int *)realloc((*pL).elem,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(ElemType));
if(!(newbase)) return OVERFLOW;
(*pL).elem=newbase;
(*pL).listsize+=LISTINCREMENT;
}
p=&((*pL).elem[i-1]);
q=(*pL).elem+(*pL).length-1;
for(q;q>=p;--q)
*(q+1)=*q;
*p=e;
++(*pL).length;
return OK;
}
int compare(ElemType * e1, ElemType * e2)
{//测试函数,返回要查找的元素
return (*e1 - *e2);
}
int LocateElem(SqList *pL,ElemType e,int (*compare)(ElemType *,ElemType *))
{
int i;
ElemType *p;
i=1;
p=(*pL).elem;
while (i<=(*pL).length&&(*compare )(p++ ,&e))
++i;
if(i<=(*pL).length)
return i;
else return 0;
}
初学数据结构,对红色部分写法不懂,蓝色部分上网找的 compare 定义,老师没讲 compare中 return (*e1 - *e2); 很不理解啊,这什么用,看了好久也看不懂。谁教教我 compare 简单的定义 有吗 大家帮帮哦