双向链表(C++实现)

数据结构中,链表是重要的组成部分,尤其是对于C++程序员。双向链表允许在列表的任一侧进行插入和删除操作。本文分享了一段完整的C++实现的双向链表代码,建议初学者投入时间深入理解和掌握,包括指针操作和链表结构。这段代码来源于VC5的DirectX SDK示例。
摘要由CSDN通过智能技术生成

数据结构是学习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 &#
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值