我的ADT dlist有一个不必要的参数,但它清除了代码 - 我应该保留它吗?

时间:2017-08-17 16:45:07

标签: c parameters linked-list arguments

我的ADT dlist有一个函数可以将一些数据插入到dlist中,并带有三个参数:dlist,数据以及之后插入数据的dlist元素。然而dlist参数在这种情况下是多余的,但我必须说它让我更清楚,因为我看到我插入了哪个dlist。尽管是多余的,保留它是否有意义?

typedef struct dlist_element{
    void* p_data;
    struct dlist_element* p_next;
}dlist_element;

typedef struct dlist{
    struct dlist_element* p_head;
    freeFunction p_freeDataFunction;
}dlist;

完整.c源文件

dlist* dlist_create(void){
    dlist* p_dlist = calloc(1, sizeof(dlist));
    p_dlist->p_head = calloc(1, sizeof(dlist_element));
    p_dlist->p_freeDataFunction = NULL;
    return p_dlist;
}

void dlist_setDataFreeFunction(dlist* p_dlist, freeFunction p_freeDataFunction){
    p_dlist->p_freeDataFunction = p_freeDataFunction;
}

void dlist_insert(dlist* p_dlist, void* p_data, dlist_element* p_preceding){
    dlist_element* p_new = malloc(sizeof(dlist_element));
    p_new->p_data = p_data;
    p_new->p_next = p_preceding->p_next;
    p_preceding->p_next = p_new;
}

void* dlist_inspect(dlist_element* p_element){
    return p_element->p_next->p_data;
}

void* dlist_remove(dlist_element* p_element){
    void* p_data = p_element->p_next->p_data;
    dlist_element* p_remove = p_element->p_next;
    p_element->p_next = p_remove->p_next;
    free(p_remove);
    return p_data;
}

bool dlist_isEmpty(dlist* p_dlist){
    return p_dlist->p_head->p_next == NULL;
}

dlist_element* dlist_first(dlist* p_dlist){
    return p_dlist->p_head;
}

dlist_element* dlist_next(dlist_element* p_element){
    return p_element->p_next;
}

bool dlist_isEnd(dlist_element* p_element){
    return p_element->p_next == NULL;
}

void dlist_free(dlist* p_dlist){
    dlist_element* p_remove = p_dlist->p_head->p_next;
    dlist_element* p_removeNext = NULL;
    while (p_remove != NULL){
        p_removeNext = p_remove->p_next;
        if (p_dlist->p_freeDataFunction != NULL){
            p_dlist->p_freeDataFunction(p_remove->p_data);
        }
        free(p_remove);
        p_remove = p_removeNext;
    }
    free(p_dlist->p_head);
    free(p_dlist);
}

0 个答案:

没有答案