FreeRTOS學習(四) 列表的插入和刪除

2021-09-09 06:37:36 字數 1797 閱讀 1486

宣告及感謝: 跟隨正點原子資料學習, 在此作為學習的記錄和總結

環境 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 記錄了當前列表項時屬於哪個列表的,所以不需要傳入哪個列表引數。

四 列表簡介

3.1 列表是什麼 列表由一系列按特定順序排列的元素組成。在python中,用方括號 來表示列表,並用逗號來分隔其中的元素。bicycles trek cannondale redline specialized print bicycles 將該列表列印出來,python將列印列表的內部表示,包括...

python學習筆記四(列表)

列表 同構 所有的資料是相同 異構 所有的資料型別不同 建立列表 1.建立乙個普通列表 1,2,3 2.建立混合列表 1,2,3,hehe 1,2,3 3.建立空列表 4.利用工廠函式建立 list 建立空列表 list iterable 從可迭代物件的元素中初始化乙個新的列表 可迭代物件 列表的長...

Python基礎(四)列表

乙個列表裡是可以儲存各種資料型別。name jack tom bob 答案是有 computer print id coumpter 輸出結果不為空names jack tom bob print names 0 獲取第乙個元素 print names 1 獲取最後乙個元素 print names ...