双链表
1.双链表的初始化
bool InitDLinklist(DLinklist& L) {
L = (DLinklist)malloc(sizeof(struct DNode));
if (L == NULL)
return false; //内存不足,分配失败
L->next = NULL;
L->prior = NULL;
return true;
}
2.双链表的插入
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;
p->next = s;
s->prior = p;
}
return true;
}
3.双链表的删除
bool DeleteNextDNode(DNode* p) {
if (p == NULL)
return false;
if (p->next == NULL) //p没有后继节点
return false;
DNode* q = p->next; //找到p的后继节点q
p->next = q->next;
if (q->next != NULL) //q节点不是最后一个节点
p->next->prior = p;
free(q); //释放节点空间
return true;
}
4.双链表的销毁
void DestoryList(DLinklist& L) {
//循环释放各个数据节点
while (L->next != NULL)
DeleteNextDNode(L->next);
free(L);
L = NULL;
}