1)双链表的定义
typedef struct DNode{ int data; DNode * next,* prior; }DNode,*DLinkList; bool InitList(DLinkList &L) { L=(DNode *)malloc(sizeof(DNode)); if(L==NULL) return false; L->next=NULL; L->prior=NULL; return true; } bool Empty(DLinkList &L) { return(L->next==NULL); }
2)双链表的插入
bool ListInsert(DNode * p,DNode * s) { if(p==NULL||s==NULL) return false; s->next=p->next; //1 if(p->next!=NULL) p->next->prior=s; //2 s->prior=p; //3 p->next=s; //4 1,2必须在4前 return true; }
这是指定结点的后插操作,按位序插入只需要设置尾指针,依次进行后插操作即可;前插操作只需要找到一个结点的前继结点,对其进行后插操作即可。
3)双链表的删除
bool ListDelete(DNode * p) //删除指定结点的后继节点 { if(p==NULL) return false; DNode * q=p->next; if(q==NULL) return false; p->next=q->next; if(q->next!=NULL) q->next->prior=p; free(q); return true; }
销毁一个双链表
void DestroyList(DLinkList &L) { while(L->next!=NULL) ListDelete(L); free(L); //释放头结点 L->next=NULL; //头指针置空 }
4)双链表的遍历
//后向遍历 while(p!=NULL) { //... p=p->next; } //前向遍历 while(p->pror!=NULL) //跳过了头结点 { //... p=p->prior; }