FreeRTOS链表

本文介绍了链表的基本概念,强调了其动态存储分配和灵活的数据结构特性。然后,文章转向FreeRTOS中的链表操作,描述了如何在FreeRTOS环境中设置链表,包括在list.c和list.h文件中定义结构体,并预告了后续章节将讨论链表的删除和插入功能。
摘要由CSDN通过智能技术生成

#1.链表的定义
链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用。链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点。链表都有一个头指针,一般以head来表示,存放的是一个地址。链表中的节点分为两类,头结点和一般节点,头结点是没有数据域的。链表中每个节点都分为两部分,一个数据域,一个是指针域。说到这里你应该就明白了,链表就如同车链子一样,head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。

作为有强大功能的链表,对他的操作当然有许多,比如:链表的创建,修改,删除,插入,输出,排序,反序,清空链表的元素,求链表的长度等等。

初学链表,一般从单向链表开始

--->NULL
head

这是一个空链表。

 ---->[p1]---->[p2]...---->[pn]---->[NULL]
head   p1->next  p2->next   pn->next

有n个节点的链表。

创建链表

typedef struct student{
   
	int score;
	struct student *next;
} LinkList;

一般创建链表我们都用typedef struct,因为这样定义结构体变量时,我们就可以直接可以用LinkList *a;定义结构体类型变量了。

初始化一个链表,n为链表节点个数。

LinkList *creat(int n){
   
	LinkList *head, *node, *end;//定义头节点,普通节点,尾部节点;
	head = (LinkList*)malloc(sizeof(LinkList));//分配地址
	end = head;         //若是空链表则头尾节点一样
	for (int i = 0; i < n; i++) {
   
		node = (LinkList*)malloc(sizeof(LinkList));
		scanf("%d", &node->score);
		end->next = node;
		end = node;
	}
	end->next = NULL;//结束创建
	return head;

#2.FreeRTOS链表操作
首先把我原来发过的FreeRTOS工程建立模板拷贝一份,改名为FreeRTOS-list,将FreeRTOS源码移植进FreeRTOS-list\FreeRTOS\include 路径下。
在这里插入图片描述
其次依次添加到工程中,并添加路径。同时创建两个文件分别是list.c保存在FreeRTOS-list\USER\portable路径下和list.h保存在FreeRTOS-list\USER\include路径下。(添加路径)
在这里插入图片描述
在这里前期工作我们已经准备好,接下来就要在list.c和list.h中编写程序代码了。首先我们要建立一个链表,我们要在list.h中定义一个结构体。这里一定要引用#include “FreeRTOS.h”,不然会报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值