2.3.2_3 单链表的建立

喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。
此外,《程序员必备技能》专栏和《程序员必备工具》专栏(该专栏暂未开设)日后会逐步更新,感兴趣的小伙伴可以点一下订阅、收藏、关注!
谢谢大家!

引言

假如有很多个数据元素,怎么把他们存到一个单链表里面

  1. 初始化一个单链表
  2. 每次取一个数据元素,插入到表尾/表头

本节讨论带头结点的情况

尾插法建立单链表

具体代码实现:

typedef struct LNode{ElemType data;struct LNode *next;
}LNode, *LinkList;//初始化一个单链表
bool InitList(LinkList &L){L = (LNode *) malloc (sizeof(LNode));  //分配一个头结点if(L == NULL)       //内存不足,分配失败return false;L->next = NULL;     //头结点之后暂时没有结点return true;
}void test(){LinkList L;InitList(L);//......
}

举例:
初始化单链表
设置变量length记录链表长度

while 循环{ 每次取一个元素e;ListInsert(L, length+1, e)插到尾部; length++;
}

这种操作的时间复杂度为: O ( n 2 ) O(n^2) O(n2),还是很高的


其实完全可以采用更好的方法:
设置一个表尾指针r
每次要插入元素的时候只需要对r进行后插操作就好了[[2.3.2_1 单链表的插入和删除#指定结点的后插操作]]


课本中的代码:

LinkList List_TailInsert(LinkList &L){  正向建立单链表int x;  //设ElemType为整型L = (LNode *) malloc (sizeof(LNode));  //建立头结点LNode *s, *r = L;  //r为表尾指针scanf("%d", &x);  //输入结点的值while(x != 9999){  //输入9999表示结束s = (LNode *) malloc (sizeof(LNode));s->data = x;r->next = s;r = s;        //r指向新的表尾结点scanf("%d", &x);}r->next = NULL;   //尾结点指针置空return L;
}

时间复杂度: O ( n ) O(n) O(n)

头插法

课本中的代码:

LinkList List_HeadInsert(LinkList &L){  //逆向建立单链表LNode *s;int x;L = (LNode *) malloc (sizeof(LNode)); //创建头结点L->next = NULL; //初始化为空链表scanf("%d", &x); //输出结点的值while(x != 9999){ //输入9999表示结束s = (LNode *) malloc (sizeof(LNode)); //创建新结点s->data = x;s->next = L->next;L->next = s; //将新结点插入表中,L为头指针scanf("%d", &x);}return L;
}

知识回顾和重要考点

头插法、尾插法:
核心就是初始化操作、指定结点的后插操作
尾插法要注意设置一个指向表尾的指针
头插法的重要应用:
链表的逆置(经常考察)

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

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

相关文章

【AI 大揭秘】ChatGPT 写作绝技与必备提示词大全

利用ChatGPT撰写文章是一种极具创意的方法,它能显著提升您的写作效率,并帮助您创作出高质量的内容。通过人工智能的辅助,您可以迅速、便捷地生成精美文章,或至少为您的下一个写作项目提供灵感。 不管您是在撰写文章、剧本还是电子…

react路由参数path不再支持正则?比较v5和v6写法的差异性

文章目录 前言v5方式:直接在path参数中,写入对应正则(1)代码详细注释如下(2)页面输出如下,会出现undefined的情况 v6方式: 在路由对象中配置,但只可配动态路由,不可用正则…

TH方程学习(4)

一、背景介绍 在本节将会对TH方程打包成一个函数,通过输入目标星的轨道要素,追踪星在目标星VVLH坐标系下的相对位置和速度,以及预报的时间,得到预报时刻追踪星在VVLH坐标系下的位置和速度,以及整个状态转移矩阵。 合并…

替换所有的问号 ---- 模拟

题目链接 题目: 分析: 我们只需要遍历字符串, 将所有?进行修改即可但是需要判断, 修改的字符不能和前面后面重复同时, 有一个细节需要处理, 就是当?在最前面时, 没有前面的符号需要判断 在最后面的时候, 没有后面的字符需要判断 代码: class Solution {public String mod…

Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践

系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游&#xff…

面试题--this关键字

this 指向是前端面试中的常问题型,简单分析为以下几种: 1. 在全局作用域中,this 关键字固定指向全局对象 window 或者 global。 2. 在函数作用域中,取决于函数是如何被调用的。 1)函数直接调用,this 指向…

Leetcode 3169. Count Days Without Meetings

Leetcode 3169. Count Days Without Meetings 1. 解题思路2. 代码实现 题目链接:3169. Count Days Without Meetings 1. 解题思路 这一题的话我们只需要先对meeting的时间进行一下排序,然后不断更新当前连续开会的时间即可。当某一个会议开始时&#…

Java中lambda表达式是啥怎么使用

在Java中,Lambda表达式(也称为闭包)是一种简洁地表示匿名函数(即没有名称的函数)的方式。它们允许你将函数作为参数传递或赋值给变量,从而简化代码。Lambda表达式在Java 8及更高版本中引入。 Lambda表达式…

打造智能化未来:智能运维系统架构解析与应用实践

在数字化转型的大背景下,智能运维系统成为了企业提升效率、降低成本、增强安全性的关键利器。本文将深入探讨智能运维系统的技术架构,介绍其核心要素和应用实践,帮助读者全面了解智能运维系统的概念、优势和应用价值。 ### 1. 智能运维系统的…

如何进入 -MGMTDB目录

想想这个问题,大家可能觉得很简单吧,先不看答案,你试一试如何进去 1.问题现象: 我直接进入: cd -MGMTDB 直接就报错了: [gridhost03 _mgmtdb]$ cd -MGMTDB -bash: cd: -M: invalid option cd: usage: c…

Rust struct

Rust struct 1.实例化需要初始化全部成员变量2.如果需要实例化对象可变,加上mut则所有成员变量均可变 Rust支持通过已实例化的对象,赋值给未赋值的对象的成员变量 #![allow(warnings)] use std::io; use std::error::Error; use std::boxed::Box; use s…

【NumPy】深入解析numpy中的 iscomplex 方法

🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地!🎇 🎓 博主简介: 我是云天徽上,一名对技…

下载文件流

export function downloadFile(file, name, type) { const link document.createElement(‘a’) link.href window.URL.createObjectURL(new Blob([file], { type: type })) link.target ‘_blank’ link.download name document.body.appendChild(link) link.click() docu…

Mujoco仿真【xml文件的学习 4】

在学习Mujoco仿真的过程中,mujoco的版本要选择合适。先前我将mujoco的版本升级到了mujoco-3.1.4,在运行act的仿真代码时遇到了问题,撰写了博客: Aloha机械臂的mujoco仿真问题记录-CSDN博客 下面在进行mujoco仿真时,统…

从0开发一个Chrome插件:开发Chrome插件的必要知识

前言 这是《从0开发一个Chrome插件》系列的第二篇文章,本系列教你如何从0去开发一个Chrome插件,每篇文章都会好好打磨,写清楚我在开发过程遇到的问题,还有开发经验和技巧。 专栏: 从0开发一个Chrome插件:什么是Chrome插件? 尽请期待~ Chrome 插件的基本结构 一个C…

Superset二次开发之PG数据库备份策略

背景:基于Superset项目3.0版本二次开发,线上运行之后,需要处理和维护后续的PG数据的备份,迁移,回滚,校验等环节 Superset 默认使用 PostgreSQL(简称 PG)作为其元数据数据库。这个数据库在 Superset 项目中扮演了关键角色: 存储元数据: PG 数据库存储 Superset 的所有…

十_信号3-可重入函数

如上图所示链表,在插入节点的时候捕获到了信号,并且该信号的自定义处理方式中也调用了插入节点的函数。 在main函数中,使用insert向链表中插入一个节点node1,在执行insert的时,刚让头节点指向node1以后(如上图序号1)&…

MySQL学习——获取数据库和表格的信息

如果忘记了数据库或表的名称,或者不确定给定表的结构(例如,其列的名称),该怎么办呢?MySQL通过几个语句解决了这个问题,这些语句提供了有关它支持的数据库和表的信息。 你之前已经看过SHOW DATA…

linux系统下,mysql增加用户

首先,在linux进入mysql mysql -u root -p 然后查看当前用户: select user,host from user; 增加用户语句: CREATE USER 用户名host范围 IDENTIFIED BY 密码;

【操作系统】Linux、Windows各平台CoreDump机制实现详解

LinuxCoreDump机制是Unix/Linux操作系统中的一种功能,它允许在程序异常终止时,将程序的内存状态保存到一个文件中,这个文件通常被称为core文件。以下是CoreDump机制的原理和实现步骤: 信号触发:CoreDump通常由特定的信…