数据结构(十)——头插法和尾插法建立单链表

news2024/10/2 8:37:58

😀前言
在数据结构中,单链表是一种常见的数据结构,它由一个头节点和若干个数据节点组成。创建单链表的过程可以通过头插法或尾插法来实现。头插法是将新节点插入到链表的头部,而尾插法是将新节点插入到链表的尾部。本文将介绍头插法和尾插法建立单链表的具体实现方法。

🏠个人主页:尘觉主页

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊

文章目录

  • 数据结构(十)——头插法和尾插法建立单链表
    • 创建链表(头插法)O(n)
    • 创建链表(尾插法)O(n)
    • 总结插入和删除操作算法的不同
    • 😄总结

数据结构(十)——头插法和尾插法建立单链表

创建链表(头插法)O(n)

创建单链表的过程就是动态生成链表的过程,即从空表的初始状态起依次建立各元素结点,并逐个插入链表

  • 单链表(Single Linked List)
  • 单链表由头节点(不存放数据只存放下个节点的地址)和n个节点组成,
  • 每个节点分为两个域:数据域和指针域(存放下个节点的地址)
  • 第n个节点的指针域为NULL

image-20230919083139416

image-20230919083421621

void CreatLL_H(LinkList L, int n)
    //用此方法创建的链表,遍历的顺序和创建的顺序相反
    {
        printf("Please input %d numbers:", n);
        for (int i = 0; i < n; i++) {
            LinkList p = (LinkList)malloc(sizeof(LNode));
            int data;
            scanf(" %d", &data); //%d前面的空格代表清除制表符回车等符号
            p->data = data;
            p->next = L->next;
            L->next = p;
    }
}

创建链表(尾插法)O(n)

image-20230919083401917

void CreatLL_R(LinkList L, int n) {
        printf("Please input %d numbers:", n);
        LinkList ptail;
        ptail = L;
        for (int i = 0; i < n; i++) {
            LinkList pnew;
            pnew = (LinkList)malloc(sizeof(LNode));
            int data;
            scanf(" %d", &data);
            pnew->data = data;
            pnew->next = NULL;
            ptail->next = pnew;
            ptail = pnew;
    }
}

总结插入和删除操作算法的不同

while (p){
	p = p->next;
}//最终p的值为NULL
	while(p->next){
	p = p->next;
}//最终p的值为最后一个节点的地址
//---------------------插入----------------------
//如果插入操作的position不合法,即position > n+1(n为链表长度),那么p一定会指向NULL,此时按照退出条件!p可以返回ERROR
if (!p || i>position-1) return ERROR;
//但是如果采用:
while(p->next)
//则最终会指向链表最后一个节点,即使position不合法,那么也会在最后一个节点后方插入新节点
//所以使用:
while(p)
---------------------删除----------------------
//如果删除操作的positoin不合法,即position>链表长度,p会指向,最后一个节点的地址(position ==n+1时)或是NULL(position > n+1),那么下面的代码会出错
LinkList pfree = p->next;
//如果p指向最后一个节点,此时pfree指向NULL。如果p指向NULL,此时pfree指向非法空间(不受主程序控制),从而导致下面代码报错
*e = pfree->data;
//所以需要增加一个判断条件
if (i>position-1 || !p || !p->next) return ERROR;
//必须保证 !p 要在 !p->next的左边,即position > n+1 的情况
//这是因为如果 !p->next 在 !p 的左边,如果p指向NULL,那么NULL->next会报错

😄总结

通过头插法和尾插法可以有效地创建单链表。头插法的创建过程是从链表的头部开始,逐个插入新节点,最终得到的链表的顺序与插入顺序相反。而尾插法的创建过程是从链表的尾部开始,逐个插入新节点,最终得到的链表的顺序与插入顺序相同。两种方法都可以在O(n)的时间复杂度内完成链表的创建。在插入和删除操作时,需要注意判断位置是否合法,以避免出现错误。头插法和尾插法在不同的应用场景中有不同的优势,可以根据具体需求选择合适的方法来创建单链表。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

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

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

