liteos雙向鏈表(十二)

1. 概述

1.1 基本概念

雙向鏈表是指含有往前和日後兩個方向的鏈表,即每一個結點中除存放下一個節點指針外,還增長一個指向其前一個節點的指針。其頭指針head是惟一肯定的。node

從雙向鏈表中的任意一個結點開始,均可以很方便地訪問它的前驅結點和後繼結點,這種數據結構形式使得雙向鏈表在查找時更加方便,特別是大量數據的遍歷。因爲雙向鏈表具備對稱性,能方便地完成各類插入、刪除等操做,但須要注意先後方向的操做。編程

2. 開發指導

2.1 功能

Huawei LiteOS系統中的雙向鏈表模塊爲用戶提供下面幾個接口。數據結構

功能分類 接口名 描述
初始化鏈表 LOS_ListInit 對鏈表進行初始化
增長節點 LOSListAdd 將新節點添加到鏈表中
在鏈表尾端插入節點 LOS_ListTailInsert 將節點插入到雙向鏈表尾端
刪除節點 LOS_ListDelete 將指定的節點從鏈表中刪除
判斷雙向鏈表是否爲空 LOS_ListEmpty 判斷鏈表是否爲空
刪除節點並初始化鏈表 LOS_ListDelInit 將指定的節點從鏈表中刪除使用該節點初始化鏈表

3. 開發流程

雙向鏈表的典型開發流程:函數

  1. 調用LOS_ListInit初始雙向鏈表。
  2. 調用LOS_ListAdd向鏈表中增長節點。
  3. 調用LOS_ListTailInsert向鏈表尾部插入節點。
  4. 調用LOS_ListDelete刪除指定節點。
  5. 調用LOS_ListEmpty判斷鏈表是否爲空。
  6. 調用LOS_ListDelInit刪除指定節點並以此節點初始化鏈表。

4. 編程實例

4.1 實例描述

使用雙向鏈表,首先要申請內存,刪除節點的時候要注意釋放掉內存。測試

本實例實現以下功能:指針

  1. 調用函數進行初始化雙向鏈表。
  2. 增長節點。
  3. 刪除節點。
  4. 測試操做是否成功。

4.2 編程實例

代碼實現以下:code

#include "los_list.h"
#include<stdio.h>
VOID list_test(void)
{
 /*初始化,判斷是否爲空*/
 printf("initial......\n");
 LOS_DL_LIST* head;
 head = (LOS_DL_LIST*)malloc(sizeof(LOS_DL_LIST));
 LOS_ListInit(head);
 if (!ListEmpty(head))
 {
 printf("initial failed\n");
 return;
 }
 /*增長一個節點,在尾端插入一個節點*/
 printf("node add and tail add......\n");
 LOS_DL_LIST* node1 = (LOS_DL_LIST*)malloc(sizeof(LOS_DL_LIST));
 LOS_DL_LIST* node2 = (LOS_DL_LIST*)malloc(sizeof(LOS_DL_LIST));
 LOS_DL_LIST* tail = (LOS_DL_LIST*)malloc(sizeof(LOS_DL_LIST));
 LOS_ListAdd(node1,head);
 LOS_ListAdd(node2,node1);
 if((node1->pstPrev == head) || (node2->pstPrev == node1)){
 printf("add node success\n");
 }
 LOS_ListTailInsert(tail,head);
 if(tail->pstPrev == node2){
 printf("add tail success\n");
}
 /*刪除雙向鏈表節點*/
 printf("delete node......\n");
 LOS_ListDelete(node1);
 free(node1);
 if(head->pstNext == node2){
 printf("delete node success\n");
 }
}

4.3 結果驗證

編譯運行獲得的結果爲:
blog

相關文章
相關標籤/搜索