单链表

#include “DList.h”
#include <malloc.h>
#include <assert.h>
#include <stdio.h>

void DListInit(PDLNode* pHead)
{
assert(pHead);
*pHead = (PDLNode)malloc(sizeof(DLNode));
if (NULL == *pHead)
{
assert(0);
return;
}

(*pHead)->_pNext = *pHead;
(*pHead)->_pPre = *pHead;

}

PDLNode BuyDListNode(DLDataType data)
{
PDLNode pNewNode = (PDLNode)malloc(sizeof(DLNode));
if (NULL == pNewNode)
{
assert(0);
return;
}

pNewNode->_pNext = NULL;
pNewNode->_pPre = NULL;

}

void DListPushBack(PDLNode pHead, DLDataType data)
{
PDLNode pNewNode = BuyDListNode(data);
pNewNode->_pNext = pHead;
pNewNode->_pPre = pHead->_pPre;
pHead->_pPre->_pNext = pNewNode;
pHead->_pPre = pNewNode;
}

void DListPopBack(PDLNode pHead)
{
assert(pHead);
if (pHead == pHead->_pNext)
return;

PDLNode pDelNode = pHead->_pPre;
pDelNode->_pPre->_pNext = pHead;
pHead->_pPre = pDelNode->_pPre;
free(pDelNode);

}

void DListPushFront(PDLNode pHead, DLDataType data)
{
PDLNode pNewNode = BuyDListNode(data);
pNewNode->_pNext = pHead->_pNext;
pNewNode->_pPre = pHead;
pHead->_pNext = pNewNode;
pNewNode->_pNext->_pPre = pNewNode;
}

void DListPopFront(PDLNode pHead)
{
assert(pHead);
if (pHead->_pNext == pHead)
return;

PDLNode pDelNode = pHead->_pNext;
pHead->_pNext = pDelNode->_pNext;
pDelNode->_pNext->_pPre = pHead;
free(pDelNode);

}

void DListInsert(PDLNode pos, DLDataType data)
{
if (NULL == pos)
return;

PDLNode pNewNode = BuyDListNode(data);
pNewNode->_pNext = pos;
pNewNode->_pPre = pos->_pPre;
pos->_pPre = pNewNode;
pNewNode->_pPre->_pNext = pNewNode;

}

void DListErase(PDLNode pos)
{
if (NULL == pos)
return;

pos->_pNext->_pPre = pos->_pPre;
pos->_pPre->_pNext = pos->_pNext;
free(pos);

}

void DListClear(PDLNode pHead)
{
PDLNode pCur = pHead->_pNext;

while (pCur != pHead)
{
	pHead->_pNext = pCur->_pNext;
	free(pCur);
	pCur = pHead->_pNext;
}

pHead->_pNext = pHead;
pHead->_pPre = pHead;

}
void DListDestroy(PDLNode* pHead)
{
DListClear(*pHead);
free(*pHead);
*pHead = NULL;
}

void TestDList()
{
PDLNode pHead = NULL;
DListInit(&pHead);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值