【C语言数据结构】单链表

news2024/12/22 18:35:31

目录

  • 分析顺序表和链表
  • 实现单链表
    • 打印链表
    • 动态申请一个节点
    • 尾插
    • 头插
    • 尾删
    • 头删
    • 查找值函数
    • 单链表在pos位置之前插入x
    • 单链表在pos位置之后插入x
    • 删除pos位置
    • 单链表删除pos位置之后的值
    • 释放内存空间

分析顺序表和链表

如下图可以看出顺序表的优点
1.尾插尾删足够快
2.下标随机访问和修改方便
但是也能看出一些问题
1.由于顺序表是连续存放的,所以顺序表的头部和中部的插入删除的效率都不行(相比于链表)
2.空间不够,扩容会有一定的消耗
3.可能还存在空间浪费的问题
链表可以解决顺序表的这些问题。对于链表空间是一个一个分开存放的,链表的上一个元素只要保存要访问的下一个元素的地址即可。在申请内存时也不需要申请一整块内存空间,只需要在插入元素时申请所需要的内存大小即可。
下面我们来实现一个单链表。在这里插入图片描述

实现单链表

打印链表

要打印出链表,首先定义一个结构体指针cur让这个结构体指针和phead指针同时指向第一个节点,创建完cur后,只需要判断该节点在while循环中指针不为空即可。不断把cur->nextD的值赋值给cur,然后打印cur节点,就完成了整个链表的遍历。
请添加图片描述

动态申请一个节点

动态申请一个节点最要注意的是需要申请的malloc的大小
在这里插入图片描述

尾插

尾插的常见错误分析:

1.tail通过while循环判断条件错误导致尾插失败
判断条件写成cur != NULL
在这里插入图片描述
正确结果是找到NULL的前一个节点,通过tail->next指向newnode,这样出了函数tail和newnode局部变量销毁也不会影响整个链表。
在这里插入图片描述在这里插入图片描述

但是如果链表一开始是空的呢?
2.链表为空时,改变phead的值但是尾插失败
在这里插入图片描述-----
在这里插入图片描述-----
在这里插入图片描述-----

分析:在这里插入图片描述----------
在这里插入图片描述
改变int要传int*,改变int*要传int**
得出结论:改变结构体要用结构体指针,改变结构体指针要用结构体指针的指针(二级指针)。

总结:当链表不为空时,只要改变tail->next,tail->next是结构体,所以只需要结构体的指针即可,链表为空时,我们要改变的是结构体指针plist,所以要用结构体指针的指针。

头插

头插不管链表为不为空都很明显需要用到二级指针。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

尾删

尾删首先要考虑的问题是这个地方需不需要用到二级指针?对于数据结构的学习我们要考虑全面一些,如果尾删对于有多个节点的链表不需要用到二级指针,但是只有一个节点要怎么删除呢?答案还是要用到二级指针。尾删的时候链表为空还要尾删吗?所以这个地方还要考虑判断链表为不为空。

链表为空,我们只需要加一个断言即可。
在这里插入图片描述

链表只有一个节点
在这里插入图片描述在这里插入图片描述

链表有多个节点
尾删首先要找尾,这里有一个常见错误
在这里插入图片描述
为了避免这种问题,有两种写法
1.定义一个tailprev找tail之前的位置,把tail指向的空间free,把tailprev的next置空。
在这里插入图片描述
2.在判断循环条件部分判断tail->next->next是否为空,释放tail->next,
把tail->next的值置空。
在这里插入图片描述

头删

头删只有两种情况,一种是空链表,一种是非空链表
在这里插入图片描述

查找值函数

这里可以传一级指针也可以传二级指针,因为我们不需要修改值。
在这里插入图片描述
利用find函数我们找到了节点的地址就可以修改当前节点的值。在这里插入图片描述

单链表在pos位置之前插入x

在pos 位置之前插入,先要判断pos的位置,如果pos在头结点位置,就是头插我们可以复用头插的函数。这里pos在尾结点不用单独判断。在这里插入图片描述

单链表在pos位置之后插入x

在这里插入图片描述

删除pos位置

在这里插入图片描述

单链表删除pos位置之后的值

在这里插入图片描述

释放内存空间

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1223835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙开发|开启鸿蒙开发之旅-发工具下载安装、项目创建和预览

文章目录 一、鸿蒙开发使用语言二、下载开发工具三、安装开发工具四、新建项目五、项目启动 一、鸿蒙开发使用语言 鸿蒙OS开发支持多种编程语言,开发者可以根据自身技术背景和项目需求选择合适的语言进行开发。目前鸿蒙OS主要支持以下几种语言: Java&am…

计算机msvcp120.dll丢失?msvcp120.dll丢失5种简单的解决方法分享

你们是否在电脑操作过程中常看到一段类似“msvcp120.dll缺失或损坏”的报错信息?这可能会干扰大家的日常应用程序使用,怎么办呢?别担心,接下来就是一篇详细的步骤来教你如何应对这种情况,让你们的电脑运作如初&#xf…

二叉树的遍历(非递归版)

文章目录 二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站。 二叉树的前序遍历 用递归实…

文件加密软件哪个好用丨真心推荐丨良心建议

在保护企业文件和数据方面,文件加密软件是一种非常重要的工具。以下是我推荐好用的文件加密软件,以及我的良心建议。 一、WinRAR。WinRAR是一款免费的文件压缩和解压缩工具,同时也提供了强大的文件加密功能。使用WinRAR可以轻松地加密文件夹和…

