任意数据类型比较的设计方法
2010-08-03 01:47
274 查看
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
任意数据类型比较的设计方法
录入作者:SOFA120
录入时间:2010.8.3
本文源自周伟明著的《多任务下的数据结构与算法》,纯属笔记,只做学习使用,如有对作者产生影响,请提出删除
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
当外部调用者调用数据结构与算法提供接口时,如果接口要用到对数据的操作,则必须由调用者将数据操作方法告诉接口。在C语言中,一般都是通过回调函数来实现,我们可以把数据比较操作定义成如下回调函数。
比如在排列时,由于不知道数据类型,我们必须知道如何比较数据的大小。因此用户要定义一个比较函数。比较函数的原型与上面COMPAREFUNC函数指针的定义一样,调用排列函数时,将比较函数传给排列函数作为参数,这样,在排列函数里面就知道如何比较数据了。
设计一个简单的排列函数,排列的数据放在数组中,且数据类型可以是任意的。
调用Sort()函数来排序一个字符串数组。
任意数据类型比较的设计方法
录入作者: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]); } }
相关文章推荐
- 使用函数指针实现任意数据类型大小比较
- 【Flex】Actionscript判断数据类型的几种方法比较
- JavaScript允许对任意数据类型做比较
- Java 基础(二) 数据类型:类(class) 其定义方法及其设计方法
- JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法
- 主流数据库之间对SQL:2003标准的不同实现方法比较(第六部分 基础数据类型之BOOLEAN)
- 在C#中将任意数值类型数据与字节数组相互转换的一个方法
- 任意类型数据转换成json数据的方法
- JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法
- C语言“全能比较函数”新鲜出炉(第二版),任意数据类型
- 【原创】Flex判断数据类型的几种方法比较
- JAVA DATE类型数据比较判断大小方法
- 数据仓库数据库设计方法---关系模型和多维模型比较分析
- Integer类型数据比较大小问题:(Integer定义的是对象,养成使用equals方法的好习惯)
- Java中Date类型数据比较方法
- java方法重载实验:判断键盘输入的两个数据的类型后进行比较
- 写一个方法对任意引用数据类型数组进行排序(入门级慎看,很难!!!)
- 字符串相等的比较方法,字符串的基本数据类型和引用数据类型。
- C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,
- CSharp任何可比较的数据类型(大小比较泛型实现方法)封装