【FreeRTOS学习】第2章 数据结构、列表与列表项

1. C语言链表简介

链表作为C语言中一种基础的数据结构,在操作系统里面使用的非常多。

1.1 单链表

单链表:节点本身必须包含一个节点指针,用于指向后一个节点,除了这个节点指针是必须有的之外,节点本身还可以携带一些私有信息。
在这里插入图片描述

struct node
{
	struct node *next       //指向链表的下一个节点
    char datal;				//单个的数据
    unsigned char array[];	//数组
    unsigned long *prt		//指针数据
    struct userstruct data2;//自定义结构体类型数据
}
struct node		//节点定义
{
    struct node *next;
}
struct userstruct
{
    /* 在结构体中,内嵌一个节点指针,通过这个节点将数据挂接到链表 */
    struct node *next;
    /* 各种要存储的数据 */
}

在这里插入图片描述
通常一条链表我们会人为地规定一个根节点
在这里插入图片描述

1.2 双向链表

双向链表:节点中有两个节点指针,分别指向前后两个节点
在这里插入图片描述
与数组对比
在这里插入图片描述

2. FreeRTOS中链表的实现

2.1 实现链表节点

FreeRTOS中与链表相关的操作均在list.h和list.c这两个文件中实现

struct xLIST_ITEM
{
    TickType_t xItemValue;			//辅助值,用于帮助节点做顺序排列
    struct xLIST_ITEM * pxNext; 	//指向链表下一个节点
    struct xLIST_ITEM * pxPrevious; //指向链表前一个节点
    void * pvOwner;					//指向拥有该节点的内核对象,通常是TCB
    void * pvContainer;				//指向该节点所在的链表
};
typedef struct xLIST_ITEM ListItem_t; //节点数据类型重定义

2.2 链表节点初始化

链表节点初始化函数在list.c中实现。
在这里插入图片描述

2.3 定义链表根节点数据结构

链表根节点的数据结构在list.h中定义。
在这里插入图片描述
链表根节点的初始化在list.c中实现:
vListInitialise()。
在这里插入图片描述

2.3 将节点插入到链表的尾部

将节点插入到链表的尾部在list.c中实现,
函数:vListInsertEnd()。
在这里插入图片描述

2.4 将节点按照升序排列插入到链表

将节点按照升序排列插入到链表在list.c中实现,
函数:vListInsert()。
在这里插入图片描述

2.5 将节点从链表删除

将节点从链表删除在list.c中实现,
函数:uxListRemove()。
在这里插入图片描述

3. 实验

3.1 链表节点插入实验

新建一个根节点和三个普通节点,然后将这三个普通节点按照节点的
排序辅助值做升序排列插入到链表中。
理论情况如下:
在这里插入图片描述

3.2 仿真情况

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值