由于双链表中大部分操作其实和单链表操作类似,所以这里只挑关键的一些函数 1、定义与初始化
typedef struct DNode
{ElementType data;struct DNode *prior,*next;
}DNode,*DLinkList;bool InitialDLinkList(DLinkList &L){L = (DNode *)malloc(sizeof(DNode));if (L==NULL){return false;}L->prior = NULL;L->next = NULL;return true;}
2、在某结点添加和删除后继结点
bool InsertNextDNode(DNode *p,DNode *s){//在p结点添加后继结点if (p==NULL||s==NULL){return false;}s->next = p->next;if (p->next!=NULL){p->next->prior=s;}s->prior = p;p->next = s;return true;
}bool DeletNextDNode(DNode *p){//删除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;}
3、摧毁整个双链表
oid DestroyDLinkList(DLinkList &L){while (L->next!=NULL){DeletNextDNode(L);}free(L);L=NULL;
}
4、打印链表,包括打印整个链表,和从某个结点开始前向或者后向打印
void print(DLinkList &L){DNode *p = L->next;while(p->next!=NULL){printf("%d",p->data);p=p->next;}
}void print_next(DNode *p){while(p->next!=NULL){printf("%d",p->data);p=p->next;}
}void print_prior(DNode *p){while(p->prior!=NULL){printf("%d",p->data);p=p->prior;}
}
本文由博客一文多发平台 OpenWrite 发布!