C++数据结构之链表(详解)

这篇具有很好参考价值的文章主要介绍了C++数据结构之链表(详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主要参考文章地址 01.链表基础知识 | 算法通关手册 (itcharge.cn))

本次内容是对链表的总结,可以看了上面的文章之后。

在看我下面的内容,做一个简短的复习,且本内容的代码均用C++实现,而参考资料的代码则为python。

每一个标题都有一个完整的链接,也可以点击下面的链接。


单链表
双链表
循环链表
内核链表和企业链表
链表的排序

1 链表简介

链表的定义

一种线性表数据结构。它使用一组任意的存储单元,来存储一组具有相同类型的地址,但是链表一般是内嵌到数据结构中,而数据结构的类型可以是不同的。

2 单链表

c++ 链表,数据结构,算法与思维,数据结构,链表,c++

优缺点:

  • 优点:存储空间不必事先分配;一些操作效率远比数组高(插入,移动,删除)
  • 缺点:占用空间比数组多。

3 双链表

简而言之,就是节点同时拥有前驱指针和后继指针。使得使用更加的灵活

4 循环链表

简而言之,就是在双链表的基础上,末尾的后继指针不在指向NULL,而是指向头节点

5 内核链表和企业链表

企业和内核中使用链表,和我们常用的方式有所不同,如下所示,整体可以看作一个数据域,而指针域则内嵌在数据域之中。

c++ 链表,数据结构,算法与思维,数据结构,链表,c++

6 链表的排序

对于链表的排序算法,除了希尔排序之外,且堆排序不建议,其他排序方法都是支持的,如下:

冒泡排序,选择排序,插入排序,归并排序,快速排序,计数排序,桶排序和基数排序。

具体的算法可以参考上述链接。

7 链表的双指针

双指针(Two Pointers):指的是在遍历元素的过程中,不是使用单个指针进行访问。

  • 而是使用两个指针进行访问,从而达到相应的目的。如果两个指针方向相反,则称为「对撞时针」。
  • 如果两个指针方向相同,则称为「快慢指针」。
  • 如果两个指针分别属于不同的数组 / 链表,则称为「分离双指针」。
对撞指针

对于单链表而言,是不能够反向指的,所以一般不会用到对撞指针。可能对于循环链表,可以尝试使用两个指针朝着不同的方向进行移动。

  • 适用范围:一般是在有序的数据结构中使用。
快慢指针

起点不一致的快慢指针

顾名思义,就是两个指针的起点不一样,然后他们的速度可以是一样的。

快指针fast比慢指针slow先走n步,知道快指针移动到链表尾端为止。

  • 比如你要定位到单向链表的指针最后一个节点的前一个节点,那么你就需要两个指针,且前一个指针先走1步。

步长不一致的快慢指针

步长不一致,比如fast指针每次移动2步,慢指针每次移动一步,这样就可以得到链表数据中间的节点。可以借此实现二分法查找。

还可以用来判断链表是否成环问题。

分离双指针

这里最简单的例子就是链表在执行归并排序的时,就需要将左,右两个链表进行合并,就需要两个分离指针进行链表合并。


总结:

因为第7点的内容不多,这里不涉及刷题,所以第7点就直接总结了。

剩下的详细内容,可以在链接中看到。文章来源地址https://www.toymoban.com/news/detail-608507.html

到了这里,关于C++数据结构之链表(详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小白也能学会的链表 | C++ | 算法与数据结构 (新手村)

    本质:找到两个有序数据段中的第一个相同数据 解题:利用set的不重复性,首先把headA都塞到set中,再遍历headB找有没有已经出现在set中的节点即可。 注意! set的数据是ListNode* 不是 int。如果是int可能出现节点不同但是var相同的情况,而ListNode* 就不会。 时间复杂度:O(2n)

    2024年02月14日
    浏览(46)
  • 数据结构之链表

    头文件 自定义函数 主函数 效果图  

    2024年01月25日
    浏览(44)
  • 【数据结构】线性表之链表

    上一篇文章讲述了线性表中的顺序表,这篇文章讲述关于链表的定义、类别、实现、多种不同链表的优缺点和链表与顺序表的优缺点。 关于上一篇文章的链接:线性表之顺序表 链表是一种物理存储结构上 非连续、非顺序 的存储结构,数据元素的逻辑顺序是通过链表中的指针

    2024年02月05日
    浏览(44)
  • C语言数据结构之链表

    在上一篇博客中我们提到,线性表包括顺序表和链表,顺序表在上篇博客中已经介绍,本篇博客介绍一下另一种线性表—— 链表 。 概念:链表是⼀种 物理存储结构上⾮连续、⾮顺序 的存储结构,数据元素的 逻辑顺序是通过链表中的指针链接次序实现的 。 链表的结构跟⽕

    2024年04月22日
    浏览(38)
  • C语言进阶——数据结构之链表(续)

    hello,大家好呀,我是Humble,本篇博客承接之前的 C语言进阶——数据结构之链表 的内容 (没看过的小伙伴可以从我创建的专栏C语言进阶之数据结构 找到那篇文章并阅读后在回来哦~) ,上次我们重点说了链表中的 单链表 ,即 不带头单向不循环链表 还说到了链表的分类虽

    2024年01月25日
    浏览(53)
  • 数据结构之链表练习与习题详细解析

    个人主页:点我进入主页 专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶 C语言刷题       数据结构初阶 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.前言 2.习题解析 2.1习题一 2.2习题二 2.3习题三 2.4习题四 2.

    2024年02月05日
    浏览(39)
  • C/C++数据结构之链表题目答案与解析

    个人主页:点我进入主页 专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶 C语言刷题       数据结构初阶 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.前言  2.题目解析 2.1 移除链表元素 2.2反转链表 2.3链表的中

    2024年02月05日
    浏览(50)
  • 【023】C/C++数据结构之链表及其实战应用

    💡 作者简介:专注于C/C++高性能程序设计和开发,理论与代码实践结合,让世界没有难学的技术。包括C/C++、Linux、MySQL、Redis、TCP/IP、协程、网络编程等。 👉 🎖️ CSDN实力新星,社区专家博主 👉 🔔 专栏介绍:从零到c++精通的学习之路。内容包括C++基础编程、中级编程、

    2024年02月08日
    浏览(48)
  • 数据结构之链表 - 超详细的教程,手把手教你认识并运用链表

    顺序表只适合静态的查找和更新,不适合插入和删除元素, 因为在ArrayList中插入和删除元素时,由于需要将后序元素往前后者往后移动,所以时间复杂度会相当高,能达到O(N)。 为了解决这一问题,java 引入了 LinkedList(链表)。 链表是一种 逻辑上连续,物理上不连续 的存储结

    2024年02月09日
    浏览(44)
  • 【c++学习】数据结构中的链表

    链表与线性表相对,链表数据在内存中的存储空间是不连续的,链表每个节点包含数据域和指针域。 下述代码实现了链表及其接口 包括增、删、查、改以及其他一些简单的功能 运行结果: 于 2024-01-23 第一次整理编写 学习时整理,不当之处烦请指正 码字不易,留个赞再走吧

    2024年01月24日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包