C语言 链表-链表全家桶(附完整代码)香饽饽!!嘎嘎香!!!

单链表由各个内存结构通过一个指针链接在一起组成,每一个内存结构都存在后继内存结构(链尾除外),内存结构由数据域和指针域组成。

下文介绍了链表的一些基本操作,所有代码均在子函数中编写,文章最下方附带完整代码,Copy即可食用。

一、链表的创建

说到链表,肯定少不了结构体,首先第一步我们要创建结构体(头文件不算数嗷)。接下来就要创建头结点,所谓头结点,其实就是创建一个指针来指向一块内存空间 如下文所示:

typedef struct Node{
    int data;                 //数据域(你可以理解为存放数据的位置)
    struct Node *next;        //指针域(存放下一个结点的地址)
}Node;

LinkList create(){
    
    //定义一个指针,为指针 申请一块空间
    Node *head = (Node *)malloc(sizeof(Node));
    
    //判断空间是否开辟成功
    if(!head){
        printf("空间申请失败!\n");
        return NULL;
    }
    
    //头结点,指针域值为 NULL
    head->next = NULL;
    
    //返回 头结点 指针
    return head;
    
}

二、链表的输入

链表的数据(输入/插入)与数组思想一样,利用scanf录入数据值,不同的是数组是直接放入下标位空间,而链表是将所录入的数据放入到了结构体中的数据域中,然后令移动至指针域所指向的下一个结点空间,继续输入,注意 最后一位结点记得将指针域赋空值 即NULL,如下文所示:

void input(Node *head){
    
    //用来判断头结点是否开辟成功 若不成功则结束程序
    if(!head){
        return;
    }
    
    //这里需要注意 链表是通过头结点一步一步移动寻找数据的,所以需要再创建一个指针指向头结点,利用这个指针进行操作,否则会造成数据丢失的情况。
    //创建指针 指向头结点
    Node *q = head;
    
    //这里就以录入5个数据为例
    for(int i=0;i<5;i++){
        Node *p = (Node *)malloc(sizeof(Node));    //开辟新的结点

        printf("请输入数据:");
        scanf("%d",&p->data);        //这里就是输入数据的位置,注意需要放地址
        
        //这里利用的是 尾插法 连接的链表,(尾插法即:将结点连接至链表尾部)
        q->next = p;    //q指向的是头结点,头结点的指针域存放p的地址
        
        //令q结点移动至它本身指针域存放地址的位置 即p的位置,循环结束下一次循环再次创建新的p结点
        q = q->next;    
    }
    
    //这里因为循环录入已经结束,所以将最后一个结点的指针域赋空值
    q->next = NULL;
    
}

三、链表的查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Discord_lim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值