现阶段学zephyr很困难,没有足够资料,东一锤子,西一榔头,转来转去还是转回数据结构。没办法,这几个数据结构是其它各类机制的基础,不研究一下还真不行。静下心来先搞数据结构吧。上次讲了单向链表slist,这次再弄个双向链表dlist。
先来看看结点的数据结构:
struct _dnode
{ union { struct _dnode *head; /* 链表头指针 (sys_dlist_t) */ struct _dnode *next; /* 下一节点指针(sys_dnode_t) */ }; union { struct _dnode *tail; /* 链表尾指针 (sys_dlist_t) */ struct _dnode *prev; /* 上一节点指针 (sys_dnode_t) */ }; }; typedef struct _dnode sys_dlist_t; //表示链表,使用*head和*tail typedef struct _dnode sys_dnode_t; //表示节点,使用*next和*prev |
这代码写得奇葩,不过学过数据结构的都知道,链表本身就是用节点来表示的,这里只是使用共用体区分开来。