当前位置: 首页 > ops >正文

【数据结构】单链表

一 概念结构

概念:

链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

结构:

【头】-【】-【】-【】-【】-【】-【】-【】-【尾】

链表的打印

尾插

创建SLTBuyNode函数,开辟新空间,创建一个新的结点,方便后续操作。

注意

因为要改变原链表(指针),所以要使用传址调用,那么就是传指针的地址,所以要使用双指针(**pphead)。

要多注意ptai与pphead的对应关系

ptail -> *pphead

时间复杂度:O(n)

头插:

相对尾插较为简单。

时间复杂度:O(1);

尾删:

注意判断是否是只有一个结点即可

时间复杂度:O(n)

头删:

时间复杂度:O(1)

由此看来,单链表的头部操作要优于顺序表的头部操作,但单链表的尾部操作是没有顺序表快的。所以要看使用情况,再决定使用什么工具。

查找:

注意:未找到时,要返回NULL;

时间复杂度:O(n)

指定位置之前插入数据

注意:

判断是否是第一个和结点。

如果是第一个结点,就相当与头插。不是第一个节点,需要找到pos位置,并且保留pos前一个位置prev,最后连接,prev->newnode->pos

时间复杂度:O(n)

指定位置之后插入数据

相对于之前,之后要简单点,且传入的参数不需要原头节点了,因为此操作只影响pos之后的链表,只需要传入pos指针即可。

时间复杂度:O(1)

删除pos位置的结点 

同样是先判断pos是否是头结点

若不是头结点,则需要找到pos前一个的位置,通过更改prev->next的数据,实现删除pos

free后要记得 = NULL;

时间复杂度:O(n)

删除pos位置之后的结点

注意:pos位置和pos->next都不能是NULL。

时间复杂度:O(1)

对于单链表pos之后的操作,时间复杂度都是O(1),因为不需要遍历。

销毁链表

与顺序表不同,顺序表是连续的空间,只需要free(arr)即可,单链表每一个结点都是单独的空间,所以需要把每一个结点都free掉。

时间复杂度:O(n)

单链表总结:

链表头部的插入删除O(1)

链表尾部的插入删除O(n)

链表无需扩容

链表不存在空间浪费

http://www.xdnf.cn/news/4506.html

相关文章:

  • Qt开发经验 --- 避坑指南(6)
  • Android接入国标平台:工业现场级的GB28181移动端接入实践
  • ps信息显示不全
  • 【纯小白博客搭建】Hugo+Github博客部署及主题(stack)美化等界面优化记录
  • 基于STM32、HAL库的ZMOD4410AI1R 气体传感器驱动程序设计
  • qwen2.5vl
  • 考研数据结构之树形查找:二叉排序树、平衡二叉树与红黑树(包含真题解析)
  • 使用 Couchbase Analytics Service 的典型步骤
  • 【面板数据】公开整理-各省刑事案件统计数据集(2011-2023年)
  • Java01-初识Java
  • C 语言 第六章 结构体(1)
  • 短词匹配:拼音相似度
  • LeetCode热题100--73.矩阵置零--中等
  • C语言初阶--数组
  • GSENSE2020BSI sCMOS科学级相机主要参数及应用场景
  • 探针卡的类型及其在半导体测试中的应用
  • Java高频面试之并发编程-13
  • 奥威BI:AI驱动的智能财务分析革新,重塑企业决策新范式
  • 深入探索 Spark RDD 行动算子:功能解析与实战应用
  • Python基础语法(上)
  • 从图灵机到量子计算:逻辑可视化的终极进化
  • 基于C++实现(控制台)交通咨询系统
  • C语言指针用法详解
  • 切片和边缘计算技术分析报告
  • 【今日三题】跳台阶扩展问题(找规律) / 包含不超过两种字符的最长子串 / 字符串的排列(回溯—全排列)
  • 架设手游使用游戏盾SDK怎么提升网络速度?
  • 【ROS2】Nav2源码之行为树定义、创建、加载
  • 六级阅读———2024.12卷一 仔细阅读2
  • 城楼预约(二):参数逆向分析思路
  • 挑战用豆包教我学Java01天