数据结构是学习C/C++,继指针后的最大难关之一。这一关的核心是链表。链表是使用最广泛的数据结构,可以说它是你学习计算机进入中级水平的敲门砖!
本文提供完整的双向链表代码,虽然只有区区几页,确值得你把每一行都深刻在心中!希望初学者化一周时间(当然你得已经可以无困难的理解指针),把它滚瓜烂熟,达到能给别人讲的地步!此代码来自VC5带的SDK的DirectX的例子,在 VCSAMPLES\SDK\DIRECTX\INCLUDE和VCSAMPLES\SDK\DIRECTX\CGUTIL
//| File: linklist.h
#ifndef _LINKLIST_H
#define _LINKLIST_H
typedef struct _NODE
{
struct _NODE *pPrev;
struct _NODE *pNext;
void *pData;
} NODE, *LPNODE;
class CLinkedList {
private:
LPNODE Find(void *pData);
LPNODE pHead;
LPNODE pTail;
LPNODE pCurPosition;
public:
CLinkedList();
~CLinkedList();
void *GetFirst();
void *GetLast();
void *GetNext();
void *GetNext(void *pData);
void *GetPrev();
void *GetPrev(void *pData);
void Add(void *pData);
void Insert(void *pData);
void Insert(void *pData, void *pBefore);
void Append(void *pData);
void Remove();
void Remove(void *pData);
void *RemoveFirst();
void *RemoveLast();
};
#define LinkedList CLinkedList
#endif
//| File: linklist.cpp = a doubly linked list.
#include "linklist.h"
#define NULL 0L
CLinkedList::CLinkedList() // CLinkedList constructor
{
pHead = pTail = pCurPosition = NULL;
}
CLinkedList::~CLinkedList()// CLinkedList destructor - free each node
{
LPNODE pCur, pNext;
pCur &#