C言語汎型データ構造テンプレート(C言語汎型チェーン(list)、汎型行列(queue)、汎型スタック(stack)、汎型配列(array)))

18570 ワード

前の時間はc言語の汎型構造とthis針の実現について話しましたが、今回はよく使われるデータ構造の一般テンプレートをいくつか書きました.
  • 国内でダウンロード:https://gitee.com/xunanmu/c_laguage.template.git
  • ギthubダウンロード:https://github.com/xunanmu/c_laguage.template.git
  • ファイルレベル
    注意:このソースはgccコンパイラにしか適用されません.注意:このソースはgccコンパイラにしか適用されません.注意:このソースはgccコンパイラにしか適用されません.
    -----templata.h
    ┆
    -----array.h
    ┆
    -----stack.h
    ┆
    -----queue.h
    ┆
    -----lsit.h
    
    すべてのテンプレートはマクロで実装されています.以下は関数を使ってドキュメントを紹介します.また、C言語の一般テンプレートC言語テンプレートとthisポインタarray.h stack.h queue.h list.h
    array汎型テンプレートの例
    #include 
    #include "array.h"
    ARRAY_TYPE_SET(char);
    
    typedef struct person Person;
    ARRAY_TYPE_SET(Person);
    struct person{
        char name[8];
        char sex[4];
        int  age;
    }person_3[]={
            {"  "," ",20},
            {"  "," ",35},
            {"  "," ",16},
            {"  "," ",22},
            {"  "," ",18},
    };
    
    
    int main() {
    
        /********array    ******************/
        array(char) test=new(array(char));
        for (char i = 'A'; i < 'H'; ++i) {
            test.push_back(i);
        }
        for (char i = 'A'; i < 'H'; ++i) {
            test.push_back(i);
        }
        void print_char(char c);
        test.traversal(print_char);
        test.sort().traversal(print_char).reverse().traversal(print_char);
    
        /*********array    ***************/
        array(Person) _static=new(array(Person));
        _static.setArray(person_3, 5, 5,false);
        void print_person(Person one);
        _static.sort().traversal(print_person).reverse().traversal(print_person);
    
        /***        ,     ***/
        int agecmp(const void* one,const void* two);
        _static.setcmp(agecmp);
        _static.sort().traversal(print_person).reverse().traversal(print_person);
    
        test.delete();
    
        return 0;
    }
    
    void print_char(char c) {
        printf("%c ", c);
    }
    
    void print_person(Person one) {
        printf("
    "
    , one.name, one.sex, one.age); } int agecmp(const void *one, const void *two) { return ((Person *) one)->age > ((Person *) two)->age; }
    実行結果
    A B C D E F G A B C D E F G
    A A B B C C D D E E F F G G
    G G F F E E D D C C B B A A
    <  , ,20>
    <  , ,22>
    <  , ,16>
    <  , ,35>
    <  , ,18>
    
    <  , ,18>
    <  , ,35>
    <  , ,16>
    <  , ,22>
    <  , ,20>
    
    <  , ,16>
    <  , ,18>
    <  , ,20>
    <  , ,22>
    <  , ,35>
    
    <  , ,35>
    <  , ,22>
    <  , ,20>
    <  , ,18>
    <  , ,16>
    
    ここにはたくさんのプログラミング本があります.