企业链表的实现

传统链表的讲解参考:

https://blog.csdn.net/yanggx0929/article/details/79947351


所谓企业链表的思想来源于linux内核链表的思想,但又有些不同

1. 企业链表的结构:

节点结构


链表结构

企业链表节点中不包含数据项,只有指针项,数据项用户自己定义,只需要把链表节点放入用户自定义数据项的顶端即可,如下图:


链表的结构体定义如下:


节点LinkNode中只包含一个指向下一个节点的指针,链表中包含链表头和链表长度。

2. 链表功能解析

初始化链表


由于LINKLIST中的head定义为结构体类型,而不是指针,所以不用分配额外的内存空间,当然此处也可以用指针来定义head。

指定位置插入数据


注意:此处插入的是节点指针LinkNode类型的数据data,由于数据的类型为用户定义,且用户数据类型的最上端为链表节点类型,所以再传入数据时将用户数据的指针类型强行转换为链表指针类型传入。

删除指定节点的值


由于没有为链表的节点分配内存,节点数据都是用户传入的,故此处不需要free节点内存

查找链表的值对应的下标


由于数据类型为用户自定义,故不能使用==来判定数据是否匹配,此处使用函数指针,用于用户传入自定义的比较函数

typedef int(*MYCOMPARE)(LinkNode *, LinkNode *);

打印链表


此处的print函数同理,由于不知道用户的数据类型,由用户自己传入自己的打印函数

删除链表


由于只申请了链表内存,各个节点并没有分配内存,故只需要free链表指针list.

传统链表的讲解参考:

https://blog.csdn.net/yanggx0929/article/details/79947351

阅读更多
文章标签: 企业链表
个人分类: 数据结构 心得
上一篇传统链表实现多种数据类型操作
下一篇动态数组的C实现
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