#define int ElemType
typedef struct DNode {
ElemType data;
struct DNode *prior, *next;
} DNode, *DLinkList;
// 初始化双链表
bool InitDLinkList(DLinkList &L)
{
L = (DNode*)malloc(sizeof(DNode));
if (DNode == nullptr) return false;
L->prior = nullptr; // 头结点的prior指针永远指向空
L->next = nullptr; // 头结点的next指针目前还没存结点
return true;
}
// 判断双链表是否为空
bool Empty(DLinkList L)
{
return L->next == nullptr;
}
// 后插操作
bool InsertNextDNode(DNode* p, DNode* s)
{
if(p = nullptr || s == nullptr) {
return false;
}
s->next = p ->next;
if (p->next != nullptr) {
p->next->prior = s;
}
s->prior = p;
p->next = s;
}
// 删除后继节点
bool DeleteNextDnode(DNode* p)
{
if (p == nullptr || p->next ==nullptr) return false;
DNode* q = p->next;
p->next = q->next;
if (q->next != nullptr) {
q->next->prior = p;
}
delete q;
q = nullptr;
return true;
}
// 销毁一个双链表
bool DestornList(DLinkList &L)
{
// 循环释放各个数据节点
while (L->next != nullptr) {
DeleteNextDnode(L);
}
delete L; // 释放头结点
L = nullptr; // 头指针指向空
}
// 遍历操作
void IterList (DLinkList L)
DNode* p = L;
{
while (p != nullptr) {
p = p->piror; // 前向遍历
}
while (p != nullptr) {
p = p->piror; // 后向遍历
}
}
// 循环双链表
bool InitCDLinkList(DLinkList &L)
{
L = (DNode*)malloc(sizeof(DNode));
if (l == nullptr) return false;
L->prior = L;
L->next = L;
return true;
}
// 判断循环双链表是否为空
bool idCDListEmpty(DLinkList L)
{
return L->next == L;
}
//判断结点p是否为循环双链表的表尾结点
bool isDCTail(DNode *p)
{
return p->next == nullptr;
}
// 后插
bool insertNextCDNode(DNode* p, DNode* s)
{
if (s == nullptr || p == nullptr) return false;
s->next = p->next;
p->next->prior = s;
p->next = s;
s->prior = p;
}
// 循环链表的删除
bool DeleteCDNextNode(DNode *p)
{
q = p->next;
p->next = q->next;
q->next->prior = p;
delete q;
q = nullptr;
}
24王道双链表循环双链表代码合集
最新推荐文章于 2024-09-28 22:05:59 发布