【王道数据结构】线性表的链式存储——双链表
作者:
Skuy
,
2023-03-20 21:43:50
,
所有人可见
,
阅读 158
#include <stdio.h>
#include <stdlib.h>
typedef struct DNode {
int data;
struct DNode *prior, *next;
} DNode, *DLinkList;
bool InitDLinkList(DLinkList &L)
{
L = (DNode *) malloc(sizeof(DNode)); // 分配一个头结点
if (L == NULL) return false;
L->next = NULL;
L->prior = NULL;
return true;
}
// 实现在给定结点p之后插入一个结点s
bool InsertNextDNode(DNode *p, DNode *s)
{
if (p == NULL && s == NULL) return false;
s->next = p->next;
s->prior = p;
if (p->next != NULL) p->next->prior = s;
p->next = s;
return true;
}
// 实现在给定结点p之前插入一个结点s
bool InsertPriorDNode(DNode *p, DNode *s)
{
if (p == NULL && s == NULL) return false;
s->next = p;
s->prior = p->prior;
if (p->prior != NULL) p->prior->next = s;
p->prior = s;
return true;
}
// 删除指定结点p的后继结点
bool DeleteNextDNode(DNode *p, int &e)
{
if (p == NULL) return false;
if (p->next == NULL) return false;
DNode *q = p->next;
p->next = q->next;
if (q->next != NULL) q->next->prior = p;
free(q);
return true;
}
// 销毁双链表
void destoryDLinkList(DLinkList &L)
{
while (L->next != NULL)
{
DeleteNextDNode(L);
}
free(L);
L = NULL;
}
// 遍历
void ergodic(DLinkList L)
{
DNode *p = L->next;
while (p != NULL)
{
/*
操作
*/
p = p->next; // 向后
// p = p->prior; 向前
}
}
void testDLinkList()
{
DLinkList L;
InitDLinkList(L);
}
int main()
{
testDLinkList();
return 0;
}