1.数据结构的内部数据结构

双向节点的定义

struct xLIst_ITEM
{TickType xItemValue;               //辅助值,用于节点做顺序排列struct xList_ITEM *pxNect;            // 指向下一个节点struct xList_ITEM *pxFrevious;        //指向上一个节点void *pvOwner;                     // 指向拥有该节点的内核对象void *pvContainer;                   // 指向该节点所在的对象
}typedef struct xLIst_ITEM ListItem_t ;

精简节点结构体定义

struct xMINI_LIst_ITEM
{TickType xItemValue;           //辅助值,用于节点做顺序排列struct xList_ITEM *pxNect;        // 指向下一个节点struct xList_ITEM *pxFrevious;    //指向上一个节点
}typedef struct xMINI_LIst_ITEM MiniListItem_t ;

根节点的数据结构

typedef struct xLIST
{UBaseType_t uxNumberOfItems; /* 链表节点计数器 */ListItem_t *pxIndex;     /* 链表节点索引指针 */MiniListItem xListEnd;        /* 链表最后一个节点 */}List_t;

freeFTOS链表形式

2.List相关函数

1. 链表根节点初始化

void vListInitialise( List_t * const pxList )

2. 链接节点初始化

void vListInitialiseItem( ListItem_t * const pxItem )

3. 节点的插入(按照升序插入)

void vListInsert( List_t * const pxList,ListItem_t * const pxNewListItem )

4. 节点插入尾巴

void vListInsertEnd( List_t * const pxList,ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION;

5.移除节点

UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove )

6. 获取头节点

 listGET_HEAD_ENTRY( pxList )

7. 获取下一个节点

listGET_NEXT( pxListItem )

8. 列表是否为空

listLIST_IS_EMPTY( pxList )

9. 列表元素的数量

 listCURRENT_LIST_LENGTH( pxList )

10 获取列表项所在的链表

listLIST_ITEM_CONTAINER( pxListItem )

11. 判断列表项是否在一个列表类

listIS_CONTAINED_WITHIN( pxList, pxListItem )

3.测试使用List链表

