2.3.2_3 单链表的建立

news/2025/1/15 15:04:57/

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

引言

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

  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.ppmy.cn/news/1465985.html

相关文章

苹果CMS影视模板源码 模板PC+WAP 可打包成双端APP

下载地址:苹果CMS影视模板源码 模板PCWAP 可打包成双端APP 适用程序:苹果cmsv10 兼容性和面向场景: 1、Windows 平台: IIS/Apache PHP(5.6) MySQL(5.5) 2、Linux/Unix 平台: Apache PHP (5.6) MySQL(5.5)

系统操作规约(System Operation Contract)

领域建模补充 问题: 联系有方向性 属性有类型 领域模型尽量避免出现界面相关的东西 习题 问题 考察点 系统操作规约 示例 A) Operation: MakeSale() Cross References: UC:Purchase Preconditions: User has logged in Postconditions: An ProductLis…

基于BERT+LSTM+CRF深度学习识别模型医疗知识图谱问答可视化系统

基于BERT+LSTM+CRF深度学习识别模型的医疗知识图谱问答可视化系统是一个综合性的系统,它结合了深度学习技术和知识图谱技术,为医疗领域提供了高效、准确的信息查询和问答服务。以下是该系统的详细介绍: 一、系统概述 该系统通过构建医疗领域的知识图谱,结合BERT+LSTM+CRF…

关于IDEA创建Maven一直爆红无法下载的问题

你能看到这我就知道你肯定已经试过了网上的很多方法了,我之前也是,试过了很多一直无法正常下载,我也是找人给 线下看了看解决了,我总结一下从头到尾排除问题,试到最后要是还解决不了你直接私信我,我给你看看…

『大模型笔记』FlashAttention: 具有IO意识的快速且内存高效的精确注意力机制!

Flash Attention的工作,即快速且内存高效的具有IO感知的精确注意力机制! 文章目录 一. 引言1. Flash Attention要点2. 动机:对更长的序列进行建模二. FlashAttention: 具有IO意识的快速且内存高效的精确注意力机制1. Background: Attention is the Heart of Transformers1.1…

uniapp tab组件

1. uniapp tab组件 1.1. 直接拆开使用 <template><view><view class"head-nav"><view :class"navIndex0?activite:" click"checkIndex(0)">设备信息</view><view :class"navIndex1?activite:" c…

Python | R 雌雄配对和鱼仔变异马尔可夫链

&#x1f3af;要点 &#x1f3af;马尔可夫链&#xff1a;&#x1f58a;天气状态马尔可夫链和马尔科夫矩阵 | &#x1f58a;多项式隐马尔可夫模型&#xff0c;及其高斯分布 | &#x1f58a;算法&#xff1a;前向、后向、前向-后向、维特比算法 | &#x1f58a;最大似然学习、特…

LeetCode17电话号码的字母组合

题目描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 解析 广度优先遍历或者深度优先遍历两种方式&#xff0c;广度优先…