链表 List.h

FreeRTOS链表源码list.c/list.h深度解析:实时调度的底层骨架 双向循环链表是嵌入式实时操作系统的核心数据结构,其设计直接影响任务调度、同步原语和中断响应的确定性。FreeRTOS通过精简的List_t容器与ListItem_t节点,以xItemValue实现优先级/延时排序,pvOwner支持任务反查,pvContainer保障操作归属安全,从而在资源受限MCU上达成微秒级任务切换。这种轻量级链表机制支撑了队列、信号量、事件组等所有同步功能,也是理解freertos spi乱码、freertos can通信异常及任务切换时机等高频问题的根本入口。掌握list.c中vL 阅读详情
///////////////////////////
//    //
//   链表     List.h           //
//    //
//////////////////////////


#include"list.h"
#include<iostream.h>
#include<stdlib.h>


template<class type>
void initlist(type &tmp)
{
  list<type> List;
  int n;

  while(true)
  {

  cout<<"请选择你要对链表进行的操作 "<<endl
  <<"1) 在末尾插入数据"<<endl
   <<"2) 在任意处插入数据"<<endl
  <<"3) 删除数据项"<<endl
  <<"4) 删除整个链表"<<endl
  <<"5) 打印链表"<<endl
  <<"6) 查找数据项"<<endl
  <<"7) 退出"<<endl;

  cout<<">/ ";
  cin>>n;

  while(n<1||n>7)
  {
cout<<"输入有误,请从新输入!"<<endl;
   cout<<">/ ";
   cin>>n;
}

switch(n)
{
case 1: list_insertend(List);break;
case 2: list_insert(List);break;
case 3: list_delnode(List);break;
case 4: list_makeempty(List);break;
case 5: list_print(List);break;
case 6: list_find(List);break;
case 7: return ;break;
}

  }

}

void LIST()
{
int n;
  cout<<"请选择你要构造的链表的数据类型 1)整型,2)字符型,3)浮点型"<<endl;   
cout<<">/ ";
cin>>n;

  while(n<1||n>3)
  {
cout<<"输入有误,请从新输入!"<<endl;
   cout<<">/ ";
   cin>>n;
}

char t_c='c';
int t_i=12;
double t_f=23.3;

switch(n)
{
case 1:initlist(t_i);break;
case 2:initlist(t_c);break;
case 3:initlist(t_f);break;
}
}

template<class type>
void list_insertend(list<type> &L)
{
type t;
cout<<"请输入插入数据: >/";
cin>>t;
L.insertend(t);
}

template<class type>
void list_find(list<type> &L)
{
type T;
cout<<"请输入你要查找的数据项:>/ ";
cin>>T;

int i;
if(!(i=L.find(T)))
cout<<"你要查找的数据项不存在!"<<endl;
else
cout<<"你要查找的数据项在第"<<i<<"个位置"<<endl;
}

template<class type>
void list_insert(list<type> &L)
{

type t;
cout<<"请输入插入数据: >/";
cin>>t;

int n;
cout<<"请输入插入位置: >/";
cin>>n;
if(L.insert(t,n))
cout<<"插入成功! 在"<<n<<"位置 插入"<<t<<endl;
else
cout<<"插入失败! 插入位置不正确!"<<endl;

}

template<class type>
void list_delnode(list<type>& L)
{
int i;
  cout<<"请输入要删除数据项的位置: >/";
cin>>i;


while(i<1||i>L.getlen())
{
    cout<<"输入有误,可能大与链表长度,请从新输入!"<<endl;
    cout<<">/ ";
  cin>>i;
}

L.delnode(i);
}
template<class type>
void list_makeempty(list<type> &L)
{
L.makeempty();
}

template<class type>
void list_print(list<type> &L)
{
if(!L.print())
cout<<"链表为空!"<<endl;
}
【Linux高级编译】Linux内核的list.h的高效应用----单向链表和双向链表的实现 Linux内核中,有个非常经典的链表实现,你了解过它的实现吗? 阅读详情

相关推荐

Linux内核链表管理详解:list.h深入分析

list_headlist_entry宏是Linux内核中用于将链表节点(list_head结构)转换为其所属的数据结构实例的宏。在Linux内核中,链表节点通常被嵌入到其他数据结构中,以实现对这些数据结构的链表操作。list_entry宏提供了一种安全且便捷的方式来根据链表节点找到它所对应的完整数据结构的指针。宏的定义通常如下:在这里,ptr是一个指向list_head结构的指针,type是包含list_head的结构体类型,member是该结构体中。

weixin_29496633的博客 826

list(链表)——STL

