一、双向链表
(一)双链表的结构定义
typedef struct DuLnode{ //声明结点的类型和指向节点的指针类型
ElemType data //结点的数据域
struct Lnode *next,*prior //结点的指针域,分为后驱结点的地址和前驱结点的地址
}Lnode, *DuLinkList //LinkList 为指向结构体Lnode的指针类型
(二)双链表的操作
1.双链表的插入
// 在带头结点的双向循环链表L中第i个位置之前插入元素e
void ListInsert_Dul(DuLinkList &L, Int i, ElemType e) {
if(!(p = GetElemP_Dul(L,i))) return ERROR
s = new DulNode // 创建一个新的结点元素
s -> date = e // 保存结点元素的数据域
s -> prior = p -> prior // 将i+1个位置的前驱(指向i)指向 赋值给 新结点的前驱指向
p -> prior -> next =s // 将i的后驱指向 新结点
s -> next = p // 将新结点的后驱 指向 i+1结点
p -> prior = s // 将i+1结点的前驱 指向 新结点
return OK
}
2.双链表的删除操作
// 删除在带头结点的双向循环链表L中第i个位置 并用e返回
void ListDelete_Dul(DuLinkList &L, Int i, ElemType &e) {
if(!(p = GetElemP_Dul(L,i))) return ERROR
e= p -> data // 保存删除结点元素的数据域
p -> prior -> next = p -> next // 将删除元素的后驱(指向i)指向 赋值给 i-1结点的后驱指向
p -> next -> prioe = p -> prior // 将删除元素的前驱(指向i)指向 赋值给 i+1结点的前驱指向
free(p) // 清除结点空间
return OK
}
(三)链表的总结比较

