码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据结构(单链表)


        前沿:

           在前面总结的顺序表的时候,最后也说出了他的一些缺点,例如头插/中间插的时候的时间复杂度是O(n),这个效率并不高,而如何提高效率的实现呢,这里我们可以通过单链表来简单的提高这个效率。

      思维导图:

    目录

     一、链表的概念:

    1.1概念:

     二、链表的结构:

    2.1结构:

    三、单链表的实现:

    3.1链表的初始化:

     3.2链表申请一个节点:

    3.3链表的头插:

     3.4链表的的打印:

    3.5链表的尾插:

     3.6链表的头删:

    3.7链表的尾删:

     3.8链表的销毁:

    3.9链表的查找和修改:

    ​3.10链表的pos插入:

    3.11链表在pos位置上的删除:

    总结 :


     一、链表的概念:

    1.1概念:

          链表是一种物理存储存结构上非连续、非顺序的存储结构。数据元素的逻辑顺序是通过链表中的指针连接次序实现的。

     二、链表的结构:

    2.1结构:

    2.1.1 单向、双向

    2.1.2 带头、不带头

    2.1.3循环、不循环

    这都是链表的不同结构,今天我们要写的比较简单,是单链表的实现。

    三、单链表的实现:

    3.1链表的初始化:

       3.1.1链表的初始化很简单的只需要让头指针为零就可以啦! 

    但其实我们大可不必这么麻烦直接让plist的地址为NULL就可以

     3.2链表申请一个节点:

    3.2.2链表进行插入时都要创建一个一个结构体,为了方便我们直接通过一个函数来创建方便我们进行插入。

    3.3链表的头插:

    3. 3.1链表头插代码实现前,我们先记住一句话,改谁就传谁的地址,因为函数传参传的是形参,形参的改变不会影响实参的大小,要想改变实参的大小我们需要传入实参的地址。(不理解的可以看我的函数栈帧的创建销毁^_^https://blog.csdn.net/m0_63177573/article/details/127750960)这里我们需要改变头节指向的头节,而头节本身就是个地址,所以这里我们需要用到二级指针。

     3.4链表的的打印:

    3.4.1链表的打印我只需要我们创建一个结构体指针对我们的的数一一遍历即可。

    这里我们就可以先对插入进行测试一下 

    这里我就展示一个的测试,其他的测试,我们要每完成一个功能就进行测试一下。

    3.5链表的尾插:

    3.5.1链表的尾插 有两种情况,第一种是第一个节点为NULL,第二种是不为NULL。两种情况不一样我们要分情况写。

    打印结果: 

     3.6链表的头删:

    3.6.1创建函数前我们都要先想是改变结构体指针呢还是结构体成员呢,头删很显然是改变结构体指针,所以需要用二级指针。

    打印结果 :

    3.7链表的尾删:

    (^_^)v   首相我们还是要考虑是改变结构体指针还是结构体,这里我们分两种情况,当只是一个节点的时候,我们则需要改变结构体指针,需要把节点释放,同时设为NULL,故需要二级指针,当多个节点的时候,只需要改变结构体成员。 

     

    打印结果

     3.8链表的销毁:

    3.8.1链表在使用完之后一定要进行销毁,否则将会出现内存的泄漏。

    3.9链表的查找和修改:

    3.9.1 链表可以在查找中进行修改 。代码还是比较简单的。^ _ ^

    测试结果:

    3.10链表的pos插入:

           3.10.1链表的pos插入有两种方式,一种是节点插在前面,另一种把节点插在后面。

    ^_^pos前插入:

    结果为: 

    ^_^pos后插入: 

     3.11链表在pos位置上的删除:

    测试结果: 

    到这里单链表的大概已经全部完成啦!

    总结 :

           ^ - ^单链表只是解决了顺序表的一部分缺点,但并没有全部解决,例如在尾插或者尾删的时候,仍然需要一个结构体指针来遍历寻找。而能实现彻底解决的方法是循环带头双向链表,在后面的日子里,我会努力完成💪

     最后 孩子码文不易,如果觉得文章有帮助的话,可以点个关注哈哈哈哈哈。

  • 相关阅读:
    python3.8及以上版本绑定gdal库的一个注意事项
    数字孪生与元宇宙在关键技术方面的异同
    学内核之五:问题一,关于上下文切换
    华为笔记本MateBook D 14 2021款锐龙版R7集显非触屏(NbM-WFP9)原装出厂Windows10-20H2系统
    ASP.NET Core 3.1系列(16)——Entity Framework Core之Code First
    分享使用百度EasyDL实现安全帽智能识别
    企业中 Docker 的 Swarm 使用及作用详解
    Node基础
    智能视频监控平台EasyCVR如何使用接口批量导出iframe地址?
    RK3399交叉编译问题
  • 原文地址:https://blog.csdn.net/m0_63177573/article/details/127778186
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号