List有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector是不成立的。链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。结点的组成一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。由于链表的存储方式并不是连续的内存空间,因此链表。将容器中的元素反转,以及将容器中的数据进行排序。//返回最后一个元素。对list容器进行数据的插入和删除。返回第一个元素—front。返回最后一个元素—back。...

mankeywang的博客 1985

GD32F103入门实践(一)配置环境,搭建工程模板,烧写程序

写在前面 本系列博客是我初学GD32F103的操作实录,我个人是个小白,在学习过程中真的也遇到了不少坑,因此我希望能记录下来,帮助到同样踩坑的你。 我的芯片是GD32F103ZE,软件是Keil,烧写用的是JLink。 材料准备 首先我在兆易创新官网(兆易创新),下载相关的文件。点击资料下载,在搜索框里输入“GD32F10”可以得到相关的资料,其他芯片类似。比较重要的是GD32F10x AddOn和GD32F10x Firmware Library(固件库),这两个必须下载。 下载Keil MDK5,这

qq_41208487的博客 3万+

Linux 中list.h使用实例和坑

​ list.h是Linux内核中,为了提供统一的链表操作,减少结构体的额外开支提供的链表操作。list.h中定义的链表了一个双向循环链表,和一个哈希表。内含实际例子 ​

monkeyzh123的专栏 3244

python123题目——判断火车票座位B(异常)

类型:流程控制。

m0_62488776的博客 3569

VBA一键汇总多个工作簿-名称相同的工作表-的指定区域数据

VBA一键汇总多个工作簿-名称相同的工作表-的指定区域数据 日常工作,我们经常需要汇总相同格式的工作簿的某个工作表的数据 如1月业绩、2月业绩。。。。12月业绩等 姓名 数量 数据22 22 数据23 23 数据24 24 数据25 25 数据26 26 数据27 27 数据28 28 数据29 29 数据30 30 数据31 31 数据32 32 数据33 33 数据34

陈表达的博客 5981

FreeRTOS —— 关于 list.c 与 list.h 中部分内容详解

迷你列表项就是精简的列表项,对应的结构体成员与前一个列表项结构体一样。为什么要进行 ( ListItem_t * ) ,因为根节点。,所以需要强制类型转换。

T541132的博客 490

OTFS 消息传递算法信号检测【附matlab代码详解】

OTFS 消息传递算法方面的一些浅浅理解。

Cuby的博客 4008

List--链表

与之前的vector不一样,List的存储是随机存储,不是一段的连续的空间,既然不是一段连续的空间,那就不能使用下标进行访问。在C++中可以直接使用list容器:列表是序列容器,允许对序列中任意位置的恒定时间插入和擦除作,以及双向迭代。

2402_82903443的博客 1800

AutoClip AI视频剪辑工具:Docker一键部署指南

摘要:AutoClip是一个基于Docker容器化部署的智能视频剪辑系统,采用微服务架构设计,包含Web界面、后端API、异步任务处理和Redis缓存等组件。系统支持一键快速部署,提供完整的监控和日志功能,最低要求4GB内存和10GB存储空间。部署过程仅需三个步骤:克隆代码、配置环境变量、启动容器服务。生产环境支持性能调优、数据持久化和网络安全管理。该系统解决了环境配置难题,实现"一次配置,到处运行"的目标,适合需要自动化视频处理的用户。

wjianwei666的专栏 999

[Unity开发] [PICO]避坑指南:PICO商店上传APP时PXR Platform APPID设定详解

PICO开发者上传Unity应用时常见的"APPID不符"问题,主要源于混淆了开发者后台两个不同位置的APPID。

每日出拳老爷子的博客 554

list链表

list链表常见操作

m0_60492395的博客 611

乐企增值税及附加税费预缴申报表填报能力说明文档V1.004

申报表填报,是指企业在自有业务系统中将算税结果数据按预填规则要求加工汇总后,进行申报表填报的过程。申报表填报前对纳税申报所需的前提条件进行校验。校验通过后,应用前序算税结果数据及预填规则进行纳税申报表预填,生成申报表数据。申报表数据通过申报业务规则校验后,经纳税人确认即完成申报表填报业务。

记录点滴 354

list.h链表练习

基于list.h写了一段小程序,果然短小精悍,以后链表就直接用它了。通常使用struct list_head ,应该是将其作为自定义结构体中的一部分。   有几个比较难理解的宏: INIT_LIST_HEAD();声明一个链表头; list_for_each (..) 遍历组成list_head链表的每个元素; list_entry(...) 通过结构体某一个成员的指针,推算出整个结构体

技术无捷径,一步一脚印 756

手把手教你学simulink(13.2)--构建一个单相并网逆变器Simulink仿真模型

