嵌入式linux内核数据结构之循环链表

分享到:
           

    链表作为嵌入式Linux内核中常见的数据结构,在之前的文章里我们分别介绍过了单向链表双向链表,今天主要介绍的则是循环列表。

    单向链表的后一个节点的指针域为空(NULL)。如果将这个指针利用起来,以指向单向链表的第一个节点,就能组成一个单向循环链表,如图1.1所示。


图1.1 循环链表结构

    可以看到,循环链表的组织结构与单链表非常相似,因此其操作与单链表也是一致的,惟一的差别仅在于在单链表中,算法判端到达链表尾的条件是p→next是否为空,而在双链表中,则是判断p→next是否等于头指针。

    总而言之,循环链表的运算与单链表的运算基本一致,所不同的有以下几点:

    1、在建立一个循环链表时,必须使其后一个结点的指针指向表头结点,而不是像单链表那样置为NULL。此种情况还使用于在后一个结点后插入一个新的结点。

    2、在判断是否到表尾时,是判断该结点链域的值是否是表头结点,当链域值等于表头指针时,说明已到表尾。而非像单链表那样判断链域值是否为NULL。

    表1.1总结了各种链表的异同点。

    表1.1                                     各种链表的异同点

单 向 链 表 双 向 链 表 单向循环链表 双向循环链表
指针域 Next next,priv Next next,priv
结尾指针 NULL NULL 头指针 头指针
内存占用 较少 较多 较少 较多
操作灵活性 较不灵活,每次搜索都必须从头指针开始,不能反向搜索 较为灵活,搜索时可以反向搜索,但也从头指针开始搜索 较为灵活,搜索时可以不从头指针开始,但不能反向搜索 非常灵活,搜索时可以不从头指针开始,且可以反向搜索
时间复杂度 O(N) O(N) O(N) O(N)
空间复杂度 O(N) O(N) O(N) O(N)

   热点链接:

   1、嵌入式linux内核数据结构之双向链表
   2、嵌入式linux内核数据结构之单向链表
   3、Linux内核模块程序结构
   4、嵌入式Linux内核如何编译
   5、嵌入式Linux开发学习

更多新闻>>