带你玩转单向链表(学习必备)

这篇具有很好参考价值的文章主要介绍了带你玩转单向链表(学习必备)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文概要

本篇文章主要介绍数据结构中单向链表各种操作,适合有C语言基础的同学,文中描述和代码示例很详细,干货满满,感兴趣的小伙伴快来一起学习吧!

🌟🌟🌟个人简介🌟🌟🌟

☀️大家好!我是新人博主朦胧的雨梦,希望大家多多关照和支持😝😝😝
🌖大家一起努力,共同成长,相信我们都会遇到更好的自己👊👊👊
🌗期待我的文章能给各位带来知识的收获和解决问题的灵感🤩🤩🤩
🌟大家的三连是我不断更新的动力😘😘😘

学习目标🏆

  1.了解单向链表的结构特点

  2.掌握单向链表的创建

  3.掌握单向链表的各种操作

✨一.单向链表

🌲1.单向链表的定义

  单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。乍一看的意思就像是乍一看,每个字都认识,连在一起就成这样了:
带你玩转单向链表(学习必备)

其实,很简单,我用一张图来解释单向链表的结构:
带你玩转单向链表(学习必备)
是不是一下就清楚什么是单向链表了,关于头指针head和终端结点

  • 单链表中每个结点的存储地址是存放在其前趋结点Pnext域中,而开始结点无前趋,故应设头指针head指向开始结点。链表由头指针唯一确定,单链表可以用头指针的名字来命名。

  • 终端结点无后继,故终端结点的指针域为空,即NULL

✨二.单向链表的创建

1.首先,我们需要定义一个结构体来装着元素和指向下一个元素节点的指针

#include<stdio.h>
//定义结构体
struct Mystruct 
{
    int data;
    struct Mystruct *pnext;
 
};

2.接下来,我们创建一个无空头的链表,首先定义头尾指针(方便对链表进行
操作)

#include<stdio.h>
//定义结构体
struct Mystruct 
{
    int data;
    struct Mystruct *pnext;
 
};

int main(void)
{
	//定义头尾指针
	struct Mystruct *phead = NULL;
	struct Mystruct *pend= NULL;

	return 0;
}

3.以尾添加(尾插)为例,因为需要改变指针的指向,必须传递二级指针,现在写出我们的第一个链表

void end_add(struct Mystruct **phead,struct Mystruct **pend,int add_data)

{    //参数合法性检测
    if (NULL == phead || NULL == pend)
        return;

    //申请新节点
    struct Mystruct* new_pdode = (struct Mystruct*)malloc(sizeof(struct Mystruct));

    //检测是否申请成功
    if (NULL == new_pdode)
    {
        printf("空间申请失败");
        return;
    }

    //新节点赋值
    new_pdode->data = add_data;
    new_pdode->pnext = NULL;

    //连接
    //无节点的情况
    if (NULL == *phead && NULL == *pend)

    {
        *phead = new_pdode;

    }
    //有节点情况
    else
    {
        (*pend)->pnext = new_pdode;

    }
    *pend = new_pdode;


}

✨三.单向链表的各种操作

1.增加元素

上面讲了尾插,所以就该讲头插了:

void head_add(struct Mystruct** phead, struct Mystruct** pend, int adddata)
{
    //参数合法性检测
    if (NULL == phead || NULL == pend)
        return;

    //创造新节点
    struct Mystruct* new_pdode = (struct Mystruct*)malloc(sizeof(struct Mystruct));

    //合法性检测
    if (NULL == new_pdode)
    {
        printf("空间申请失败");
        return;
    }

    //新节点赋值
    new_pdode->data = adddata;
    new_pdode->pnext = NULL;

    //连接
    //无节点的情况
    if (NULL == *phead && NULL == *pend)

    {
        *pend = new_pdode;

    }
    //有节点的情况
    else
    {
        new_pdode->pnext = *phead;

    }
    *phead = new_pdode;

}

2.查找元素

1.根据下标查找元素

struct Mystruct* index_find(struct Mystruct* phead, int index)
{

    //参数合法性检测
    if (NULL == phead || index < 0)
        return NULL;

    //记录头指针
    struct Mystruct* p = phead;

    for (int i = 0; i < index; i++)
    {
        p = p->pnext;
    }
    return p;
}

2.根据数据查找元素

void data_find(struct Mystruct* phead, int designated_data)
{
	//参数合法性检测
    if (NULL == phead)
        return;
        
    //记录头指针    
    struct Mystruct* ptemp = phead;
    while (ptemp != NULL)
    {
        if (ptemp->data == designated_data)
        {
            printf("找到了");
            break;

        }
        ptemp = ptemp->pnext;
    }
    return;
}

3.修改元素数据

根据下标修改元素数据

void index_change(struct Mystruct *phead,int index, int change_data)
{
	//参数合法性检测
    if (index < 0)
        return;
    //调用下标查找函数
    struct Mystruct* p = index_find(phead, index);
  	//更改数据
    p->data = change_data;


}

4.删除元素

void freelist(struct Mystruct* phead)
{
	//记录头指针
	struct Mystruct* pt = phead;
	//开始删除
    while (pt != NULL)
    {
        struct Mystruct* p = pt;
        pt = pt->pnext;
        free(p);
    }
}

✨四.结语

单向链表的操作非常重要,对于新手来说。可能需要重复捋几遍思路,一旦掌握就会觉得非常简单,相信大家通过这篇文章已经可以掌握了单向链表的操作,今天就分享到这里,谢谢大家的观看,有什么想法记得评论区告诉我!拜拜~✨ ✨ ✨

