以下是我的 C 通用链接列表模块的原型,供我将来计划编写的任何程序使用。
#ifndef LINKED_LIST_H
#define LINKED_LIST_H
#include <stdio.h>
typedef struct NodeType {
void* value;
NodeType* next;
} Node;
typedef struct LinkedListType {
Node* head;
int (*compare)(void*, void*);
void (*free) (void*);
} LinkedList;
LinkedList* linkedList_init(LinkedList* list,
int (*compare) (void*, void*),
void (*freeData) (void*)); // Initializes the generic functions and head of the list
int linkedList_isInitialized(LinkedList* list); // Return 0 if is empty, otherwise return 1
int linkedList_add(LinkedList* list, void* data); // Add a node to the end
int linkedList_remove(LinkedList* list, int index); // Remove a node at index
int linkedList_insert(LinkedList* list, int index, void* data); // Insert a node at index
Node* linkedList_get(LinkedList* list, int index); // Return node if node is at index, otherwise return NULL
void linkedList_free(LinkedList* list); // Free all the elements in the list
#endif
我的实现只是定义了所有这些方法的行为。如果我将其编译成 DLL 并将其保存在我的个人 util 文件夹中,这是否是组织代码以使其可重用的有用方法?如果不是,我应该改变什么?
从头开始,即使结构的第一个声明也是无效的
typedef struct NodeType {
void* value;
NodeType* next;
} Node;
在结构声明中,名称
NodeType
未定义。相反,你应该写
typedef struct NodeType {
void* value;
struct NodeType* next;
} Node;
使用与标准 C 函数名称
free
一致的函数指针 free
的名称也是一个坏主意。