返回顶部

收藏

C++算法之通用数据结构

更多
class calculate{  
    int m;  
    int n;  
public:  

    calculate():m(0),n(0) {}  
    calculate(int a, int b):m(a),n(b) {}  
    ~calculate() {}  

    int add() { return m+n; }  
    int sub() { return m-n; }  
    int mul() { return m *n;}  
    int div() { return (n!=0) ?m /n : -1;}  
};  

                                    那么我们可不可以仿造这个思路,在常用的数据结构里面添加一些函数指针呢?至于为什么要这些函数指针,主要是因为我们设计的数据结构是通用的数据类型,那么其中必然有一些譬如compare的函数需要具体数据类型的参与。现在,我们定义一个循环队列,
typedef struct _QUEUE  
{  
    int start;  
    int end;  
    int length;  
    int count;  
    void** head;  

    int (*compare)(void*, void*);  
    void (*print)(void*);  
    void* (*find)(void*, void*);  
}QUEUE;  

                                    那么QUEUE的创建函数、打印函数有什么区别吗?
QUEUE* create_new_queue(int length)  
{  
    QUEUE* pQueue;  
    if(0 == length)  
        return NULL;  

    pQueue = (QUEUE*)malloc(sizeof(QUEUE));  
    assert(NULL != pQueue);  

    pQueue->head = (void**)malloc(sizeof(void*)* length);  
    assert(NULL != pQueue->head);  

    pQueue->start = 0;  
    pQueue->end = 0;  
    pQueue->count = 0;  
    pQueue->length = length;  

    pQueue->compare = compare;  
    pQueue->find = find;  
    pQueue->print = print;  
    return pQueue;  
}  

                                    有了函数指针之后,整个数据结构显得有点复杂。但是我们没有办法,这是设计通用数据结构必须花的一个代价。那么有了这个数据结构之后,如何才能实现对整个队列的数据打印呢?朋友们可以自己写一下,再看看我写的是否正确。
void print_value_in_queue(QUEUE* pQueue)  
{  
    int index ;  
    int end;  
    if(NULL == pQueue || 0 == pQueue->count)  
        return;  

    end = pQueue->start;  
    if(end < pQueue->end)  
        end = pQueue->end + pQueue->length;  

    for(index = pQueue->start; index < end; index ++){  
        pQueue->print(pQueue->head[index % pQueue->length]);  
    }  

    return;  
}  

总结: (1)剩下还有compare、find两个子函数,朋友们可以想想怎么利用? (2)通用数据结构有很多好处,写的越熟,用得越好。

标签:数据结构,算法,C++

收藏

0人收藏

支持

0

反对

0

»更多 您可能感兴趣的代码
  1. 2014-10-13 21:29:38C++算法之通用数据结构 by 童学芬
  2. 2012-11-04 23:25:15二叉树遍历算法 by 千万不要郁闷
  3. 2013-05-12 10:06:05数据结构练习题 004 栈 逆波兰表达式的计算 by did0602
  4. 2014-07-01 12:28:09Hanoi塔问题 by Kevin.
  5. 2014-08-08 21:18:36大正数加法问题 by 童学芬
  6. 2014-08-13 10:02:03二分查找 by walker30
  7. 2014-08-20 10:30:14【人人必会】高精度加法计算 by 童学芬
  8. 2014-09-06 11:11:32C++算法之双向链表 by 灵剑子
  9. 2014-09-14 12:57:49超简略哈希表的实现 by qqmmcc
  10. 2014-10-22 13:04:13A星算法 by 灵剑子
  11. 2019-06-17 21:18:10PHP+jQuery.photoClip.js图片裁剪上传实例 by 素材火官网
相关聚客文章
  1. abyssss 发表 2014-05-20 03:23:39 数据结构 最小堆 数组实现
  2. 博主 发表 2015-07-19 10:07:18 常见排序算法之直接插入排序
  3. dianlujitao 发表 2014-10-17 13:42:33 POJ 3844 Divisible Subsequences
  4. 马天游 发表 2013-03-28 04:02:29 关于“事件驱动”设计的思考
  5. 易水寒 发表 2015-05-01 06:03:21 LeetCode Happy Number
  6. 博主 发表 2015-07-19 10:07:23 常见排序算法之简单选择排序
  7. Run 发表 2013-02-22 10:51:19 Skiplist and its Implementation
  8. 博主 发表 2016-01-02 10:01:00 数据结构浅析(二):算法
  9. fox64194167 发表 2018-05-27 00:12:22 python 搜索插入位置
  10. fox64194167 发表 2018-06-24 01:17:31 Leetcode 有效的括号字符串 python
  11. dianlujitao 发表 2014-10-17 13:45:25 POJ 3122 Pie
  12. 陆离 发表 2014-10-28 08:01:58 LeetCode OJ: Restore IP Addresses