双向链表是在单链表的每个结点中,在设置一个指向其前驱结点的指针域,所以双向链表中的结点有两个指针域,一个指向直接后继,另一个至下关直接前驱。
双向链表的存储结构
//双向链表的存储结构
typedef struct DulNode
{
ElemType data;
struct DulNode *prior;
struct DulNode *next;
}DulNode, *DuLinkList;
双向链表是单链表中扩展出来的结构,所以他的很多操作时和单链表相同的,(ListLength,GetElem,LocateElem)这些操作只涉及一个方向指针就可以
双向链表插入,删除时,需要更改两个指针变量
插入操作
顺序保持一致:
1、s->prior = p;
2、s->next = p->next;
3、p->nex->prior= s;
4、p->next = s;
删除操作
p->prior->next= p->next;
p->next->prior = p->prior;