结构体
typedef struct DNode
{
Elemtype data;
struct DNode *prior, *next;
}DNode, *DLinkList;
初始化
bool InitDLinkList(DLinkList &L)
{
L = (DLinkList)malloc(sizeof(DNode));
if(L == NULL)
return false;
L->next = NULL;
L->prior = NULL;
return true;
}
判空
bool Empty(DLinkList L)
{
if(L->next == NULL)
return true;
return false;
}
插入
在结点p后插入结点s,若想在结点p前插入结点s,调用InsertNextNode(p->prior, s)即可
bool InsertNextDNode(DNode *p, DNode *s)
{
if(p == NULL || s == NULL)
return false;
s->next = p->next;
if(p->next != NULL)
p->next->prior = s;
p->next = s;
s->prior = p;
return true;
}
删除
删除结点p后的结点,若想删除结点p,调用DeleteNextNode(p->prior)即可
bool DeleteNextNode(DNode *p)
{
if(p == NULL || p->next == NULL)
return false;
DNode *q = p->next;
if(q->next != NULL)
q->next->prior = p;
p->next = q->next;
free(q);
return true;
}
释放整个链表
void DestoryList(DLinkList &L)
{
while(L->next != NULL)
DeleteNextNode(L);
free(L);
L = NULL;
}
遍历
后向遍历
while(p != NULL)
{
//对结点进行操作
p = p->next;
}
前向遍历
while(p != NULL)
{
//对结点进行操作
p = p->prior;
}
前向遍历(跳过头结点)
while(p->prior != NULL)
{
//对结点进行操作
p = p->prior;
}