zoukankan      html  css  js  c++  java
  • liteos双向链表(十二)

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

    代码实现如下:

    #include "los_list.h"
    #include<stdio.h>
    VOID list_test(void)
    {
     /*初始化,判断是否为空*/
     printf("initial......
    ");
     LOS_DL_LIST* head;
     head = (LOS_DL_LIST*)malloc(sizeof(LOS_DL_LIST));
     LOS_ListInit(head);
     if (!ListEmpty(head))
     {
     printf("initial failed
    ");
     return;
     }
     /*增加一个节点,在尾端插入一个节点*/
     printf("node add and tail add......
    ");
     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
    ");
     }
     LOS_ListTailInsert(tail,head);
     if(tail->pstPrev == node2){
     printf("add tail success
    ");
    }
     /*删除双向链表节点*/
     printf("delete node......
    ");
     LOS_ListDelete(node1);
     free(node1);
     if(head->pstNext == node2){
     printf("delete node success
    ");
     }
    }
    

    4.3 结果验证

    编译运行得到的结果为:

  • 相关阅读:
    P3740 [HAOI2014]贴海报 离散化+线段树
    离散化线段树
    manacher算法
    模板 ac自动机
    "美登杯" E、小花梨的数组* 线段树
    移动端测试
    移动端测试
    空气质量数据爬取-checkpoint.ipynb
    中国空气质量在线监测平台加密数据爬取
    移动端测试
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/10990491.html
Copyright © 2011-2022 走看看