網易公開課,一個通用查找函數,在VC2010下實現。
#include <malloc.h>
#include <string.h>
int intCmp(void * elem1,void * elem2);
int strCmp(void * elem1,void * elem2);
{
int key = 7;
int arr[] = {1,3,5,7,9,0};
/*int型查找*/
int ret= lsearch(&key,arr,6,sizeof(int),intCmp);
if(ret >= 0)
printf("found %d, offset is %d\n",key,ret);
else
printf("Fail\n");
char * sarr[] = {"C","Java","C++","Python"};
/*字符串查找*/
ret= lsearch(skey,sarr,4,sizeof(char *),strCmp);
if(ret >= 0)
printf("found %s, offset is %d\n",skey,ret);
else
printf("Fail\n");
}
**通用查找函數
**key:查找值
**arr:數組
**n:數組長度
**elemsize:每個元素長度
**cmpFun:比較函數
**返回值:
*/
int lsearch( void * key, void * base,int n,int elemsize,int (*cmpfun)(void *,void *))
{
for(int i=0;i<n;i++)
{
void * elemAddr = (char *)base + i*elemsize;
if(cmpfun(key,elemAddr)== 0)
return i;
return -1;
}
**int型比較
**返回:0-相等
*/
int intCmp(void * elem1,void * elem2)
{
int * ip1 = (int *)elem1;
int * ip2 = (int *)elem2;
return *ip1 - *ip2;
}
**字符串型比較
**返回:0-相等
*/
int strCmp(void * elem1,void * elem2)
{
char * sp1 = (char *)elem1;
char * sp2 = *(char **)elem2;
return strcmp(sp1,sp2);
}