相关文章

qt 格式化打印 日志 QMessagePattern 格式词法语法及设置

一、qt源码格式化日志 关键内部类 QMessagePattern qt为 格式化打印日志 提供了一个简易的 pattern(模式/格式) 词法解析的简易的内部类QMessagePattern,作用是获取和解析自定义的日志格式信息。 该类在qt的专门精心日志操作的源码文件Src\qtbase\src\corelib\global\qloggi…

ChatGPT预训练的奥秘:大规模数据、Transformer架构与自回归学习【文末送书-31】

文章目录 ChatGPT原理与架构ChatGPT的预训练ChatGPT的迁移学习ChatGPT的中间件编程 ChatGPT原理与架构&#xff1a;大模型的预训练、迁移和中间件编程【文末送书-31】 ChatGPT原理与架构 近年来&#xff0c;人工智能领域取得了巨大的进展&#xff0c;其中自然语言处理&#xf…

微信小程序onLoad加载定义好的函数

这里小程序开发中容易犯的错误-1 给客户做一个程序。需要在页面加载的时候在onLoad(options){}中加载定义好的函数&#xff0c;代码如下 onLoad(options) {get_week_()},运行时老报错 后来修改为正确的代码 onLoad(options) {this.get_week_()//必须加this},再尝试运行&#x…

java学习(Arrays类和System类)

目录 一.Arrays类 二.System常见方法 一.Arrays类 Arrays包含了一系 列静态方法&#xff0c;用于管理或操作数组&#xff08;比如排序和搜索&#xff09; Integer[] s{1,2,3};//1.Arrays.toString方法&#xff0c;遍历数组//2.Arrays.sortArrays.sort(s);//默认排序&#xf…

幕译--本地字幕生成与翻译--Whisper客户端

幕译–本地字幕生成与翻译 本地离线的字幕生成与翻译&#xff0c;支持GPU加速。可免费试用&#xff0c;无次数限制 基于Whisper&#xff0c;希望做最好的Whisper客户端 功能介绍 本地离线&#xff0c;不用担心隐私问题支持GPU加速支持多种模型支持&#xff08;中文、英语、日…

Anaconda prompt运行打开jupyter notebook 指令出错解决方案

一、打不开jupyter notebook网页 报错如下&#xff1a; Traceback (most recent call last): File “D:\anaconda3\lib\site-packages\notebook\traittypes.py”, line 235, in _resolve_classes klass self._resolve_string(klass) File “C:\Users\DELL\AppData\Roaming\Py…

idea2023版使用废弃类没有删除线处理方法

idea2023版使用废弃类没有删除线处理方法 新版Idea使用废弃类时,默认是黄色警告处理方法1. 打开file -> setting2. 编辑(Editor) -> 检查(Inspections) -> 搜索Deprecated API usage 新版Idea使用废弃类时,默认是黄色警告 处理方法 1. 打开file -> setting 2. 编…

Linux系统架构----LNMP平台部署中部署wordpress

Linux系统架构----LNMP平台部署中部署wordpress 一、LNMP的概述 LNMP为Linux平台&#xff0c;Nginx web服务软件&#xff0c;mysql数据库软件&#xff0c;PHP编辑语言LNMP系统架构相对于LAMP的优点是LNMP比较节省内存&#xff0c;主要支持静态请求&#xff0c;但在访问量大的…

Excel中的subtotal函数

咋一看subtotal函数&#xff0c;感觉很陌生&#xff0c;但其实这个函数我们有可能在无意中碰到过。如果经常有求和需求的小伙伴&#xff0c;碰到这个函数概率比较大&#xff0c;只要在筛选的情况下&#xff0c;进行自动求和&#xff0c;都会出现这个公式。那这个函数是怎么用的…

CVE-2021-31440:eBPF verifier __reg_combine_64_into_32 边界更新错误

