24王道双链表循环双链表代码合集

#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;
}

王道408链表是指《王道计算机考研系列:数据结构(上)》中的一道考题,要求使用C语言实现链表的基本操作。链表是一种常用的数据结构,与数组相比,链表的大小可以动态变化,不需要预先指定大小。 链表的基本操作包括:初始化、插入元素、删除元素、遍历元素、搜索元素和销毁链表。 1. 初始化:初始化一个空链表,即创建一个头节点,并将头节点的指针域设置为空。 2. 插入元素:向链表中插入一个新的节点,可以在链表的任意位置插入。具体操作为:创建一个新的节点,将新节点的数据赋值给新节点的数据域,将新节点的指针域指向需要插入位置的下一个节点,将前一个节点的指针域指向新节点。 3. 删除元素:从链表中删除一个节点,可以根据节点的位置或者特定的值进行删除。具体操作为:找到该节点的前一个节点,将前一个节点的指针域指向该节点的下一个节点,释放该节点内存空间。 4. 遍历元素:从链表的头节点开始,通过遍历节点的指针域,依次输出链表中的所有元素,直到指针域为空。 5. 搜索元素:根据给定的值,在链表中搜索相应的节点。具体操作为:从头节点开始,通过遍历节点的数据域,逐个比较节点中的值,如果找到匹配的值,返回该节点的地址;如果遍历完链表仍未找到匹配的值,返回空。 6. 销毁链表:释放链表中所有节点的内存空间,以免内存泄漏。具体操作为:循环遍历链表,释放每一个节点的内存空间,同时将链表的头节点设置为空。 通过以上的基本操作,可以在C语言中实现对链表的增删改查等操作。但需要注意的是,具体的实现可能会根据题目的要求有所不同,例如可能需要处理链表中的特殊情况(如删除头节点)或者自定义其他操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值