liteos双向链表(十二)
2024-10-19 00:51:21
1. 概述
1.1 基本概念
双向链表是指含有往前和往后两个方向的链表,即每个结点中除存放下一个节点指针外,还增加一个指向其前一个节点的指针。其头指针head是唯一确定的。
从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点,这种数据结构形式使得双向链表在查找时更加方便,特别是大量数据的遍历。由于双向链表具有对称性,能方便地完成各种插入、删除等操作,但需要注意前后方向的操作。
2. 开发指导
2.1 功能
Huawei LiteOS系统中的双向链表模块为用户提供下面几个接口。
功能分类 | 接口名 | 描述 |
---|---|---|
初始化链表 | LOS_ListInit | 对链表进行初始化 |
增加节点 | LOSListAdd | 将新节点添加到链表中 |
在链表尾端插入节点 | LOS_ListTailInsert | 将节点插入到双向链表尾端 |
删除节点 | LOS_ListDelete | 将指定的节点从链表中删除 |
判断双向链表是否为空 | LOS_ListEmpty | 判断链表是否为空 |
删除节点并初始化链表 | LOS_ListDelInit | 将指定的节点从链表中删除使用该节点初始化链表 |
3. 开发流程
双向链表的典型开发流程:
- 调用LOS_ListInit初始双向链表。
- 调用LOS_ListAdd向链表中增加节点。
- 调用LOS_ListTailInsert向链表尾部插入节点。
- 调用LOS_ListDelete删除指定节点。
- 调用LOS_ListEmpty判断链表是否为空。
- 调用LOS_ListDelInit删除指定节点并以此节点初始化链表。
4. 编程实例
4.1 实例描述
使用双向链表,首先要申请内存,删除节点的时候要注意释放掉内存。
本实例实现如下功能:
- 调用函数进行初始化双向链表。
- 增加节点。
- 删除节点。
- 测试操作是否成功。
4.2 编程实例
代码实现如下:
#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 结果验证
编译运行得到的结果为:
最新文章
- 关于UnsupportedClassVersionError的错误处理
- let命令
- zk系列-zookeeper的使用
- SSD固态硬盘使用注意事项
- 已安装好的tengine编译添加未被安装的模块
- EasyUI的使用步骤
- 【译】Experienced programmers but new to Objective-C(一)
- [DP之树形DP]
- Muduo阅读笔记--base(二)
- python numpy库的基本内容
- 正式表达式判断私有 IP 地址
- redis 指令文档
- 【整理】Java 9新特性总结
- Java并发编程笔记之ArrayBlockingQueue源码分析
- BugPhobia进阶篇章:系统架构技术规格
- springMVC返回json数据时date类型数据被转成long类型
- extjs技术
- ajax 执行代码顺序
- SSH中设置字符编码防止乱码
- SpringBoot+Mybatis+Generator 逆向工程使用(二)