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

C++算法之代码随想录(链表)——基础知识

(1)什么是链表

        链表是一种线性数据结构。常见的单链表由两部分组成,value(存储节点的值)和next(存储指向下一个节点地址的指针)。链表的头节点称为head。创建链表一般使用结构体(struct)。例如。

strcut  Node{int value;Node* next;Node(int x):val(x),next(null) { } //构造函数}

(2)链表的分类

        1.单链表——(最常用)上面介绍过了。

        2.双向链表 ——每个节点中除了value和next外,还有个指针prev指向上一个节点。头节点的prev指向null。例如 

strcut  B_Node{B_Node* prev;int value;B_Node* next;B_Node(int x):val(x),next(null),prev(null) { } //构造函数}

        3.循环链表——与双向链表非常相似,不同点是循环链表的头节点中的prev指针指向尾节点。尾节点的的next指针指向头结点。形成了一个环。

(3)链表的存储

        链表的存储在内存中是不连续的,只能通过节点指针的方式进行访问。

(4)链表的定义

        通过结构体(strcut)创建,一般也就是上边的两种形式。构造函数可写可不写。不写C++会自动创建一个。不过不会初始化成员变量。

(5)链表的操作

        1.添加节点。链表的访问只能通过指针进行。想要添加节点,就要把上一个节点的指针指向要添加的节点,再把添加的节点的指针原来的下一个节点即可。

        2.删除节点:同样通过节点指针实现。将要删除的节点的上一个节点的指针指向删除节点指针指向的下一个节点即可。同时释放删除节点的内存。

        这个结合图解看比较容易理解。可以看代码随想录的图解。

(6)性能分析

        插入和删除:O(1);直接尾部插入即可。

        访问:O(n);只能线性访问。

        适合场景:数据量不固定,频繁插入和删除,较少查询的。

        可以与数组进行对比。(它俩刚好相反,自己想一想)

        链表的基础知识就这么多,但它是一种很重要的数据结构。理解其特性才能更好的解决相关的算法题。


http://www.mrgr.cn/news/98043.html

相关文章:

  • mujoco graspnet 仿真项目的复现记录
  • Python学习笔记(二)(字符串)
  • 【后端开发】初识Spring IoC与SpringDI、图书管理系统
  • 力扣热题100刷题day63|49.字母异位词分组
  • C++指针(四)万字图文详解!
  • 嵌入式MCU常用模块
  • C语言:位段
  • MCP基础学习四:MCP在AI应用中的集成(MCP在AI应用中的完整架构图)
  • 面试题之网络相关
  • 算法驱动的场景识别:规则引擎与机器学习的强大结合
  • C++中作用域public,private,protected说明
  • SSRF打靶总结
  • 浅析Centos7安装Oracle12数据库
  • 《计算机名人堂》专栏介绍:先驱之路
  • leetcode 322. Coin Change
  • VMware虚拟机Ubuntu磁盘扩容
  • 【教学类-102-08】剪纸图案全套代码08——Python点状虚线优化版本02(有空隙)+制作1图2图6图24图
  • MySQL 进阶 - 2 ( 15000 字详解)
  • 蓝桥杯补题
  • ubuntu22.04下安装mysql以及mysql-workbench