💫往期好文推荐

  TOP🥇.AI工具究竟是帮手还是对手?❤️❤️❤️🏆🏆🏆❤️❤️❤️

  TOP🥈.Python爬虫 | 利用python爬虫获取想要搜索的数据(某du)❤️❤️❤️🏆🏆🏆❤️❤️❤️

  TOP🥉.ChatGPT | 一文详解ChatGPT(学习必备)❤️❤️❤️🏆🏆🏆❤️❤️❤️
带你玩转单向链表(学习必备)
文章来源地址https://www.toymoban.com/news/detail-432163.html

到了这里,关于带你玩转单向链表(学习必备)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 带你玩转modbusTCP通信

    Modbus TCP是一种基于TCP/IP协议的Modbus通信协议,它是Modbus协议的一种变体,用于在以太网上进行通信。Modbus TCP协议是一种开放的通信协议,它支持多种编程语言和操作系统,并且可以在不同的硬件和软件平台上进行通信。 Modbus TCP协议使用标准的TCP/IP协议栈,通过以太网进行通

    2024年02月03日
    浏览(47)
  • 一文带你玩转ProtoBuf

    在网络通信和通用数据交换等应用场景中经常使用的技术是 JSON 或 XML,在微服务架构中通常使用另外一个数据交换的协议的工具ProtoBuf。 ProtoBuf也是我们做微服务开发,进行Go进阶实战中,必知必会的知道点。 今天就开始第一章内容:《一文带你玩转ProtoBuf》 你可能不知道

    2023年04月16日
    浏览(66)
  • 带你玩转三子棋—【C语言】

    目录 前言: 1. 菜单的打印 2. game函数的实现 2.1 初始化棋盘 2.2 显示棋盘 2.3 玩家下棋 2.4 电脑下棋 2.5 判断输赢 2.6 判断棋盘是否满了 3. 全部代码 3.1 game.h 3.2  game.c 3.3 test.c 为了实现三子棋,首先我们应该将代码分模块编写,我们分为3个部分 1. test.c —测试游戏(主函数)2

    2024年02月04日
    浏览(47)
  • 一文带你玩转C语言文件操作

    作者主页:  paper jie的博客_CSDN博客 本文作者: 大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于 《系统解析C语言》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将算法基础知识一网打尽,希望可以帮到读者们哦

    2024年02月17日
    浏览(61)
  • Python | 带你玩转Python的各种文件操作

    本篇文章主要介绍Python的各种文件操作,适合刚入门的小白或者对于文件操作基础不太牢固的同学,文中描述和代码示例很详细,看完即可掌握,感兴趣的小伙伴快来一起学习吧。 ☀️大家好!我是新人小白博主朦胧的雨梦,希望大家多多关照和支持😝😝😝 🌖大家一起努

    2023年04月11日
    浏览(72)
  • 【Linux】32条指令带你玩转 Linux !

    目录 1,whoami 2,who 3,pwd 4,ls 1,ls  2,ls -l 3,ls -a 4,ls -al 5,ls -d  6,ls -ld 5,clear 6,cd 1,cd  2,cd . 3,cd .. 4,cd /home/litao/linux/  绝对路径 5,cd ../day02/   相对路径 6,cd ~ 7,cd - 7,tree 8,touch 9,mkdir 1,mkdir 2,mkdir -p 10,rmdir rm 1,rmdir 2,rm 3,rm -f 4,rm -r 5,rm -rf 6,

    2024年02月08日
    浏览(56)
  • 【C语言】带你玩转库函数qsort

    君兮_的个人主页 勤时当勉励 岁月不待人 C/C++ 游戏开发 Hello,米娜桑们,这里是君兮_,之前更新的一直是比较基础和简单的内容,随着博主自己的水平的提升,今天给大家带来点不一样的东西,我们今天要讲的是库函数qsort的用法 废话不多说,咱们直接开始吧! 很多人可能是

    2024年02月16日
    浏览(40)
  • 内网穿透技术 - 带你玩转Ngrok和NATAPP

    使用内网穿透技术,我们出差或者在家,就可以直接访问到公司的电脑或者内网网站,实现远程办公。也可以将我们自己在局域网内搭建的网站暴露出去,让所有人都可以直接访问到。 本文章主要介绍下内网穿透工具Ngrok和NATAPP。 Ngrok 开源,老牌穿透工具 NATAPP 免费隧道,提

    2024年02月15日
    浏览(37)
  • 带你玩转 Vite + Vue3 高低版本常用玩法

    Vite 是一种新型前端构建工具,在我们保险前端项目中已经推动并应用很久了,Vite 能够显著降低构建时间,提升前端开发效率。 它主要由两部分组成: 一个开发服务器,它基于 原生 ES 模块 提供了 丰富的内建功能,如速度快到惊人的 模块热更新(HMR) 一套构建指令,它使

    2024年02月05日
    浏览(61)
  • 带你玩转 3D 检测和分割 (三):有趣的可视化

    小伙伴们好呀,3D 检测和分割系列文章继续更新啦,在第一篇文章中我们带领大家了解了整个框架的大致流程,第二篇文章我们给大家解析了 MMDetection3D 中的坐标系和核心组件 Box,今天我们将带大家看看 3D 场景中的可视化组件 Visualizer,如何在多个模态数据上轻松可视化并且

    2023年04月21日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包