一、双链表的定义
双链表 是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。
二、双链表的初始化
typedef struct DNode { //定义双链表结点类型
ElemType data;
struct DNode* next, * prior;
}DNode, * DLinklist;
bool InitDLinklist(DLinklist L) {
L = (DNode*)malloc(sizeof(DNode)); //创建头结点
if (L = NULL)
return false;
L->prior = NULL;
L->next = NULL;
return true;
}
void testDLinklist() { //初始化双链表
DLinklist L;
InitDLinklist(L);
}
三、双链表的基本操作
3.1、双链表的插入
bool InsertDLinklist(DNode* p, DNode* s) { //在p结点后插入s结点
if(p==NULL||s==NULL)
return false;
s->next = p->next;
if(p->next!=NULL) //考虑p是不是最后一个结点
p->next->prior = s;
s->prior = p;
p->next = s;
return true;
}
3.2、双链表的删除
bool DeleteDLinklist(DNode* p) { //删除p结点之后的一个结点
if (p == NULL)
return false;
DNode* s = p->next;
if (s == NULL)
return false;
p->next = s->next;
if(s->next!=NULL) //考虑s结点是否最后一个结点
s->next->prior = p;
free(s);
return true;
}