「算法精解_C语言描述」 链表_双向链表(接口定义)
来源:互联网 发布:php cgi.exe 命令行 编辑:程序博客网 时间:2024/05/16 14:29
双向链表介绍
双向链表中的每一个元素都由3部分组成:除了数据成员、next指针外,每个元素还包含一个指向其前驱元素的指针,称为prev指针。双向链表的组成是这样的:将一些元素链接在一起,使得每个元素的next指针都指向其后继的元素,而每个元素的prev指针都指向其前驱元素。
为了标识链表的头和尾,将第一个元素的prev指针和最后一个元素的next指针设置为NULL。
要反向遍历整个双向链表,使用prev指针以从尾到头的顺序连续访问各个元素。当我们知道某个元素存储在链表在的某处时,我们可以选择按何种方式访问到它,这会非常有帮助。例如,双向链表的一种灵活性在于它提供了一种比单链表更直观的方式移除一个元素。
双向链表接口定义
dlist_initvoid dlist_init(DList *list, void(*destroy)(void *data));
返回值:无
描述:初始化由list所指向的双向链表。该函数必须在双向链表做其他任何操作之前调用。当调用dlist_destroy时,这里传入的destroy参数提供了一种释放动态分配空间的方法。它的工作方式如同单链表中的list_destroy。对于双向链表,如果其中包含不需要手动释放空间的数据,destroy参数应该设置为NULL。
复杂度:O(n)
dlist_destroy
void dlist_destroy(DList *list);
返回值:无
描述:销毁由参数list所指定的双向链表。调用该函数后不允许再执行其他操作,除非用户再次调用dlist_init。dlist_destroy将移除链表中的所有元素,如果传给dlist_init的参数destroy不为NULL,则调用destroy所指定的函数,对链表中每个移除的元素数据施行资源回收操作。
复杂度:O(n),这里n代表双向链表中的元素个数。
dlist_ins_next
int dlist_ins_next(DList *list, DLIstElmt *element,const void *data)
返回值:如果插入成功则返回1,否则返回-1。
描述:将元素插入由list指定的双向链表的element元素之后 。当插入空链表中时,element可能指向任何位置,为了避免混淆,element此时应该设置为NULL。新的元素包含一个指向data的指针,因此只要该元素仍在链表中,data所引用的内存空间就应该保持合法。 由调用者负责管理data所引用的存储空间。
复杂度:O(1)
dlist_ins_prev
int dlist_ins_prev(DList *list, DLIstElmt *element,const void *data)
返回值:无
描述:将元素插入由list指定的双向链表的element元素之前 。当插入空链表中时,element可能指向任何位置,为了避免混淆,element此时应该设置为NULL。新的元素包含一个指向data的指针,因此只要该元素仍在链表中,data所引用的内存空间就应该保持合法。 由调用者负责管理data所引用的存储空间。
复杂度:O(1)
int dlist_remove(DList *list, DLIstElmt *element,const void *data)
返回值:如果移除成功则返回0,否则返回-1。
描述:从由list指定的双向链表中移除由element所指定的元素。函数返回后,参数data将指向已移除元素中存储的数据域。由调用者负责管理data所引用的存储空间。
复杂度:O(1)
dlist_size
intdlist_size(DList *list)
返回值:链表中的元素个数 。
描述:这是一个宏,用来计算由list所指定的双向链表中的元素个数。
复杂度:O(1)
dlist_head
DListElmt *dlist_head(const DList *list)
返回值:返回链表的头元素。
描述:这是一个宏,用来返回由list所指定的双向链表中的头元素。
复杂度:O(1)
dlist_tail
DListElmt *dlist_tail(const DList *list)
返回值:返回链表的尾元素。
描述:这是一个宏,用来返回由list所指定的双向链表中的尾元素。
复杂度:O(1)
dlist_is_head
int *dlist_is_head(const DListElmt *element)
返回值:如果由参数element所指定的元素是链表头元素则返回1;否则返回0。
描述:这是一个宏,用来判断由参数element所指定的元素是否为链表头元素。
复杂度:O(1)
int *dlist_is_tail(const DListElmt *element)
返回值:如果由参数element所指定的元素是链表尾元素则返回0;否则返回-1。
描述:这是一个宏,用来判断由参数element所指定的元素是否为链表尾元素。
复杂度:O(1)
int *dlist_data(const DListElmt *element)
返回值:返回由element所指定的链表元素的数据域。
描述:这是一个宏,用来返回由element所指定的双向链表元素的数据域。
复杂度:O(1)
DListElmt *dlist_next(const DListElmt *element)
返回值:返回由element所指定的元素的下一个元素。
描述:这是一个宏,用来返回由element所指定的链表元素的后继元素。
复杂度:O(1)
DListElmt *dlist_prev(const DListElmt *element)
返回值:返回由element所指定的元素的前驱元素。
描述:这是一个宏,用来返回由element所指定的链表元素的前驱元素。
复杂度:O(1)
阅读全文
0 0
- 「算法精解_C语言描述」 链表_双向链表(接口定义)
- 「算法精解_C语言描述」栈_栈的接口定义
- 「算法精解_C语言描述」 链表_双向链表的实现与分析
- 「算法精解_C语言描述」链表_循环链表介绍
- 「算法精解_C语言描述」链表_循环链表的实现与分析
- 「算法精解_C语言描述」链表_关于链表特点的几个问与答
- 「算法精解_C语言描述」链表_循环链表实例 内存页帧置换(图解+实现)
- 算法精解_C语言 链表_单链表(接口定义+类型实现)
- 「算法精解_C语言描述」栈_栈的实现与分析
- 算法精解_C语言描述 算法性能分析,如何评判算法!
- 算法精解_C语言 链表_单链表(应用:页帧管理)
- 数据结构与算法(C语言描述)——双向链表
- <数据结构与算法>双向循环链表的全面基本框架(C语言描述)
- 双向链表实现_c++
- 数据结构与算法Javascript描述(四)双向链表
- 《数据结构与算法C#语言描述》笔记11_链表
- 图算法_普通广度优先搜索(BFS)解八数码问题_C语言
- c语言_数据结构_双向循环链表
- C#之base和this关键字内部神秘面纱
- 异或进行最简单的加密
- Luogu P1331 海战
- When to use volatile with shared CUDA Memory
- DPDK
- 「算法精解_C语言描述」 链表_双向链表(接口定义)
- K-SVD字典学习及其实现(Python)
- 浅谈JQuery中$('.classname').get(0); $('.classname').eq(0); $('.classname')[0]三者的区别
- mysql时间处理
- 阿里巴巴获机器视觉顶级会议 ACM MM2020 主办权
- 阅面科技发布堪比服务器的终端视觉模块,将云端计算能力搬至终端
- Uber与斯坦福大学开源深度概率编程语言Pyro:基于PyTorch
- 硅谷最干货大会之一AI Frontiers 详解全球投资热区和5大应用趋势
- 「嵌入式 AI」这个时髦的名词,究竟是一个新理念,还是一个旧噱头?