双向链表 Double Linked List
插入
s->data = e;
s->proir = p->proir;p->proir->next = s;
s->next = p;p->proir=s;删除
p->proir->next = p->next;
p->next->proir = p->proir;
双向链表插入
#define ElemType int
typedef struct DuLNode {
ElemType data;
struct DuLNode* proir;
struct DuLNode* next;
}DuLNode, * DuLinkList;
void ListInsert_DuL(DuLinkList L,int i,ElemType e){
if (!L)//合法性检查
return;
DuLNode* p;
p = L->next;
for (int j = 1; j <= i; j++) {//遍历找到插入位置
p = p->next;
}
DuLNode* s = (DuLNode*)mallco(sizeof(DuLNode));//生成新结点元素e
s->data = e;//插入结点e
s->proir = p->proir;p->proir->next = s;
s->next = p;p->proir=s;
}
双向链表删除
void ListDelete_Dul(DuLinkList L, int i) {
if(!(p = GetElem_Dul(L, i))
return; // 合法性检查
p->proir->next = p->next;
p->next->proir = p->proir;
free(p);
}