C语言泛型,可以仿照 C库函数 qsort 的方式
用户提供 一些回调函数。
数据结构不包含数据域,
数据域 由分配节点内存的时候,多分配一些空间提供
数据域的地址:
节点指针 是 p,则数据域地址为 p+1;
下面,是个简单的单链表实现
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
类型定义
typedef struct LNode{struct LNode *next;
}*PLNode,*List;
/// 裸节点大小
enum{NodeOnlySize =(sizeof(struct LNode))};
#define NodeSize(elmSize) (NodeOnlySize + elmSize) 节点大小,跟元素大小相关
#define GetElem(type,p) (*(type*)(void *)(p + 1)) 取节点元素
回调函数定义
1)复制函数,用于复制元素数据。
2)释放函数,用于释放元素内部数据。
typedef void* (*copy_elm)(void *elm,const void *data,size_t elmsize);
typedef void (*free_elm)(void *elm);产生无数据节点ÿ