background image

此问题更好的解决方案之一是虚拟链表。虚拟链表是只包含链表指针的链表。对象存储在
链表结构背后。这一点是这样实现的,首先为链表节点分配内存,接着为对象分配内存,
然后将这块内存分配给链表节点指针,如下所示:

虚拟链表结构的一种实现

typedef struct liststruct

{

liststruct *next;

} LIST, *pLIST;

pLIST Head = NULL;

pLIST AddToList( pLIST Head, void * data, size_t datasize )

{

pLIST newlist=NULL;

void *p;

// 分配节点内存和数据内存

newlist = (pLIST) malloc( datasize + sizeof( LIST ) );

// 为这块数据缓冲区指定一个指针

p = (void *)( newlist + 1 );

// 复制数据

memcpy( p, data, datasize );

// 将这个节点指定给链表的表头

if( Head )

{

newlist->next = Head;