数据结构(单链表)

news2024/11/25 14:38:10

    前沿:

       在前面总结的顺序表的时候,最后也说出了他的一些缺点,例如头插/中间插的时候的时间复杂度是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位置上的删除:

测试结果: 

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

总结 :

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

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

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

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

相关文章

java计算机毕业设计springboot+vue在线投票系统

项目介绍 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于在线投票系统当然也不能排除在外,随着网络技术的不断成熟,带动了在线投票系统的发展,它彻底改变了…

Java初识:类和对象(上)

文章目录学习目标1.面向对象的初步认识1.1认识面向对象1.2 区分面向对象和面向过程2.类当定义与使用2.1认识简单类2.2 类的定义格式2.3 小试身手-定义类的小练习3.类的实例化3.1 什么是实例化3.2 实例化注意事项:3.3 类和对象说明4. this 引用4.1为什么要用this4.2 …

小程序意见反馈界面(简洁版代码)

在开发个人中心页面时,意见反馈功能是必不可少的,下面介绍该功能的具体开发流程 1、首先看一下效果图: 2、WXML代码,分为三个部分,文本域(TextArea)、输入框(Input)、按钮&#xff…

程序员日常|为什么我在开发工作中偏爱这款键盘?

前言 最近一直不断地有粉丝朋友们私信我,问我该如何给自己挑选一款适合程序员工作的键盘,于是今天来给大家介绍下我用的键盘。 文章目录前言我的键盘亲身经历使用体验视频展示我的键盘 程序员作为一个需要长时间敲代码的职业,没有一个趁手的…

html静态网页设计制作 HTML我的家乡沧州网页代码 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

uint 与 int 相加,事与愿违?

#include <iostream> using namespace std; int main() { uint32_t uint_data -22; int int_data 0; if (uint_data int_data < 0) { cout <<"uint int负数小于0: "; } else { cout <<"…

ARM编程环境搭建教程

随着移动互联网的繁荣发展&#xff0c;物联网人工智能的兴起&#xff0c;嵌入式开发成为了越来越多IT人必须学习的内容&#xff0c;而在嵌入式芯片领域&#xff0c;ARM具有无可撼动的市场占有率&#xff0c;所以说&#xff0c;学习嵌入式不学ARM&#xff0c;不如回家卖红薯。 接…

C++ Reference: Standard C++ Library reference: C Library: cwctype: iswblank

C官网参考链接&#xff1a;https://cplusplus.com/reference/cwctype/iswblank/ 函数 <cwctype> iswblank int iswblank (wint_t c); 检查宽字符是否为空白 检查c是否为空字符。 空白字符是用于分隔一行文本中的单词的空格&#xff08;space character&#xff09;字符…

用色彩活出彩,能率Color Run上海之旅圆满结束

11月8日&#xff0c;以“用色彩&#xff0c;活出彩”为主题的能率|苏宁 Color Run活动&#xff0c;于上海圆满结束。此次活动由燃热领域代表品牌能率与苏宁易购集团联合举办&#xff0c;旨在通过有效户外运动&#xff0c;提倡健康快乐的生活方式&#xff0c;悦享多彩人生。 能率…

摄影网页设计制作 简单静态HTML网页作品 WEB静态摄影网站作业成品 学生DW摄影网站模板

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

C++语言基础篇

✅作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域新星创作者&#xff0c;阿里云专家博主&#xff0c;华为云云享专家博主&#xff0c;掘金后端评审团成员 &#x1f495;前言&#xff1a; 学长出的这一系列专栏适合有⼀点 C 基础&#xff0c…

PPT的“限制编辑”模式如何设置?

我们知道&#xff0c;Word文档和Excel表格都可以设置限制编辑&#xff0c;防止文件被随意改动&#xff0c;可是PPT文件里并没有“限制编辑”的选项&#xff0c;那要怎么设置呢&#xff1f; 其实&#xff0c;PPT的“只读模式”就等同于“限制编辑”模式&#xff0c;因为PPT文件…

【网页设计】期末大作业:化妆品主题——绿色大气的html5响应式化妆品护肤品肌肤网页设计(11页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Python解决图文验证码登录识别(1)

前言 本文是该专栏的第22篇,后面会持续分享python的干货知识,记得关注。 在信息爆炸的年代,爬虫对于在工作中进行信息的抽取,获取重要的数据源是一项非常不错的技能,可以说很久之前的爬虫几乎没什么难度,直到互联网的持续发展,陆陆续续出现了一大堆的反爬措施,给爬虫也…

【css 动画】css实现奔跑的北极熊

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;…

Verilog功能模块——Uart收发

摘要本文分享了一种通用的Uart收发模块&#xff0c;可实现Uart协议所支持的任意波特率&#xff0c;任意位宽数据&#xff08;5~8&#xff09;&#xff0c;任意校验位&#xff08;无校验、奇校验、偶校验、1校验、0校验&#xff09;&#xff0c;任意停止位&#xff08;1、1.5、2…

《机器学习实战》7.AdaBoost元算法提高分类性能

目录 1 基于数据集多重抽样的分类器 1.1 bagging&#xff1a;基于数据随机重抽样的分类器构建方法 1.2 boosting 2 训练算法&#xff1a;基于错误提升分类器的性能 3 基于单层决策树后见弱分类器 4 完整AdaBoost算法的实现 5 测试算法&#xff1a;基于AdaBoost的分类 6…

数据结构 - 二叉搜索树

目录 一、概念 二、实现 非递归删除 递归删除 三、总结 一、概念 二叉搜索树&#xff08;BST&#xff0c;Binary Search Tree&#xff09; 也称二叉排序树&#xff0c;二叉查找树 二叉搜索树&#xff1a;一棵二叉树&#xff0c;可以为空&#xff0c;如果不为空&#xf…

内网工具viper的介绍与配置简介

文章目录0x01 介绍0x02 安装步骤一、首次安装二、更新版本三、修改密码四、反溯源配置五、关闭/重启六、安装目录介绍摘抄0x01 介绍 Viper(炫彩蛇)是提供图形化的操作界面,用户使用浏览器即可进行内网渗透. 0x02 安装步骤 一、首次安装 安装docker apt upodate apt instal…

Qt编写ffmpeg本地摄像头显示(16路本地摄像头占用3.2%CPU)

一、前言 内核ffmpeg除了支持本地文件、网络文件、各种视频流播放以外&#xff0c;还支持打开本地摄像头&#xff0c;和正常的解析流程一致&#xff0c;唯一的区别就是在avformat_open_input第三个参数传入个AVInputFormat参数&#xff0c;这个参数用于指定输入设备的格式&…