求用c语言或者c++写出来的完整代码

有大佬能帮忙写出来的吗  用c写

因为最大月份和每月最大日期固定,所以可用二维数组,数组元素为链表头,hash冲突则将其头插到相同链表 

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>

#define MON_MAX  12
#define DAY_MAX  31

struct hash_elemt {
    struct hash_elemt *list;
    struct stu *stu;
} *buckets[MON_MAX+1][DAY_MAX+1];

struct stu {
        char *name;
};

static struct hash_elemt **hash(int mon, int day)
{
    assert(mon > 0 && mon <= MON_MAX);
    assert(day > 0 && day <= DAY_MAX);
    return &buckets[mon][day];
}

struct hash_elemt *hash_add(struct stu *stu, int mon, int day)
{
    struct hash_elemt **phead, *new;
    phead = hash(mon, day);
    new = malloc(sizeof(struct hash_elemt));
    new->stu = stu;
    new->list = (*phead);
    (*phead) = new;
    return new;
}

void print_stu(struct stu *stu)
{
        printf("stu : %s\n", stu->name);
}

void print_comm_stu(int mon, int day)
{
    struct hash_elemt **phead,*e;
    printf("mon(%d), day(%d): \n", mon, day);
    phead = hash(mon,day);
    for (e = *phead; e; e= e->list)
        print_stu(e->stu);
}

int main()
{
        struct stu s1, s2, s3, s4, s5;
        s1.name = "aa";
        s2.name = "bb";
        s3.name = "cc";
        s4.name = "dd";
        s5.name = "ee";

        hash_add(&s1, 1, 1);
        hash_add(&s2, 1, 1);
        hash_add(&s3, 1, 1);
        hash_add(&s4, 2, 1);
        hash_add(&s5, 2, 1);

        print_comm_stu(1, 1);
        print_comm_stu(2, 1);

        return 0;
}