FreeRTOS源码解析(双向链表)

2.1什么是双向链表

双向链表(Doubly Linked List) 是一种特殊的链表结构。每个节点除了存放数据外,还包含两个指针:

  • prev → 指向前一个节点
  • next → 指向后一个节点

因此,双向链表既可以 从前往后遍历,也可以 从后往前遍历

HeadNode
   ↓
┌───────────┐     ┌───────────┐     ┌───────────┐     ┌──────┐
│ data:  0  │ ⇄   │ data: 10  │ ⇄   │ data: 20  │ ⇄   │ NULL │
│ prev: -   │     │ prev: *   │     │ prev: *   │     └──────┘
│ next: *   │     │ next: *   │     │ next: *   │
└───────────┘     └───────────┘     └───────────┘

双向链表的节点需要保存:

  • 数据域:存放数据
  • 前驱指针:指向前一个节点
  • 后继指针:指向下一个节点

双向链表结构:

typedef struct dnode
{
    int data;                // 节点存放的数据
    struct dnode* prev;      // 指向前一个节点
    struct dnode* next;      // 指向后一个节点
} DNode;

2.2双向链表的添加

1.创建新节点

  • 申请内存 malloc,填充数据域 data
  • 新节点的 next 初始化为 NULL(因为它将成为新的尾节点)。

2.找到当前尾节点

  • 从头结点开始,沿着 next 指针一直遍历,直到找到 next == NULL 的节点,这个就是当前尾节点。

3.修改指针完成插入

  • 让当前尾节点的 next 指向新节点。
  • 让新节点的 prev 指向当前尾节点。

4.结束

  • 新节点已经挂在链表尾部,链表结构完整。
  • 如果有返回值,通常返回 0 表示成功,-1 表示失败(如内存分配失败)。
HeadNode
   ↓
┌───────────┐     ┌───────────┐     ┌───────────┐     ┌───────────┐     ┌──────┐
│ data: 0   │ ⇄   │ data: 10  │ ⇄   │ data: 20  │ ⇄   │ data: 30  │ ⇄   │ NULL │
│ prev: -   │     │ prev: *   │     │ prev: *   │     │ prev: *   │
│ next: *   │     │ next: *   │     │ next: *   │     │ next: NULL│
└───────────┘     └───────────┘     └───────────┘     └───────────┘

代码:

int Add(DNode* ListHead, int data)
{
    // 1. 申请新节点
    DNode* PNode = (DNode*)malloc(sizeof(DNode));
    if (PNode == NULL)
    {
        return -1; // 内存申请失败
    }
    PNode->data = data;
    PNode->next = NULL;

    // 2. 找到链表尾
    DNode* PTemp

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论

相关推荐

若要设计一个以解谜为核心的游戏关卡,思路和流程是怎样的?对于当前热门游戏关卡的创新设计方向,你有什么观察和思考?讲述你怎样运用数据分析来优化游戏关卡设计的具体事例。当面临多个游戏关卡同时设计且时间紧迫时,你如何安排工作?你认为一个成功的游戏关卡应具备哪些吸引玩家反复挑战的元素?若要为一款休闲竞技游戏设计新关卡,有哪些独特考虑点?谈谈在游戏关卡设计中,如何巧妙融入剧情以增强沉浸感?假设团队对关卡主题有不同想法,你怎样达成统一设计方向?有没有参与过校园游戏设计比赛,在关卡设计环节收获了什么?如何确保你设计的游戏关卡能兼容不同操作习惯的玩家?举例说明你如何利用场景元素提升游戏关卡的策略性?对于网易雷火注重的游戏品质把控,在关卡设计上如何落实?讲述你在设计游戏关卡时,如何平衡趣味性与挑战性?若要对一款现有游戏的老关卡进行翻新,步骤和要点是什么?谈谈你对游戏关卡中资源分布合理性的理解与设计思路当关卡设计需要融入特定文化元素,你会怎样进行调研和运用?有没有在实践中尝试过打破传统关卡设计模式,效果如何?怎样通过关卡设计让新玩家快速感受到游戏的独特魅力?假设要设计一个跨平台游戏关卡,需要注意哪些方面?对于游戏关卡设计中的用户反馈收集与处理,你有什么想法?
查看20道真题和解析
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务