链表基础知识汇总

链表

链表是一种基本的数据结构,是由一系列节点组成的集合。每个节点包含两个部分:值和指向下一个节点的指针。链表中的节点可以动态地添加、删除,其大小可以根据需要进行扩展或缩小。

链表通常用于处理不固定长度的数据结构,具有插入、删除等操作效率高的优点。与数组相比,链表在随机访问时性能较低,但在增删操作时更为高效。

那么链表和数组的区别是什么呢?

1存储方式:数组在内存中按照地址顺序依次存储,而链表通过节点之间的指针连接起来。

2访问方式:数组可以通过下标直接访问其中的元素,时间复杂度为O(1),而链表需要遍历整个链表才能找到特定节点,时间复杂度为 O(n)。

3大小固定性:数组有固定大小,创建时必须指定大小,不能动态增长或缩小。链表则没有这个限制,可以根据需要动态添加或删除节点,大小不受限制。

4插入与删除操作:向数组中插入或删除一个元素需要移动其他元素,开销较大;而链表可以在任意位置高效地进行插入和删除操作。

5内存分配方式:数组在声明时就会占用一段连续内存空间,而链表动态分配内存,在运行期间更加灵活。

数组的优缺点:

        支持快速随机访问
优    内存连续,预读性能好
        易于实现和使用

        需要一段连续的内存空间,大小固定
缺     插入和删除操作需要移动其他元素
        如果数组中有大量未使用的空间会浪费内存

链表的优缺点:

        可以动态添加和删除节点,大小不受限制
 优   插入和删除数据非常高效
        不需要一段连续的内存空间

        随机访问效率低,需要遍历整个链表
 缺   链接指针需要额外的空间存储
        分配和释放内存需要时间和开销

                                  链表的C/C++实现 

 ————————————将链表的逻辑视图映射到C/C++程序————————————

一、在尾部插入节点

struct Node 
{int data;Node* link;
};struct Node* A;
A=NULL;
Node*temp=new Node();   //Node*temp=(Node*)malloc(sizeof(Node));
temp->data=2;           //(*temp).data=2;
temp->link=NULL;        //(*temp).link=NULL;
A=temp;temp=new Node();
temp->data=4;           
temp->link=NULL; 
另外,我们就可以通过一个循环来到达链表末端,实现到达最后一个节点的基本逻辑。(如下图)

 二、在头部插入节点

 

 三、其它简易操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/467429.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】常见八大排序算法(附动图)

一、前言 关于排序,有一些术语,例如算法的稳定/不稳定,内部排序和外部排序等,需要我们了解一下 稳定:当未排序时a在b前面且ab,排序后a仍然在b前面 不稳定:当未排序时a在b前面且ab,排…

专业课145+总分400+天津大学815信号与系统考研经验天大电子信息与通信工程,真题,大纲,参考书。

今年专业课145(差一点满分,有点遗憾)总分400,顺利被天津大学录取,应群里学弟学妹的要求总结了过去这一年我的复习经验,希望对大家有所借鉴。专业课: 815信号与系统145差一点满分,也…

中高级前端应该掌握哪些技术?看看自己达标了么

市面上初级和低级的前端饱和了,中高级前端还是非常稀缺的,贝格前端工场结合这么多年的前端实战经验,总结了中高级前端要具备的12项技术,看看大家达标否。 一、中高级前端的刚性标准 年龄:25岁以上 工作年限&#xff1…

leetcode(双指针)11.盛最多水的容器(C++详细解释)DAY9

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回…

探索设计模式的魅力:捕捉变化的风-用观察者模式提升用户体验

设计模式专栏:http://t.csdnimg.cn/U54zu 目录 一、引言 核心概念 应用场景 可以解决的问题 二、场景案例 2.1 不用设计模式实现 2.2 存在问题 2.3 使用设计模式实现 2.4 成功克服 三、工作原理 3.1 结构图和说明 3.2 工作原理详解 3.3 实现步骤 四、 优…

java中stream流中的concat合并操作

可以用stream.of来合并两个流 public class Test7concat {public static void main(String[] args) {/*Stream流:static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b);合并2个流中的元素*/Stream<String> stream1 St…

【Spring MVC篇】Cookie和Session的获取 Header的获取

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Spring MVC】 本专栏旨在分享学习Spring MVC的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; Cookie是客户端保存用…

mlxtend,一个非常好用的 Python 库!

前言 Python 的 MLxtend&#xff08;Machine Learning Extensions&#xff09;库是一个强大的工具&#xff0c;为机器学习实验提供了一系列功能强大的扩展和工具。本文将深入探讨 MLxtend 库的核心功能、用法以及如何在机器学习项目中充分发挥其优势。 目录 前言 什么是 MLx…

Kubernetes(K8S)集群部署实战

目录 一、准备工作1.1、创建3台虚拟机1.1.1、下载虚拟机管理工具1.1.2、安装虚拟机管理工具1.1.3、下载虚Centos镜像1.1.4、创建台个虚拟机1.1.5、设置虚拟机网络环境 1.2、虚拟机基础配置&#xff08;3台虚拟机进行相同处理&#xff09;1.2.1、配置host1.2.2、关闭防火墙1.2.3…

JavaScript 选择范围:SelectionRange

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 文本选择 是 web 开发中的一个常见需求&#xff0c;例如高亮选定文本…

java数据结构前置知识以及认识泛型

目录 什么是集合框架 容器 时间复杂度 空间复杂度 包装类 装箱 拆箱 引出泛型 泛型类的使用 类型推导 泛型如何编译的 泛型的上界 泛型方法静态泛型方法以及泛型上界 什么是集合框架 Java 集合框架 Java Collection Framework &#xff0c;又被称为容器 containe…

普通男孩的新年创作纪念日

前言 首先在新春佳节&#xff0c;小编在这里祝各位大佬。萌新友友们新年好&#xff0c;希望每一个烟火般的你在新的一年里 offer 多多&#xff0c;薪资多多 &#xff0c;龙行龘龘 &#x1f409; &#x1f409; &#x1f409; &#x1f409;&#xff0c;前程朤朤 ❤️ ❤️ ❤…