双向链表:在单链表的每个结点里再增加一个指向其直接前驱的指针域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;
    }