算法通关村第十关-白银挑战数组最大K数

大家好我是苏麟 , 今天带来一道应用快排的题 . 数组中的第K个最大元素 描述 : 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 题目 : Le…

【机器学习Python实战】线性回归

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习python实战 欢迎订阅!后面的内容会越来越有意思~ ⭐内容说明:本专栏主要针对机器学习专栏的基础内容进行python的实现,部分…

从零开始:抖音酒店景区小程序开发指南

为了满足用户多样化的需求,开发一款抖音酒店景区小程序成为了业界的一个新兴趋势。在这篇文章中,我们将探讨如何开发一款引人注目的抖音风格的酒店景区小程序。 一、抖音风格的设计理念 在设计酒店景区小程序时,我们需要融入抖音的设计理念。…

珠海希雷伺服全套(包含算法)方案

下载链接!!https://mp.weixin.qq.com/s?__bizMzU2OTc4ODA4OA&mid2247555038&idx1&sn939a4ad71582abc1f9e93c4d5526fed9&chksmfcfb0409cb8c8d1f74ce7108e20b0310e7399775367a023638624357644dfa4ae435e41c8768&token207079769&l…

Flink(七)【输出算子(Sink)】

前言 今天是我写博客的第 200 篇,恍惚间两年过去了,现在已经是大三的学长了。仍然记得两年前第一次写博客的时候,当时学的应该是 Java 语言,菜的一批,写了就删,怕被人看到丢脸。当时就想着自己一年之后&…

客户端性能优化实践

背景 双十一大促时,客户客服那边反馈商品信息加载卡顿,在不断有订单咨询时,甚至出现了商品信息一直处于加载状态的情况,显然,在这种高峰期接待客户时,是没法进行正常的接待工作的。 起初,页面一…

4、FFmpeg命令行操作8

生成测试文件 找三个不同的视频每个视频截取10秒内容 ffmpeg -i 沙海02.mp4 -ss 00:05:00 -t 10 -codec copy 1.mp4 ffmpeg -i 复仇者联盟3.mp4 -ss 00:05:00 -t 10 -codec copy 2.mp4 ffmpeg -i 红海行动.mp4 -ss 00:05:00 -t 10 -codec copy 3.mp4 如果音视…

记录一些涉及到界的题

文章目录 coppersmith的一些相关知识题1 [N1CTF 2023] e2Wrmup题2 [ACTF 2023] midRSA题3 [qsnctf 2023]浅记一下 coppersmith的一些相关知识 上界 X c e i l ( 1 2 ∗ N β 2 d − ϵ ) X ceil(\frac{1}{2} * N^{\frac{\beta^2}{d} - \epsilon}) Xceil(21​∗Ndβ2​−ϵ) …

Os-ByteSec

Os-ByteSec 一、主机发现和端口扫描 主机发现,靶机地址192.168.80.144 端口扫描,开放了80、139、445、2525端口 二、信息收集 访问80端口 路径扫描 dirsearch -u "http://192.168.80.144/" -e *访问扫描出来的路径,没有发现…

【有源码】基于asp.net的旅游度假村管理系统C#度假村美食住宿一体化平台源码调试 开题 lw ppt

💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…

聊聊氮化硅(SiNx)在芯片中的重要性

在芯片制造中,有一种材料扮演着至关重要的角色,那就是氮化硅(SiNx)。尽管它可能并未获得和其他更为熟知的半导体材料,如硅(Si)、砷化镓(GaAs)或氮化镓(GaN&am…

链式队列的基本操作与实现(数据结构与算法)

链队列的表示与实现如下图&#xff1a; 代码如下&#xff1a; #include<iostream> using namespace std;#define MAXQSIZE 100 //最大队列长度 typedef int QElemType; //typedef struct Qnode {QElemType data;struct Qnode* next; }QNode, *QueuePtr; //队列结点类型…

KVM Cloud云平台

项目介绍 KVM Cloud 是一款基于Java实现的轻量级私有云平台&#xff0c;旨在帮助中小企业快速实现计算、存储、网络等资源的管理&#xff0c;让企业拥有自己的云平台&#xff0c;包括但不限于如下功能: 1、基于KVM的VM基础功能(创建、启动、停止、重装、webVNC等功能) 2、使用…

【Proteus仿真】【STM32单片机】防火防盗GSM智能家居设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用声光报警模块、LCD1602显示模块、DS18B20温度、烟雾传感器模块、按键模块、PCF8591 ADC模块、红外检测模块等。 主要功能&#xff1a; 系统运行…

Web之CSS笔记

Web之HTML、CSS、JS 二、CSS&#xff08;Cascading Style Sheets层叠样式表&#xff09;CSS与HTML的结合方式CSS选择器CSS基本属性CSS伪类DIVCSS轮廓CSS边框盒子模型CSS定位 Web之HTML笔记 二、CSS&#xff08;Cascading Style Sheets层叠样式表&#xff09; Css是种格式化网…

3D建模基础教程:可编辑多边形建模的基础认识

可编辑多边形建模是3D建模中的一种常见方法&#xff0c;它允许用户对模型进行细致的调整和编辑。以下是对可编辑多边形建模的详细介绍&#xff1a; 1、层级概念&#xff1a;在可编辑多边形建模中&#xff0c;有五个层级&#xff0c;分别是点层级、边层级、边界层级、面层级和元…