笔记(嵌入式Linux C篇)5——单链表(有头节点)

链表

数据元素随机存储,通过指针表示数据之间的逻辑关系的结构就是链式存储结构,即链表。

一个链表节点包括一个数据域和一个指针域。数据域存储数据,指针域存储下一个节点的地址。

链表的结构体声明如下:

typedef struct node_st
{
    int data;
    struct node_st *next;
}list;

链表创建

创建一个链表,先声明一个list类型的指针,并分配给其list长度的空间,返回这个指针即可。

list *list_create()    //链表创建
{
    list *me;
    me = malloc(sizeof(list));
    if(me == NULL)
        return NULL;
    me -> next = NULL;
    return me;
}

链表插入数据

在链表me上的第i个位置插入元素data:需要先找到位置i的节点node,给新节点newnode分配好空间后,将位置i的node->next赋给newnode->next,把newnode的地址赋给node->next,同时把数据data赋给newnode->data,即可完成插入。

int list_insert_at(list *me, int i, datatype *data)
{
    int j = 0;
    list *node = me, *newnode;

    if(i < 0)
        return -1;

    while(j < i && node != NULL)    // 从头遍历到要插入的位置i
    {
        node = node -> next;
        j++;
    }

    if(node)
    {
        newnode = malloc(sizeof(*newnode));
        if(newnode == NULL)
            return -2;
        newnode -> data = *data;
        newnode ->next = node -> next;
        node -> next = newnode;
    }
    else
        return -3;
    return 0;
}

链表释放

从链表头节点me的下一个节点node开始free,直到第一个节点node为空,在free头节点me。

void list_destroy(list *me)
{
    list *node, *temp;
    for(node = me -> next; node != NULL; node = temp)
    {
        temp = node -> next;
        free(node);
    }
    free(me);
    return;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴回答你关于野火嵌入式Linux学习的问题!以下是一些学习笔记的建议: 1. 了解嵌入式系统:首先,你需要了解嵌入式系统是什么以及它们与桌面操作系统的区别。嵌入式系统通常用于特定的应用领域,例如智能家居、汽车电子和工业控制等。 2. 学习Linux基础知识:野火嵌入式Linux是基于Linux内核的操作系统,所以你需要掌握Linux的基础知识,包括文件系统、进程管理、设备驱动程序等。 3. 硬件平台了解:野火嵌入式Linux有不同的硬件平台,例如野火开发板。你需要学习如何操作和配置这些硬件平台,并了解它们的特性和限制。 4. 交叉编译环境设置:为了在PC上开发嵌入式系统,你需要设置一个交叉编译环境,以便能够编译和调试嵌入式应用程序。这涉及到安装和配置交叉编译工具链。 5. 内核定制和驱动程序开发:学习如何定制Linux内核以满足特定需求,并开发设备驱动程序以支持外部硬件。 6. 应用程序开发:掌握嵌入式应用程序的开发技术,包括使用C/C++语言、Makefile和调试工具。 7. 调试和故障排除:学会使用调试工具和技术来定位和解决嵌入式系统中的问题。 8. 实际项目经验:通过参与实际的嵌入式项目或完成一些小型项目来应用你的知识和技能。 这些只是一些学习笔记的建议,野火嵌入式Linux学习需要不断的实践和探索。希望这些对你有帮助!如果你有任何进一步的问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值