#include "list.h"/*测试使用结构体
*/
typedef struct _TestData
{ListItem_t item;char buf[100];
}TestData_t;void testFreeList(void)
{List_t list;TestData_t data1,data2,data3,data4;vListInitialise(&list);//xItemValue 的值 可以用来排序--升序data1.item.xItemValue =0 ;data2.item.xItemValue =1 ;data3.item.xItemValue =2 ;data4.item.xItemValue =3 ;//数据结构数据data1.buf[0]=1;data2.buf[0]=2;data3.buf[0]=3;data4.buf[0]=4;//数据插入vListInsert(&list,&data1.item);vListInsert(&list,&data2.item);vListInsert(&list,&data3.item);vListInsert(&list,&data4.item);printf("hello\r\n");//数据节点移除uxListRemove(&data2.item);printf("hello\r\n");//数据便利ListItem_t *pitem=listGET_HEAD_ENTRY(&list);uint32_t  i=0;for (;i<list.uxNumberOfItems;i++){//数据节点强制转换为数据结构---尾随数据printf("hello value = %d \r\n",((TestData_t*)(pitem))->buf[0]);pitem = listGET_NEXT(pitem);}printf("hello\r\n");}
int main()
{testFreeList();return 0;
}

12.FreerRTOS学习笔记-链表的使用相关推荐

  1. Python数据结构学习笔记——链表:无序链表和有序链表

    目录 一.链表 二.无序链表 实现步骤分析 三.无序链表的Python实现代码 四.有序链表 实现步骤分析 五.有序链表的Python实现代码 结语 一.链表 链表中每一个元素都由为两部分构成:一是该 ...

  2. 12.6学习笔记 HTML5表单元素/嵌入图片/视频(未完)

    12.6学习笔记 一. HTML 表单元素(下) 二. HTML5嵌入图片与创建分区响应图 三. HTML5嵌入视频 一. HTML 表单元素(下) 主要内容: 用input元素获取有规定格式的字符串 ...

  3. flink1.12.0学习笔记第2篇-流批一体API

    flink1.12.0学习笔记第 2 篇-流批一体API flink1.12.0学习笔记第1篇-部署与入门 flink1.12.0学习笔记第2篇-流批一体API flink1.12.0学习笔记第3篇- ...

  4. flink1.12.0学习笔记第1篇-部署与入门

    flink1.12.0学习笔记第 1 篇-部署与入门 flink1.12.0学习笔记第1篇-部署与入门 flink1.12.0学习笔记第2篇-流批一体API flink1.12.0学习笔记第3篇-高级 ...

  5. c++ 链表_算法学习笔记 - 链表 - 单链表的粗糙实现

    常用的链表有单链表.双链表.循环链表. 概念看得再多,理解得再多,也不一定能够写得出来.所以动动手,多练习才是提升能力的关键. 有朋友留言说道:建议大家在实现之前的思考时间不要太长.一是先用自己能想到 ...

  6. C语言学习笔记—链表(四)链表的删除

    删除节点 链表的节点删除有两种情况 一.删除头节点 将头结点变为第二个节点即可. 二.删除非头节点 将要删除的节点的前一个节点指向到要删除的节点的下一个节点. #include <stdio.h ...

  7. GPIOB->CRH=0XFFFF0FFF;GPIOB->CRH|=(u32)8<<12;(学习笔记)

    看原子哥的IIC.h文件看到这两个语句有点懵,去找了半天资料才懵懵懂懂,下面简单记录一下,以防下次又忘了 就拿这个举例把~,GPIO一组有(0-15)一共16个 前(0-7)是底8位,写成CRL 后( ...

  8. 【软件分析第12讲-学习笔记】可满足性模理论 Satisfiability Modulo Theories

    文章目录 前言 正文 从SAT到SMT SMT历史 z3求解器 SMT求解 命题逻辑.一阶逻辑和二阶逻辑 小结 参考文献 前言 创作开始时间:2022年11月16日16:18:59 如题,学习一下可满 ...

  9. 12.Laravel5学习笔记:使用mongodb开发LBS应用

    做LBS应用有多种方案,这里介绍一下在Laravel5中使用Mongodb来实现,文章参考了: 深入浅出Symfony2 - 结合MongoDB开发LBS应用 环境说明: php集成环境:xampp ...

最新文章

  1. Ansible之八:Playbook循环
  2. 关于计算机视觉(随谈)
  3. xml解析案例:一个简单的学生管理系统
  4. Linux7的ftp日志怎么看,centos7打开sftp操作日志
  5. MySQL查询select语句详解
  6. javaweb(08) jsp(了解)
  7. springboot显示信息并且修改_Spring Boot小结-03--增.删.改.查
  8. VS C++ def
  9. AI头发笔刷_1500款设计字体,海量PS笔刷,icon模板免费送!还为设计发愁吗?
  10. Command Line Tools下载不下来,则可以去官网下载
  11. CnOpenData中国行政区划数据简介
  12. 万能通用!权限系统就该这么设计
  13. 获得资源配置文件的路径
  14. 2023年江苏专转本志愿填报辅导(22上岸南工程学长辅导手册)
  15. 中性粒细胞的免疫应用最新研究进展
  16. 阳光事业必须在阳光下进行
  17. MUI初体验 模仿微信页面
  18. Tensorflow五种花卉分类
  19. android打印 编辑并打印 word
  20. Android DataBinding学习和实践(二)

热门文章

  1. java processrequest_java-如何在camera2 API中使用reprocessCaptureRequest
  2. 模板引擎工作原理_「白皮书解读搜索引擎的工作原理」如何排序
  3. 鸿蒙系统上线 华为内部人员喷了,鸿蒙系统上线?华为人员表示:勿上当 山寨网站...
  4. php音频转换接口,PHP实现chrome表单请求数据转换为接口使用的json数据
  5. java图片写入word中
  6. 线性查找法java代码_Java线性查找和二分查找
  7. python multiprocessing 得到多进程返回的结果
  8. pandas to_sql保存数据到数据库后,添加自增长的主键ID(PRIMARY KEY)
  9. 外虚内实是什么意思_广东潮州“茶”文化浓厚,为什么“工夫茶”常被谬传“功夫茶”?...
  10. m不能被3整除c语言表达式,求mn-之间所有不能被3整除的整数之和求 – 手机爱问...