前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >liteos双向链表(十二)

liteos双向链表(十二)

作者头像
233333
发布2019-06-19 18:37:38
5520
发布2019-06-19 18:37:38
举报

1. 概述

1.1 基本概念

双向链表是指含有往前和往后两个方向的链表,即每个结点中除存放下一个节点指针外,还增加一个指向其前一个节点的指针。其头指针head是唯一确定的。

从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点,这种数据结构形式使得双向链表在查找时更加方便,特别是大量数据的遍历。由于双向链表具有对称性,能方便地完成各种插入、删除等操作,但需要注意前后方向的操作。

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 编程实例

代码实现如下:

代码语言:javascript
复制
#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 结果验证

编译运行得到的结果为:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 概述
    • 1.1 基本概念
    • 2. 开发指导
      • 2.1 功能
      • 3. 开发流程
      • 4. 编程实例
        • 4.1 实例描述
          • 4.2 编程实例
            • 4.3 结果验证
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档