双向链表基本操作的实现(带头节点)
程序员文章站
2024-03-23 14:46:16
...
双向链表的基本操作实现(含头节点)
双链表的节点类型描述如下:
typedef struct DNode {//定义双链表的节点类型
int data;//数据域
struct DNode* prior, * next;//前驱和后继指针
}DNode,*DLinkList;
以下几种操作
bool InitDLinkList(DLinkList& L) {//初始化双链表
bool Empty(DLinkList L) {//判断双链表是否为空
bool InsertNextDNode(DNode* p, DNode* s) {//在p节点之后插入s节点
bool DeleteNextDNode(DNode* p) {//删除p节点的后继节点
void DestoryList(DLinkList& L) {//循环释放各个节点
具体实现如下所示
bool InitDLinkList(DLinkList& L) {//初始化双链表
DNode* s = (DNode*)malloc(sizeof(DNode*));
if (s == NULL) {//内存分配失败
return false;
}
s->next = NULL;
s->prior = NULL;
L = s;
return true;
}
bool Empty(DLinkList L) {//判断双链表是否为空
if (L->next == NULL) {
return true;
}
return false;
}
bool InsertNextDNode(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;
}
bool DeleteNextDNode(DNode* p) {//删除p节点的后继节点
if (p == NULL || p->next == NULL) {
return false;
}
DNode* q = p->next;
p->next = q->next;
if (q->next != NULL) {
q->next->prior = p;
}
free(q);
}
void DestoryList(DLinkList& L) {//循环释放各个节点
/*DNode* p = L->next;
while (p!= NULL) {
L->next = p->next;
if (p->next != NULL) {
p->next->prior = L;
}
free(p);
p = L->next;
}*/
while (L->next!= NULL) {
DeleteNextDNode(L);
}
free(L);
L = NULL;
}
上一篇: isdigit 函数
下一篇: 数据结构:双链表的基本操作(带头结点)