C-一個通用查找函數

網易公開課,一個通用查找函數,在VC2010下實現。

#include "stdafx.h"
#include <malloc.h>
#include <string.h>
int lsearch( void * key, void * base,int n,int elemsize,int (*cmpfun)(void *,void *));
int intCmp(void * elem1,void * elem2);
int strCmp(void * elem1,void * elem2);
int _tmain(int argc, _TCHAR* argv[])
{
 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 skey[] = "C++";
 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");
 return 0;
}
/*
**通用查找函數
**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);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章