首页 > 系统相关 >Linux-----单链表

Linux-----单链表

时间:2023-09-28 20:33:38浏览次数:52  
标签:Node current 单链 struct list next 链表 ----- Linux

Linux中实现链表

//定义链表节点结构体
struct Node{
  int data;//数据区
  struct Node* next;//指向下一个地址域
};
//初始化链表为空格
struct Node* head = NULL;
//插入元素到链表的末尾
void insert(int data){
sturct Node* newNode =(struct Node*)malloc(sizeof(struct Node));//根据链表节点结构体的大小分配堆空间,用来存放新的节点
newNode->data = data;
newNode->next = NULL;
if(head==NULL){
 head = newNode;//头结点
}else{
 struct Node* current = head;// 头结点指向第一个现有系欸但
 while(current->next!=NULL){
    current = current->next;
    }
  }
  current->next = newNode;
}
void printList(){
  struct Node* current = head;
  printf("Linked List");
  while(current!=NULL){
  printf("%d ->",current->data);
  current = current->next;
  }
printf("NULL\n");
}
int main(){
  insert(1);
  insert(2);
  insert(3);
 // 打印链表
    printList();

    // 释放链表内存
    struct Node* current = head;
    while (current != NULL) {
        struct Node* next = current->next;
        free(current);
        current = next;
    }

    return 0
}

内核中的链表

#include <linux/module.h> //包含了 Linux 内核模块开发所需的头文件
#include <linux/list.h> //包含了链表操作所需的头文件
#include <linux/kernel.h>//包含了内核开发所需的通用函数和宏。
#include <linux/slab.h>//包含了内存分配和释放相关的函数和宏

MODULE_LICENSE("GPL");

struct student {
    int id; //学号
    char name[20];//姓名
    struct list_head list;//用于将学生对象链接到链表中。
};

LIST_HEAD(student_list);//创建一个名为 student_list 的链表头,这是一个宏,实际上展开为一个包含链表头的结构体。
//定义内核模块的初始化函数,__init 表示这是一个在模块加载时执行的函数。
static int __init mymodule_init(void) {
    struct student *s;//声明一个指向学生结构体的指针

    // 添加元素到链表
    s = kmalloc(sizeof(struct student), GFP_KERNEL);//使用 kmalloc 函数分配内核内存以存储学生结构体,如果分配失败,会打印一条错误消息并返回 -ENOMEM  GFP_KERNEL 意味着内核可以在需要时等待内存分配成功。如果在当前没有足够的内存可用时,内核可能会通过等待来尝试获取内存,这可能导致当前进程被挂起(阻塞)直到内存可用
    if (!s) {
        printk(KERN_ALERT "Failed to allocate memory\n");
        return -ENOMEM;
    }
    s->id = 1;
    strcpy(s->name, "Alice");
    list_add(&s->list, &student_list);

    // 遍历链表并打印元素
    list_for_each_entry(s, &student_list, list) {
        printk(KERN_INFO "ID: %d, Name: %s\n", s->id, s->name);
    }

    return 0;
}

static void __exit mymodule_exit(void) {
    struct student *s, *tmp;

    // 释放链表中的内存
    list_for_each_entry_safe(s, tmp, &student_list, list) {
        list_del(&s->list);
        kfree(s);
    }
}

module_init(mymodule_init);
module_exit(mymodule_exit);

内核模块的入口点是** module_init** 宏指定的初始化函数,而不是传统的 main 函数。

标签:Node,current,单链,struct,list,next,链表,-----,Linux
From: https://www.cnblogs.com/doubleconquer/p/17736445.html

相关文章

  • 无涯教程-JavaScript - CONCATENATE函数
    描述CONCATENATE函数将两个或多个文本字符串连接为一个字符串。在Excel2016中,CONCATENATE函数已被CONCAT函数替换。CONCATENATE函数仍可用于向后兼容。语法CONCATENATE(text1,[text2]...)争论Argument描述Required/Optionaltext1Thefirstitemtojoin.Theit......
  • 如何更新ubuntu18.04->20.04->22.04
    https://www.lsjlt.com/news/375465.html#usethiscommandtoupdatethesystemversionfrom18.04to20.04#justfollowthetutorial,andclick'yes'and'keepversion'etc..#thefirstselectionthesystemautopresents#ittakes1h......
  • 2023-2024-1 20231302 《计算机基础与程序设计》第一周学习总结
    作业信息这个作业属于计算机基础与程序设计https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/作业要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01作业目标快速浏览一遍教材计算机科学概论,课本每章提出至少一个自己不懂的或最想解决的问题并在期......
  • Kali Linux 2023.3 修改系统语言
    dpkg-reconfigurelocales找到 en_US.UTF-8UTF-8 改为不勾选使用空格勾选[]zh-CN.UTF-8.UTF-8按下enter 表示ok,选择语言zh_CN.UTF-8重启生效设置,重启后会有个提示,选择更新名称......
  • 学期2023-2024-1 学号20231309 《计算机基础与程序设计》第一周学习总结
    学期2023-2024-1学号20231309《计算机基础与程序设计》第一周学习总结作业信息这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业要求在哪里2023-202341计算机基础与程序设计第一周作业这个作业的目标作业正文学期2023-2024-1学号20231309《......
  • 【Vue】全系列Vue教程-数据监视
    hello,我是小索奇哈,精心制作的Vue系列持续发放,涵盖大量的经验和示例,由浅入深进行讲解。本章给大家讲解的是数据监视,前面的章节已经更新完毕,后面的章节持续输出,有任何问题都可以留言或私信哈,一起加油~数据监视Vue实现数据监测的核心是通过defineProperty()劫持属性的getter&setter,......
  • 无涯教程-JavaScript - CONCAT函数
    描述Combinesthetextfrommultiplerangesand/orstrings,butitdoesn'tprovidethedelimiterorIgnoreEmptyarguments.Toincludedelimiters(suchasspacingorampersands(&)betweenthetextsyouwanttocombineandtoremoveemptyarguments......
  • 2023-09-28 闲话
    本来应该进行一次晦涩文学的尝试,这要等到晚上了。下面是一些真实的想法,不知道你有没有看完呢?省流还是没有要到微信。大概的心里状态和车昱辉阐述了一下,得到了认可。简而言之,就是我觉得她长得可爱,我很喜欢看,这是一件很美好的事情,至于我要是加微信,聊天,搞对象,反倒徒增了工作量。......
  • 14 | 网络安全:和别人共用Wi-Fi时,你的信息会被窃取吗?
    内网中的最小权限原则对内网进行水平划分:划分不同的身份和权限对内网进行垂直划分:内、外网隔离 有线和无线网络安全无线网络的防护:使用安全协议(WAP2协议),认证技术(“强制门户”,再次认证),以及对办公网络中的未知热点进行扫描,避免伪造热点有线网络安全防护:只需要防护劫持。第一......
  • FX3U-3A-ADP模拟量和数字量之间转换
    简单的例子:0-10V对应0-8,4-20mA对应0-30 以下是对上面例子的详解:电压:  电压(0-10V)0-10V对应着数字量0-4000数字量与变频器HZ量之间的关系是(4000-0)/(50-0)=80故如果你想转多少HZ数,就需要在后面(乘上80),这个才是你HZ数对应的数字量 注意:如果设置了M8262ON是电流输出......