FreeRTOS学习(四) 列表的插入和删除

声明及感谢: 跟随正点原子资料学习, 在此作为学习的记录和总结
环境 keil , stm32f103

首先定义列表,以及列表项;
List_t TestList; // 列表
ListItem_t ListItem1; // 列表项1
ListItem_t ListItem2; // 列表项2
ListItem_t ListItem3; // 列表项3

第一步: 初始化列表和列表项

	// 初始化列表和列表项
	vListInitialise(&TestList);
	vListInitialiseItem(&ListItem1);
	vListInitialiseItem(&ListItem2);
	vListInitialiseItem(&ListItem3);

第二步:给列表项值赋值

	ListItem1.xItemValue=40;			
	ListItem2.xItemValue=60;			
	ListItem3.xItemValue=50;			

第三步: 插入列表项
插入的第一种方法

vListInsert(&TestList,&ListItem1);		
vListInsert(&TestList,&ListItem2);
vListInsert(&TestList,&ListItem3);

到此,TestList列表会有三个列表项
其中使用vListInsert插入列表项的顺序和插入的先后无关,而与列表项的值有关,
因为 ListItem2.xItemValue 的值大于 ListItem3.xItemValue 的值,所以就算代码中ListItem2先插入,但是ListItem3在ListItem2的前面

插入的第二种方法

vListInsertEnd(&TestList,&ListItem2);

vListInsertEnd 此函数为尾插入方式,但是和字面上的尾插入还有很大的不同vListInsertEnd 插入列表项的位置
和列表中的pxIndex成员变量有关,
一开始pxIndex 指向的时列表的列表头,也就是说指向的是TestList本身,所以在默认情况下vListInsertEnd插入会插入到
TestList的前面,有因为这个是环形链表,就相当于插入到末尾位置。
但是如果改变的pxIndex指向的位置,就会插入新的pxIndex指向位置的前面。
类似。

vListInsert(&TestList,&ListItem1);	 
// 在此后面改变了pxIndex指向位置
TestList.pxIndex=TestList.pxIndex->pxNext; // 相当于pxIndex 指向了ListItem1 
// 此时进行尾插入,
vListInsertEnd(&TestList,&ListItem2); 

那么就相当于在TestList 和 ListItem1 中间插入
那么整个链表就是TestList 先指向 ListItem2 , 然后ListItem2 指向 ListItem1

链表的删除
uxListRemove(&ListItem2);

直接调用uxListRemove 的API函数即可

为什么删除不需要传入,是哪个列表的参数呢?
因为
列表项中的有一个参数成员pvContainer 记录了当前列表项时属于哪个列表的,所以不需要传入哪个列表参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值