NuttX_基础组件之队列
2016-04-10 13:14
411 查看
flink - forward link
blink - backward link
/nuttx/include/queue.h
/nuttx/libc/queue/ 文件夹下c文件实现
1. 单向链表队列结构体中记录了first node的地址 head 和 last node的地址 tail
2. 队列空时, head tail 指针等于NULL
3. 最后一个节点 last node, 向前遍历flink指针等于NULL
1. 双向链表队列结构体中记录了first node的地址 head 和 last node的地址 tail
2. 队列空时, head tail 指针等于NULL
3. 最前一个节点first node, 向后遍历blink指针等于NULL
4. 最后一个节点last node, 向前遍历flink指针等于NULL
blink - backward link
/nuttx/include/queue.h
/nuttx/libc/queue/ 文件夹下c文件实现
sigle list queue
单向链表队列:1. 单向链表队列结构体中记录了first node的地址 head 和 last node的地址 tail
2. 队列空时, head tail 指针等于NULL
3. 最后一个节点 last node, 向前遍历flink指针等于NULL
struct sq_entry_s { struct sq_entry_s *flink; /* forward */ }; typedef struct sq_entry_s sq_entry_t; struct sq_queue_s { sq_entry_t *head; /* queue head(first) node */ sq_entry_t *tail; /* queue tail(last) node */ }; typedef struct sq_queue_s sq_queue_t; void sq_addfirst(sq_entry_t *node, sq_queue_t *queue); void sq_addlast(sq_entry_t *node, sq_queue_t *queue); void sq_addafter(sq_entry_t *prev, sq_entry_t *node, sq_queue_t *queue); sq_entry_t *sq_remfirst(sq_queue_t *queue); sq_entry_t *sq_remlast(sq_queue_t *queue); sq_entry_t *sq_remafter(sq_entry_t *node, sq_queue_t *queue); void sq_rem(sq_entry_t *node, sq_queue_t *queue); --> flink +------------------------------------------------sigle list queue head | + +--------+--------+~~~~~~~~~+--------+--------+------+ | first | | | | last | | | node | node | ~~~~~~~ | node | node | NULL | | +-->| +-->| +--->| +-->| +-->| | +--------+--------+~~~~~~~~~+--------+--------+------+ + | +----------sigle list queue tail
doule list queue
双向链表队列:1. 双向链表队列结构体中记录了first node的地址 head 和 last node的地址 tail
2. 队列空时, head tail 指针等于NULL
3. 最前一个节点first node, 向后遍历blink指针等于NULL
4. 最后一个节点last node, 向前遍历flink指针等于NULL
struct dq_entry_s { FAR struct dq_entry_s *flink; FAR struct dq_entry_s *blink; }; typedef struct dq_entry_s dq_entry_t; struct dq_queue_s { dq_entry_t *head; /* queue head(first) node */ dq_entry_t *tail; /* queue tail(last) node */ }; typedef struct dq_queue_s dq_queue_t; void dq_addfirst(dq_entry_t *node, dq_queue_t *queue); void dq_addlast(dq_entry_t *node, dq_queue_t *queue); void dq_addafter(dq_entry_t *prev, dq_entry_t *node, dq_queue_t *queue); void dq_addbefore(dq_entry_t *next, dq_entry_t *node, dq_queue_t *queue); dq_entry_t *dq_remfirst(dq_queue_t *queue); dq_entry_t *dq_remlast(dq_queue_t *queue); void dq_rem(dq_entry_t *node, dq_queue_t *queue); --> flink <-- blink +----------------------------------------------doule list queue head | + +------+--------+--------+~~~~~~~~~+--------+--------+------+ | | first | | | | last | | | NULL | node | node | ~~~~~~~ | node | node | NULL | | |<--+ |<--+ |<--+ |<--+ |<--+ | | | | +-->| +-->| +-->| +-->| +-->| | +------+--------+--------+~~~~~~~~~+--------+--------+------+ + | +-------doule list queue tail
相关文章推荐
- 基于微信的域名交易系统(数据库表-修订版)
- iOS开发之UINavigationController的使用
- BZOJ 2342 SHOI 2011 双倍回文 Manacher
- java.sql.SQLException: The Network Adapter could not establish the connection
- 变态版本hello world 转
- HDU 2046 骨牌铺方格
- Android中的线程池和AsyncTask异步任务(一)
- 3. PDOStatement 对象
- 双边滤波器的原理及实现
- 角色+武器
- HDU-5661 Claris and XOR (贪心)
- OpenCV基本数据类型
- 求集合{1,2,...,n}的长度小于M(M<=n)的所有子集
- 详细分析罕见的ClassCircularityError异常导致的StackOverflowError
- Kafka源码分析之RecordBatch
- NuttX_初始化流程
- 邁向IT專家成功之路的三十則鐵律 鐵律三:IT人長久之道–站對邊
- 基于微信的域名交易系统(需求文档)
- linux第七周
- 插入排列与绝对值排列