您的位置:首页 > 其它

任意数据类型比较的设计方法

2010-08-03 01:47 274 查看
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

任意数据类型比较的设计方法

录入作者:SOFA120

录入时间:2010.8.3

本文源自周伟明著的《多任务下的数据结构与算法》,纯属笔记,只做学习使用,如有对作者产生影响,请提出删除
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

当外部调用者调用数据结构与算法提供接口时,如果接口要用到对数据的操作,则必须由调用者将数据操作方法告诉接口。在C语言中,一般都是通过回调函数来实现,我们可以把数据比较操作定义成如下回调函数。

/** 通用类型数据比较函数
@param void *pData1------------------------要比较的第一个参数
@ param void *pData2-----------------------要比较的第二个参数
@return  INT-------------------------------小于0表示pData1小于pData2;
等于0表示pData1等于pData2;
大于0表示pData1大于pData2;
*/
Typedef INT (*COMPAREFUNC)(void *pData1 , void *pData2);


比如在排列时,由于不知道数据类型,我们必须知道如何比较数据的大小。因此用户要定义一个比较函数。比较函数的原型与上面COMPAREFUNC函数指针的定义一样,调用排列函数时,将比较函数传给排列函数作为参数,这样,在排列函数里面就知道如何比较数据了。

设计一个简单的排列函数,排列的数据放在数组中,且数据类型可以是任意的。

void Sort( void **ppData  , int nLen , COMPAREFUNC Compare)
{
int i , j;
void *pTemp;
for(i = 0 ; i < nLen; i++)
{
for( j = i + 1; j < nLen; j++)
{
if( (*Compare)(ppData[i] , ppData[j]) > 0 )
{
pTemp = ppData[j];
ppData[j]  = ppData[i];
ppData[i]  = pTemp;
}
}
}
}


调用Sort()函数来排序一个字符串数组。

INT StrCmp(void *p1 , void *p2)
{
return strcmp((char *)p1 , (char *)p2);
}

void main()
{
#define MSG_COUNT 6
char *pszMsg[MSG_COUNT] = {“ah”,”bee”,”sea”,”degree”,”chineses”,”quit”};
Sort(pszMsg, sizeof(pszMsg),StrCmp);
for(int i = 0 ; i < MSG_COUNT ; i++)
{
printf(“%s/n”,pszMsg[i]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