基于Simulink的单相并网逆变器项目的详细仿真实例。这个项目将重点放在逆变器的详细建模、最大功率点跟踪(MPPT)控制策略、并网控制和仿真分析上。我们将使用MATLAB/Simulink来构建整个系统,并通过具体的代码和模块来实现各个功能。

MHD0815的博客 545

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

可复用链表list.h

这种用法惊艳到我了!!! 传统的教科书式的链表有个非常大的缺点: 一句话讲就是 复用性差 每种类型的链表我们都需要编写不同的函数去实现增删改查等基本操作 不仅效率低, 而且还容易出错 而 linux内核 的 list.h 就是为了解决这一痛点而诞生的 我们只需要添加基本的成员, 然后对 list.h 中的函数简单封装一下, 就能够实现想要的功能了 须知 我们使用的 list 是一种特殊双向环形链表, 双向环形链表 大家可能比较好理解, 那么特...

iot小胡的博客 1112

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Linux 内核链表 list.h 的使用

Linux 内核链表 list.h 的使用 C 语言本身并不自带集合(Collection)工具,当我们需要把结构体(struct)实例串联起来时,就需要在结构体内声明指向下一实例的指针,构成所谓的“链表”。而为了实现对链表的操作,我们需要另外实现一系列的函数,例如添加、删除、搜索、复制等等。而利用 Kernel 源代码中自带的 list.h,则可以方便地实现任意类型结构体的串联。 编程需求 假设...

weixin_34413065的博客 678

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

内核链表list.h文件剖析

内核链表list.h文件剖析 一、内核链表的结构【双向循环链表】     内核链表的好主要体现为两点,1是可扩展性,2是封装。可以将内核链表复用到用户态编程中,以后在用户态下编程就不需要写一些关于链表的代码了,直接将内核中list.h中的代码拷贝过来用。 struct list_head { struct list_head *next, *prev; }; // 包含了两个指向list

血染风采2019 1566

20150203 【 内核链表 kernel_list.h 】 list_head 使用

内核链表模板【全部在头文件实现,我是第一次看到这种形式】 #ifndef __DLIST_H #define __DLIST_H /* This file is from Linux Kernel (include/linux/list.h) * and modified by simply removing hardware prefetching of list items

描绘自己的王国…… 888

list.h链表分析

。

欢迎来到饭没了吃的博客 342

数据结构-链表list.h 使用操作

读者可自己画个读,就不难发现 list_add_tail 宏所实现的是一个类头插法,它是将节点插入在头节点的前面,但是头节点的位置不会变,也就是以我们一开始定义的头节点为头,新来的节点始终插入在这个头节点的前面,所以可以看到__list_add 中的操作就是将新节点插入在头节点和头节点前面元素之间。在对链表进行操作之前,首先我们需要为链表指定好链表头,以方便管理,后面的操作接口中的参数很多也是要和这个链表头有关联,在操作之前,要先定义一个。是返回头节点下一个节点的节点地址,因为头节点就是一个。

jiu_yue_ya的博客 642

09 简化Linux链表list.h

linux链表list.h

qq582880551的博客 224

Linux内核中的通用链表list.h在windows下的移植实现

在windows的通用开发平台上,有MFC或者STL的支持,很少自己去编写一个链表list程序。现在把Linux下的list.h取出来,在Windows平台上实现: 我这里用的是Linux2.4版本的,2.6版本的其实都一样,下面是修改后的list.h源文件,注意几点:① 注释掉了和Linux相关的字眼,如第三行等等,添加了prefetch(w)两个函数的实现;② 因为是在C语言下实现(

dijkstar的专栏 5688

内核双向链表list.h中的list_entry

内核双向链表list.h中的list_entry定义: #define list_entry(ptr, type, member)      container_of(ptr, type, member) 程序注释为: /**  * list_entry - get the struct for this entry  * @ptr:    the &struct list_head p

张亮校的专栏 730

缓存更新策略全解析:从Cache Aside到延迟双删与版本控制

在高并发系统设计中,缓存与数据库的一致性问题是后端开发的经典难题。理解缓存更新的基本原理,是保障数据准确性的前提。从最基础的缓存读写模式出发,介绍Cache Aside、Read Through、Write Through等主流方案,剖析顺序错位导致的数据不一致根源。为应对极端并发场景,延迟双删和版本控制提供了可靠的兜底机制,结合重试队列与Binlog订阅,可构建完备的更新链路。同时,缓存穿透、击穿、雪崩等常见故障与更新策略密切相关,掌握其联动关系有助于设计高可用架构。本文还梳理了服务器环境(如Ubuntu

weixin_33965305的博客 285
上一篇: 图功能函数 Graph.h
下一篇: 排序算法功能函数 Compositor.cpp
oosky2004
博客等级 码龄22年 3粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值