【408数据结构与算法】—单链表的基本操作(六)

简介: 算法的思路:分别取出第3个元素和第i个元素的内容。

【408数据结构与算法】—单链表的基本操作(六)

一、单链表—取第i个元素值

算法的思路:分别取出第3个元素和第i个元素的内容。从链表的头指针出发,顺着链域next逐个结点往下搜索,直到搜索到第i个结点为止,因此,链表不是随机存取结构

2345_image_file_copy_142.jpg

算法的思路:

  • 从第1个结点(L->next)顺链扫描,用指针p指向当前扫描到的结点,p初始值p=L->next
  • j做计数器,累计当前扫描过的节点数,j的初始值为1
  • 当p指向扫描到的下一结点时,计数器j加1
  • 当j==i时,p所指的结点就是要找的第i个结

2345_image_file_copy_143.jpg

二、单链表—按值查找

按值查找—根据指定数据获取该数据所在的位置(地址)例如:分别查找30和值为15的元素

2345_image_file_copy_144.jpg

算法步骤:

  • 从第一个结点起,依次和e相比较
  • 如果找到一个其值与e相等的数据元素,则返回其在链表中的位置或地址
  • 如果查遍整个链表都没有找到其值和e相等的元素则返回0或null

算法描述

2345_image_file_copy_145.jpg

算法设计—根据指定数据获取该数据位置序号

三、单链表—插入

插入—在第i个结点前插入值为e的新结点

2345_image_file_copy_147.jpg

算法步骤:

  • 首先找到ai-1的存储位置p
  • 生成一个数据域为e的新结点s
  • 插入新结点:新结点的指针域指向结点ai;结点ai-1的指针域指向新结点

2345_image_file_copy_148.jpg

2345_image_file_copy_149.jpg

  • 📢思考:步骤1和步骤2能互换位置吗?先执行2后执行1,可以吗?
    📢不可以,会丢失ai的地址

算法描述:

2345_image_file_copy_150.jpg

四、单链表—删除

  • 删除第i个结点

2345_image_file_copy_151.jpg

  • 算法步骤:
  • 首先找到ai-1的存储位置p,保存要删除的a的值
  • 令p->next指向ai+1
  • 释放结点ai的空间

2345_image_file_copy_152.jpg

算法描述

2345_image_file_copy_153.jpg

五、单链表的查找时间效率分析

2345_image_file_copy_154.jpg

  • 查找:因线性表只能顺序存取,即在查找时要从头指针找起,查找的时间复杂度为O(n)
  • 插入和删除:因线性表不需要移动元素,只要修改指针,一般情况下时间复杂度为O(1); 但是,如果要在单链表中进行前插或删除操作,由于要从头查找前驱结点,所耗时间复杂度为O(n)

六、单链表的建立

1️⃣ 建立单链表—头插法:元素插入在链表头部,也叫前插法

算法思路:

  • 从一个空表开始,重复读入数据
  • 生成新结点,将读入数据存放到新结点的数据域中
  • 从最后一个结点开始,依次将各结点插入到链表的前端

例如:建立链表L(a,b,c,d,e)

2345_image_file_copy_155.jpg

2345_image_file_copy_156.jpg

2345_image_file_copy_157.jpg

2️⃣ 建立单链表—尾插法:元素插入在链表尾部,也叫后插法

  • 从一个空表L开始,将新结点逐个插入到链表的尾部,尾指针r指向链表的尾结点。
  • 初始时,r同L均指向头结点,每读一个数据元素则申请一个新结点,将新结点插入到尾结点后,r 指向新结点

2345_image_file_copy_158.jpg

2345_image_file_copy_159.jpg

2345_image_file_copy_160.jpg

相关文章
|
1月前
|
存储 算法 Perl
数据结构实验之链表
本实验旨在掌握线性表中元素的前驱、后续概念及链表的建立、插入、删除等算法,并分析时间复杂度,理解链表特点。实验内容包括循环链表应用(约瑟夫回环问题)、删除单链表中重复节点及双向循环链表的设计与实现。通过编程实践,加深对链表数据结构的理解和应用能力。
57 4
|
2月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
79 1
|
2月前
|
算法 索引
❤️算法笔记❤️-(每日一刷-141、环形链表)
❤️算法笔记❤️-(每日一刷-141、环形链表)
53 0
|
2月前
|
算法
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
52 0
|
26天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
52 5
|
1月前
|
存储 C语言
【数据结构】手把手教你单链表(c语言)(附源码)
本文介绍了单链表的基本概念、结构定义及其实现方法。单链表是一种内存地址不连续但逻辑顺序连续的数据结构,每个节点包含数据域和指针域。文章详细讲解了单链表的常见操作,如头插、尾插、头删、尾删、查找、指定位置插入和删除等,并提供了完整的C语言代码示例。通过学习单链表,可以更好地理解数据结构的底层逻辑,提高编程能力。
93 4
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
1月前
|
算法
数据结构之购物车系统(链表和栈)
本文介绍了基于链表和栈的购物车系统的设计与实现。该系统通过命令行界面提供商品管理、购物车查看、结算等功能,支持用户便捷地管理购物清单。核心代码定义了商品、购物车商品节点和购物车的数据结构,并实现了添加、删除商品、查看购物车内容及结算等操作。算法分析显示,系统在处理小规模购物车时表现良好,但在大规模购物车操作下可能存在性能瓶颈。
49 0
|
2月前
|
存储 缓存 算法
经典算法之链表篇(三)
经典算法之链表篇(三)