双向链表的定义
typedef int DataPyte;
typedef struct DNode
{
struct DNode* _next;
struct DNode* _pPre;
DataPyte data;
} DNode, * pDNode, DList, * pDList;
创建一个新结点
pDNode BuyNode ( DataPyte d)
{
pDNode pdnode = ( pDNode) malloc ( sizeof ( DNode) ) ;
if ( NULL == pdnode)
{
assert ( 0 ) ;
}
pdnode-> data = d;
pdnode-> _next = NULL ;
pdnode-> _pPre = NULL ;
return pdnode;
}
初始化
void DListInit ( pDList* ppdlist)
{
assert ( ppdlist) ;
pDNode pdnode = BuyNode ( 0 ) ;
pdnode-> _next = pdnode;
pdnode-> _pPre = pdnode;
* ppdlist = pdnode;
}
尾部插入
void DListPushBack ( pDList pdlist, DataPyte d)
{
assert ( pdlist) ;
pDNode pdnode = BuyNode ( d) ;
pDNode cur = pdlist;
while ( pdlist != cur-> _next)
{
cur = cur-> _next;
}
pdnode-> _pPre = cur;
pdnode-> _next = cur-> _next;
cur-> _next-> _pPre = pdnode;
cur-> _next = pdnode;
}
尾部删除
void DListPopBack ( pDList pdlist)
{
assert ( pdlist) ;
if ( pdlist-> _next == pdlist)
{
return ;
}
pDNode cur = pdlist;
while ( pdlist != cur-> _next)
{
cur = cur-> _next;
}
cur-> _next-> _pPre = cur-> _pPre;
cur-> _pPre-> _next = cur-> _next;
free ( cur) ;
cur = NULL ;
}
任意位置插入
void DListInsert ( pDList pdlist, DataPyte d, DataPyte find)
{
assert ( pdlist) ;
pDNode pdnode = BuyNode ( d) ;
pDNode cur = pdlist;
while ( find != cur-> data)
{
cur = cur-> _next;
}
pdnode-> _pPre = cur-> _pPre;
pdnode-> _next = cur;
cur-> _pPre-> _next = pdnode;
cur-> _pPre = pdnode;
}
任意位置删除
void DListDelete ( pDList pdlist, DataPyte d)
{
assert ( pdlist) ;
pDNode cur = pdlist;
while ( d != cur-> data)
{
cur = cur-> _next;
}
cur-> _next-> _pPre = cur-> _pPre;
cur-> _pPre-> _next = cur-> _next;
free ( cur) ;
cur = NULL ;
}
销毁
void DListDestroy ( pDList* ppdlist)
{
assert ( ppdlist) ;
pDNode cur = ( * ppdlist) -> _next;
while ( ( * ppdlist) != cur)
{
pDNode del = cur;
cur = cur-> _next;
free ( del) ;
del = NULL ;
}
cur = NULL ;
free ( * ppdlist) ;
* ppdlist = NULL ;
}