数据结构之双向链表
一、双向链表
(一)双链表的结构定义
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
}
(三)链表的总结比较
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!