文章目录 前言漏洞分析构造 vuln reg 漏洞利用漏洞修复参考 前言 影响版本&#xff1a;Linux 5.7 ~ 5.11.20 8.8 编译选项&#xff1a;CONFIG_BPF_SYSCALL&#xff0c;config 所有带 BPF 字样的编译选项。General setup —> Choose SLAB allocator (SLUB (Unqueued Allocat…

初识Python(helloworld、海洋距离单位换算、打印名片、文本进度条、判断水仙花数)

一、Python3的安装&#xff0c;IDLE的使用&#xff1a;使用print函数输出”hello world”&#xff1b; 二、 PyCharm的安装与使用&#xff1a;创建”hello_world.py”文件并使用print函数输出”hello world” 三、海洋单位距离换算 要求&#xff1a;运行代码&#xff0c;控制台…

PostgreSQL中In, Exists在SQL查询中到底有无区别

前言 SQL查询当中&#xff0c;In和Exists子查询到底有无区别&#xff1f;记得很多年以前&#xff0c;确实是有相关的使用戒条的&#xff0c;或者说存在一些使用的惯用法。试图完全抹开两者的区别&#xff0c;就有点过了。 两者的主要区别&#xff1a; 从目的上讲&#xff0c…

三栏布局的实现方法

1. 什么是三栏布局 常见的一种页面布局方式&#xff0c;将页面分为左栏、中栏和右栏左右两侧的盒子宽度固定&#xff0c;中间的盒子会随屏幕自适应一般中间放主体内容&#xff0c;左右两边放辅助内容 2. 如何实现三栏布局 2.1 弹性布局 将最外层盒子设为弹性布局&#xff0…

截图软件Snipaste在截图文本无法输入C

1、现象&#xff1a; 远程桌面使用截图软件Snipaste&#xff0c;在输入文本时C键无效&#xff0c;猜测是优先级问题导致 2、解决方法&#xff1a; 在右下角图标上鼠标右键&#xff0c;点击首选项 打开配置文件 在[Snip]下粘贴&#xff1a;do_not_omit_synthesized_ctrue Ctrl…

计算两帧雷达数据之间的变换矩阵

文章目录 package.xmlCMakeLists.txtpoint_cloud_registration.cc运行结果 package.xml <?xml version"1.0"?> <package format"2"><name>point_cloud_registration</name><version>0.0.0</version><descriptio…

【嵌入式——QT】MDI应用程序设计

MDI应用程序就是在主窗口里创建多个同类型的MDI子窗口&#xff0c;这些MDI子窗口在主窗口里显示&#xff0c;并享受主窗口上的工具栏和菜单等操作功能&#xff0c;主窗口上的操作都针对当前活动的MDI子窗口进行。 图示 代码示例 QWMainWindow.h #ifndef QWMAINWINDOW_H …

Jetpack Navigation

1.Navigation的诞生与优势 这个留到Compose去学

Unity 和 OpenCV:结合计算机视觉和游戏开发

文章目录 前言一、Unity 中集成 OpenCV1. 安装OpenCV plus Unity 插件2. 导入 OpenCV 包 二、图像处理应用程序的创建1. 实时轮廓检测2. 粒子发射器3. 碰撞区域 三、效果四、总结 前言 Unity 和 OpenCV 是两个强大的开发工具&#xff0c;分别用于游戏开发和计算机视觉。结合它…

【国产MCU】-CH32V307-SysTick中断与延时功能实现

SysTick中断与延时功能实现 文章目录 SysTick中断与延时功能实现1、SysTick介绍2、SysTick中断使用3、SysTick实现微秒和毫秒延时功能CH32V307的RISC-V内核控制器自带的一个64位可选递增或递减的计数器,用于产生SYSTICK异常(异常号:15),可专用于实时操作系统,为系统提供“…

大模型的“淬炼”

——大模型也要经历“琢石成玉”的过程。 大规模语言模型的训练流程的确可以根据不同的模型架构、应用场景以及资源限制等因素有所变化。预训练和微调是最基本也是最常见的两个阶段&#xff0c;几乎在所有现代大模型训练流程中都会出现。而诸如奖励建模、强化学习尤其是人类反馈…