双链表的存储结构
//双链表的存储结构
typedef struct DNode{
int data; //结点的数据域
DNode *prior, *next; //前驱和后继指针
}DNode, *DLinkList;
在L中确定第i个元素的位置
//在L中确定第i个元素的位置
DNode *GetElem(DLinkList L,int i);
双向链表的插入
//双向链表的插入---在带头结点的双向链表L中第i个位置之前插入元素e
bool ListInsert(DLinkList &L,int i,int e){
DNode *p,*s;
if(!(p=GetElem(L,i))) return false; //在L中确定第i个元素的位置指针p
s=new DNode;
s->data=e;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
return true;
}
双向链表的删除
//双向链表的删除---删除第i个元素,并用e返回
bool ListDelete(DLinkList &L,int i,int &e){
DNode *p;
if(!(p=GetElem(L,i))) return false; //在L中确定第i个元素的位置指针p
e=p->data;
p->prior->next=p->next;
p->next->prior=p->prior;
return true;
}