typedef int ELEM_TYPE;
typedef struct Node
{
ELEM_TYPE mdata;
struct Node* pnext;
struct Node* prev;
}DNode,*PDList;void Init(PDList pl);
DNode* BuyNode(ELEM_TYPE val);
Status InsertHead(PDList pl, ELEM_TYPE val);
Status InsertTail(PDList pl, ELEM_TYPE val);
DNode* Search(PDList pl, ELEM_TYPE val);
Status DeleteKey(PDList pl, ELEM_TYPE val);
void Show(PDList pl);
void Clear(PDList pl);
void Destroyed(PDList pl);//双向链表的初始化:
void Init(PDList pl)
{
if (pl != NULL)
{
pl->pnext = NULL;
pl->prev = NULL;
}
}
//创建一个新的结点
DNode* BuyNode(ELEM_TYPE val)
{
DNode* pnewnode = (DNode*)malloc(sizeof(DNode));
if (pnewnode != NULL)
{
pnewnode->mdata = val;
pnewnode->pnext = NULL;
pnewnode->prev = NULL;
}
return pnewnode;
}
//头插
bool InsertHead(PDList pl, ELEM_TYPE val)
{
if (pl == NULL)
{
return false;
}
DNode* pnewnode = BuyNode(val);
if (pnewnode == NULL)
{
return false;
}
pnewnode->pnext = pl->pnext;
pnewnode->prev = pl;
if (pnewnode->pnext != NULL)
{
pnewnode->pnext->prev = pnewnode;
}
pl->pnext = pnewnode;
return true;
}
//尾插
bool InsertTail(PDList pl, ELEM_TYPE val)
{
if (pl == NULL)
{
return false;
}
DNode* pnewnode = BuyNode(val);
if (pnewnode == NULL)
{
return false;
}
DNode* pCur = pl;
while (pCur->pnext != NULL)
{
pCur = pCur->pnext;
}
pCur->pnext = pnewnode;
pnewnode->prev = pCur;
return true;
}
//查找元素
DNode* Search(PDList pl, ELEM_TYPE val)
{
if (pl != NULL)
{
DNode* pCur = pl->pnext;
while (pCur != NULL)
{
if (pCur->mdata == val)
{
return pCur;
}
pCur = pCur->pnext;
}
}
return NULL;
}
//删除元素
bool DeleteKey(PDList pl, ELEM_TYPE val)
{
if (pl == NULL)
{
return false;
}
DNode* pCur = Search(pl, val);
if (pCur == NULL)
{
return false;
}pCur->prev->pnext = pCur->pnext;
if (pCur->pnext != NULL)
{
pCur->pnext->prev = pCur->prev;
}
free(pCur);
return true;
}
//打印链表
void Show(PDList pl)
{
if (pl == NULL)
{
return;
}
DNode* pCur = pl->pnext;
while (pCur != NULL)
{
printf("%d ", pCur->mdata);
pCur = pCur->pnext;
}
printf("\n");
}
//清理链表
void Clear(PDList pl)
{
if (pl == NULL)
{
return;
}
DNode* pCur = pl->pnext;
DNode* pNext = pCur;
while (pCur != NULL)
{
pNext = pCur->pnext;
free(pCur);
pCur = pNext;
}
pl->pnext = NULL;
}
void Destroyed(PDList pl)
{
Clear(pl);
}
链表_双向链表
最新推荐文章于 2024-09-04 20:30:50 发布