vxWorks系统对常用数据结构的实现比较少,但是提供了对双向链表的支持,其声明位于lstLib.h头文件中,主要定义了以下一些内容:
1、LIST类型
LIST类型的定义如下:
LIST结构体属于是对整个链表的描述,它包括了链表的头指针、尾指针以及链表中节点的个数。其中,node的next指针是LIST的头指针(HEAD),node的previous指针是LIST的尾指针(TAIL),这在lstLib的实现中是通过宏来定义的,其定义如上边代码区下部:
定义LIST类型是使用链表的第一步,一般情况下都要以
LIST myList;
的形式定义一个链表。
2、NODE类型
其定义如下:
NODE类型只是提供了对节点最基本的描述,一般情况下在自己的代码中是不能直接使用的,而是需要定义一个自己的节点数据类型,定义自己节点类型的时候,切记结构体的第一个位置必须是NODE类型的。这样,在程序中,创建节点的时候就创建一个MyNode类型的,而使用系统链表函数的时候,就把它强制转换成NODE类型,使用示例见上边代码最下部。
3、相关函数。
函数的作用在此就不罗嗦了,后边有每个函数的实现,需要注意的是lstNth函数和lstExtract函数,lstNth函数中的序号应该是从1开始的,而不是0. lstExtract函数分出来的子列表时即包括startNode,又包括endNode的。另外需要注意的就是开始使用链表前先使用lstInit函数初始化,使用过程中删除的节点记得释放其空间(如果是malloc分配的话),使用完链表之后使用lstFree释放链表空间。
所以,使用链表的一般步骤是:
首先定义自己的节点类型,定义一个LIST数据。
使用lstInit对链表进行初始化
使用系统提供的函数对链表进行操作,使用的过程中,用到自定义节点类型时记得类型转换,删除节点时记得释放空间。
使用完链表,释放链表空间。
lstLib.c文件源码