- 介绍
- 特点
- 代码定义
- 操作
- 双链表的初始化
- 插入(后插)
- 删除结点
- 测试方法
双链表特点:可进可退,存储密度更低一点
单链表特点:无法逆向检索,有时候不太方便
代码定义typedef struct DNode{//定义双链表结点类型
Elemtype data;//数据域
struct DNode *prior,*next;//前驱和后继指针
}DNode,*DLinkList;
操作
双链表的初始化
#include插入(后插)#include #include typedef struct DNode { int data; struct DNode *prior; struct DNode *next; } DNode, *DLinkList; bool initDLinkList(DLinkList *dLinkList) { *dLinkList = (DNode *) malloc(sizeof(DNode)); if (*dLinkList == NULL) { return false; } (*dLinkList)->prior = NULL; (*dLinkList)->next = NULL; return true; } bool empty(DLinkList dLinkList) { return dLinkList->next == NULL; }
bool insertNextDNode(DNode *p, DNode *s) {
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 deleteDNode(DNode *p) {
if (p == NULL) {
return false;
}
//后继节点操作相关
DNode *next = p->next;
DNode *prior = p->prior;
if (next != NULL) {
prior->next = next;
next->prior = prior;
}
if (next == NULL) {
prior->next = NULL;
}
//是否内存
free(p);
return true;
}
测试方法
int main() {
DLinkList dLinkList = NULL;
initDLinkList(&dLinkList);
DLinkList dLinkList1 = NULL;
initDLinkList(&dLinkList1);
DLinkList dLinkList2 = NULL;
initDLinkList(&dLinkList2);
insertNextDNode(dLinkList, dLinkList1);
insertNextDNode(dLinkList1, dLinkList2);
deleteDNode(dLinkList1);
return 1;
}



