初始化
将头节点的prior、next都指向NULL
PList InitList()
{
PList L = (PList)malloc(sizeof(LNode));
if (L == NULL)
return false;
L->next = NULL;
L->prior = NULL;
}
插入
前插法
LNode Insert()
{
LNode* p, * q;
if (p == NULL || q == NULL)//确保p,q均不为空
return false;
q->next = p->next;
if(p->next)//确保p所指的地址不为空,才能插入
p->next->prior = q;
p->next = q;
q->prior = p;
}
删除
注:q为p的下一个元素,这里要求删除p之后的q
LNode Delete()
{
LNode* p, *q;
//删除p后的q
if (p == NULL)
return false;
q = p->next;
if (q == NULL)
return false;
p->next = q->next;
if(q->next)
q->next->prior = p;
free(q);
return true;
}
遍历
由于链表无法实现随机存取,只能顺序读取
PList Visit1(PList L)//后项遍历
{
while (L)
{
L = L->next;
}
}
PList Visit2(PList L)//前项遍历
{
while (L)
{
L = L->prior;
}
}
PList Visit3(PList L)//前项遍历且跳过头节点
{
while (L->prior)
{
L = L->prior;
}
}
销毁
PList Destroy(PList L)
{
while (L->next)
Delete(L);
free(L);
L = NULL;
}