[数据结构与算法] 学习记录合辑 (02) 链表

  • 该合辑为笔者自b站自学的“C++数据结构与算法”课程学习记录,旨在将重要的学习要点、思考内容与部分代码进行记录,以便后续自行翻看,亦可给其他读者带来一些参考
  • 内容基于笔者自身的理解或感悟,可能存在不妥当或是错误之处
  • 系统环境:Win10,Visual Studio 2019
  • 图片参考东北大学“数据结构与算法设计”(2020)线上课程讲义

目录

单向链表

循环链表

双向链表

双向循环链表

游标链表 


链表在内存中非连续,利用指针来记录元素之间的位置关系,其还可以细分为单向、双向、循环、双向循环、游标链表等,其各有利弊 

总体来说,链表比数组实现起来更为为复杂,内存的开销也更大,但其增删操作比数组要更有效率(不用移动所有元素),且在创建时不用考虑开辟多大的内存空间(数组如果为了保险把内存空间开大了可能会造成空间的浪费)

在C++中使用 #include<list>来使用STL链表相关功能,编程事半功倍

单向链表

 带有Header头结点,占用空间+1,存储着首元素的指针,无法backword退回,因只用存储后继元素的地址,故一个node节点的占用空间相较于双向链表更小

循环链表

 与单链表相比,其末尾元素所存放指针的位置不为空,而是存储首元素的指针,因此可以实现由尾部自头部的跳转

Q 如何判断循环列表是否为空?

A 头结点的指针域里存放的地址若为first则为空

双向链表

一个node有两个指针域,分别记录该节点前驱与后继节点的指针,其可以更为方便的向前或向后遍历,但单个节点占用空间更多 ,因前驱和后继的存在,故插入和删除操作相对更为复杂一些

双向循环链表

较单纯的双向链表更为灵活方便,主要的区别在于是否有头部前驱 和尾部后继节点使链表实现循环

游标链表 

因其余链表对于动态存储空间管理频繁使用(new或delete)等操作,造成了内存管理的复杂性,可以尝试用游标(Cursor)链表


The End

猜你喜欢

转载自blog.csdn.net/Norths_/article/details/125486004
今日推荐