数据结构之双向链表

一、双向链表

(一)双链表的结构定义

typedef struct DuLnode{        //声明结点的类型和指向节点的指针类型
    ElemType data               //结点的数据域
    struct Lnode *next,*prior   //结点的指针域,分为后驱结点的地址和前驱结点的地址
}Lnode, *DuLinkList             //LinkList 为指向结构体Lnode的指针类型

(二)双链表的操作

1.双链表的插入

// 在带头结点的双向循环链表L中第i个位置之前插入元素e
void ListInsert_Dul(DuLinkList &L, Int i, ElemType e) {
    if(!(p = GetElemP_Dul(L,i))) return ERROR
    s = new DulNode              // 创建一个新的结点元素
    s -> date = e                // 保存结点元素的数据域
    s -> prior = p -> prior      // 将i+1个位置的前驱(指向i)指向 赋值给 新结点的前驱指向
    p -> prior -> next =s        // 将i的后驱指向  新结点
    s -> next = p                // 将新结点的后驱 指向 i+1结点
    p -> prior = s               // 将i+1结点的前驱 指向 新结点
    return OK
}

2.双链表的删除操作

// 删除在带头结点的双向循环链表L中第i个位置 并用e返回
void ListDelete_Dul(DuLinkList &L, Int i, ElemType &e) {
    if(!(p = GetElemP_Dul(L,i))) return ERROR 
    e= p -> data                           // 保存删除结点元素的数据域
    p -> prior -> next = p -> next          // 将删除元素的后驱(指向i)指向 赋值给 i-1结点的后驱指向
    p -> next -> prioe = p -> prior        // 将删除元素的前驱(指向i)指向 赋值给 i+1结点的前驱指向
    free(p)                               // 清除结点空间
    return OK
}

 (三)链表的总结比较

 

 

posted @   铜须的编程生活  阅读(136)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示