双向链表:在单链表的每个结点里再增加一个指向其直接前驱的指针域prior,这样链表中就形成了有两个方向不同的链,故称为双向链表
双向链表的结构定义:
typedef struct DuLNode{
Elemtype data;
struct DuLNode prior,next;
}DuLNode,DuLinkList;
双向链表结构的对称性(设指针p指向某一结点)
p->prior->next = p = p->next->prior
双向链表的插入
void ListInsert_DuL(DuLinkList &L, int i ,ElemType e){
//在带头结点的双向循环链表L中第i个位置之前插入i元素
if(!(p=GetElemP_DuL(L,i))) return ERROR;
s = new DuLNode; s->data = e;
s->prior = p->prior; p->prior->next = s;
s->next = p; p->prior=s;
return OK;
}
双向链表的删除
void ListDelete_DuL(DuLinkList &L, int i ,ElemType &e){
//删除带头结点的双向循环链表L中第i个元素,并用e返回
if(!(p=GetElemP_DuL(L,i))) return ERROR;
e=p->data;
p->prior-next = p->next;
p->next->prior = p->prior;
free(p);
return OK;
}
