C 里面如何使用链表 list

1. 学生时代, 那会学习 C 数据结构, 比较简单

复制代码
struct person {
    int id;
    char name[64+1];
    struct person * next;
};

类似上面这样, 需要什么依赖 next 指针来回调整, 然后手工 print F5 去 debug 熬.

2. 刚工作青年时代, 主要花活, 随大流类似

复制代码
#pragma once

#include "struct.h"

//
// list.h 似魔鬼的步伐, 单链表库
// $LIST 需要嵌入 struct 的第一行
// void * list = nullptr;      // create list
// list_delete(list, fide);    // delete list [可选]
//
struct $list {
    struct $list * next;
};

#define $LIST struct $list $node;

或者类似

复制代码
/**
 * struct list_node - an entry in a doubly-linked list
 * @next: next entry (self if empty)
 * @prev: previous entry (self if empty)
 *
 * This is used as an entry in a linked list.
 * Example:
 *    struct child {
 *        const char *name;
 *        // Linked list of all us children.
 *        struct list_node list;
 *    };
 */
struct list_node
{
    struct list_node *next, *prev;
};

/**
 * struct list_head - the head of a doubly-linked list
 * @h: the list_head (containing next and prev pointers)
 *
 * This is used as the head of a linked list.
 * Example:
 *    struct parent {
 *        const char *name;
 *        struct list_head children;
 *        unsigned int num_children;
 *    };
 */
struct list_head
{
    struct list_node n;
};

杂技, 理解的心智负担稍微高一点, 但使用上对方有了单元测试, 比较成熟, list 结构问题较少, 除了业务的内存错位自己 debug 稍微麻烦点.

3. 35岁中年之后

复制代码
struct write_buffer {
    struct write_buffer * next;
    const void * buffer;
    char * ptr;
    size_t sz;
    bool userobject;
};

struct write_buffer_udp {
    struct write_buffer buffer;
    uint8_t udp_address[UDP_ADDRESS_SIZE];
};

struct wb_list {
    struct write_buffer * head;
    struct write_buffer * tail;
};

需要 list , 还是直接 next 指针来回调整.

相关推荐
计算机安禾2 小时前
【数据结构与算法】第29篇:红黑树原理与C语言模拟
c语言·开发语言·数据结构·c++·算法·visual studio
AbandonForce2 小时前
C++ STL list容器模拟实现
开发语言·c++·list
来鸟 鸣间2 小时前
mutex_lock 流程
linux·c语言
Tanecious.2 小时前
蓝桥杯备赛:Day7- U535982 C-小梦的AB交换
c语言·c++·蓝桥杯
OOJO9 小时前
c++---list介绍
c语言·开发语言·数据结构·c++·算法·list
派大星~课堂11 小时前
【力扣-142. 环形链表2 ✨】Python笔记
python·leetcode·链表
笨笨饿11 小时前
29_Z变换在工程中的实际意义
c语言·开发语言·人工智能·单片机·mcu·算法·机器人
艾为电子11 小时前
【技术帖】让接口不再短命:艾为 C-Shielding™ Type-C智能水汽防护技术解析
c语言·开发语言
笨笨饿14 小时前
30_泰勒级数
c语言·stm32·嵌入式硬件·线性代数·机器学习·自动化·概率论