C++算法之通用数据结构的代码

2019-01-23  本文已影响0人  xintiantian

把开发过程经常用的代码记录起来,下面代码内容是关于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 div() { return (n!=0) ?m /n : -1;} 

}; 

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

typedef struct _QUEUE 

    int start; 

    int end; 

    int length; 

    int count; 

}QUEUE; 

那么QUEUE的创建函数、打印函数有什么区别吗?

    if(0 == length) 

        return NULL; 

    assert(NULL != pQueue); 

    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; 

有了函数指针之后,整个数据结构显得有点复杂。但是我们没有办法,这是设计通用数据结构必须花的一个代价。那么有了这个数据结构之后,如何才能实现对整个队列的数据打印呢?朋友们可以自己写一下,再看看我写的是否正确。

    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)通用数据结构有很多好处,写的越熟,用得越好。

上一篇下一篇

猜你喜欢

热点阅读