链表与顺序表的比较

目录

1.链表与顺序表的区别

1.1 存储空间

1.2 插入删除

1.3 扩容

1.4 使用场景

1.5 缓存使用率


1.链表与顺序表的区别

1.1 存储空间

顺序表在物理上与逻辑上都是连续的

链表在逻辑上连续物理不一定连续

因此顺序表我们可以任意访问而链表不可以随机访问

链表每次访问都要从头结点遍历

1.2 插入删除

顺序表需要进行移动效率低,链表只要改变指针的指向就行

但如果我们尾删时顺序表的效率也高

1.3 扩容

顺序表需要考虑扩容,而链表没有容量的概念避免了空间浪费

并且顺序表扩容本身就需要消耗,还有空间浪费因此链表在空间

上更优

1.4 使用场景

顺序表适用于我们频繁地访问数据以及高效存储

链表使用于任意位置的删除插入

1.5 缓存使用率

顺序表的缓存利用率大于链表的使用率

下面我们先看一下存储器层次结构

可以看到从下往上越靠上的读取数度越快越往下内存越大读取速度越慢

我们可以想一下平常我们的数据都是放在内存中的当我们需要访问时需要先把内存加载到缓存为了提高效率。我们想一下如果我们现在要读数据我们需要从内存加载到缓存如果我们一次就加载一个数据到缓存是不是效率很低如果我们一次加载n个数据(这里其实是取该数据往后连续的一段内存空间)这样如果当我们下次再取一个数据时可能就不需要再次将数据加载到缓存中。如果再次取一个数据在我们前一次取数据时该数据已经加载到缓存中就叫缓存命中。也就是我们的缓存使用率。

这样我们知道顺序表在物理上是连续的

如上我们第一次就取数据1当加载到缓存中的可能就是1,2,3,4(这里是一个假设具体加载多少要看缓存容量)这样我们下次取2时是不是就不用加载到缓存了这就是缓存命中。因为顺序表是连续的因此我们取1时会把1后面的一段连续内存空间加载到缓存这样就提高了缓存使用率。

相反链表物理上不一定是连续的因此当我们取一段连续的空间时可能里面没有我们下次访问的数据因此缓存利用率低

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

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

相关文章

什么是XXE漏洞,日常如何做好web安全,避免漏洞威胁

随着网络技术的不断发展,网站安全问题日益受到人们的关注。当前随着技术发展,网站存在一些常见的可能被攻击者利用的漏洞,而在众多网站安全漏洞中,XXE(XML External Entity)漏洞是一个不容忽视的问题。今天…

Sass深度解析:性能优化的秘密

首先,这篇文章是基于笔尖AI写作进行文章创作的,喜欢的宝子,也可以去体验下,解放双手,上班直接摸鱼~ 按照惯例,先介绍下这款笔尖AI写作,宝子也可以直接下滑跳过看正文~ 笔尖Ai写作:…

Mysql数据库的基础学习

为什么使用数据库? 1.持久化:将数据保存到可掉电式存储设备中以供使用。 数据库相关概念: DB:数据库(Databass)即存储数据的仓库,本质是一个文件系统,保存了一系列有组织的数据DBMS:数据库管…

MongoDB 数据精简指南:删除文档操作详解

在 MongoDB 数据库管理中,删除文档是一项至关重要的任务,它不仅可以帮助您清理数据库,释放存储空间,还可以保持数据的整洁性和一致性。然而,删除操作需要谨慎对待,因为一旦执行,数据将永久丢失。…

C语言如何为联合体变量赋初值?

一、问题 联合体又称之为共⽤体,声明⼀个共⽤体类型,必然要定义⼀个共⽤体类型的变量, 并对其赋初值。那么,如何为共⽤体变量赋初值呢? 二、解答 1. 联合体类型定义变量 定义联合体类型变量的⽅法与定义结构体类型变…

Java面试题:讨论Java中继承的使用场景和限制,以及如何通过组合来替代继承

在Java中,继承是一种强大的编程机制,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。继承可以带来代码复用和构建分层结构的好处,但也存在一些限制和潜在的问题。 …

netstat命令详解

netstat网络连接分析工具 工具说明: netstat 是一款命令行工具,主要是用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。除…

C#识别图片数字

///选取图片按钮的代码/// </summary>/// <param name"sender"></param>/// <param name"e"></param>private void 选择图片_Click(object sender, EventArgs e){ OpenFileDialog openFileDialog new OpenFileDialog(…

Python进阶之-反射机制详解

✨前言&#xff1a; 什么是反射&#xff1f; Python中的“反射”是一个编程术语&#xff0c;它指的是程序在运行时能够检查和操作其自身状态的能力&#xff0c;特别是通过名称&#xff08;通常是字符串&#xff09;来访问对象的属性、方法和其他组成部分。这种机制允许代码动态…

基于SpringBoot+Vue的法律咨询系统

课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&#xff0c;信息的传播速度极慢&#xff0c;信息处理的速…

【算法-程序的灵魂#谭浩强配套】(适合专升本、考研)

无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 完整资料如下&#xff1a; 1.一个程序主要包括以下两方面信息&#xff1a;程…

JAVA学习-练习试用Java实现分隔链表

问题&#xff1a; 给定一个链表的头节点 head 和一个特定值 x &#xff0c;请对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前&#xff0c;应当 保留 两个分区中每个节点的初始相对位置。 示例 1&#xff1a; 输入&#xff1a;head [1,…

Pikachu 靶场 RCE 通关解析

前言 Pikachu靶场是一种常见的网络安全训练平台&#xff0c;用于模拟真实世界中的网络攻击和防御场景。它提供了一系列的实验室环境&#xff0c;供安全专业人士、学生和爱好者练习和测试他们的技能。 Pikachu靶场的目的是帮助用户了解和掌握网络攻击的原理和技术&#xff0c;…

DI-engine强化学习入门(七)如何自定义神经网络模型

在强化学习中,需要根据决策问题和策略选择合适的神经网络。DI-engine中,神经网络模型可以通过两种方式指定: 使用配置文件中的cfg.policy.model自动生成默认模型。这种方式下,可以在配置文件中指定神经网络的类型(MLP、CNN等)以及超参数(隐层大小、激活函数等),DI-engine会根据…

Leetcode 107:二叉树的层次遍历II

给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&#xff09;。 思路&#xff1a;翻转title102的结果即可。 //层次遍历二叉树public static List<List<Integ…

RuvarOA协同办公平台 多处 SQL注入漏洞复现

0x01 产品简介 RuvarOA办公自动化系统是广州市璐华计算机科技有限公司采用组件技术和Web技术相结合,基于Windows平台,构建在大型关系数据库管理系统基础上的,以行政办公为核心,以集成融通业务办公为目标,将网络与无线通讯等信息技术完美结合在一起设计而成的新型办公自动…

安卓LeakCanary研究

一、安卓LeakCanary概述 LeakCanary是Square公司推出的一款开源的内存泄漏检测工具&#xff0c;专为Android平台设计。它通过简洁直观的方式帮助开发者识别和解决应用程序中的内存泄漏问题&#xff0c;从而优化应用性能&#xff0c;减少崩溃风险。LeakCanary的核心优势在于其自…

el-checkbox选中后的值为id,组件显示为label中文

直接上代码 方法一 <el-checkbox v-for"item in list" :key"item.id" :label"item.id">{{中文}} </el-checkbox> 方法二 <el-checkbox-group class"flex_check" v-model"rkStatusList" v-for"item…

react 逻辑 AND 运算符 ()

在 React 组件中&#xff0c;当你想在条件为 true 时渲染一些 JSX 时&#xff0c;它经常会出现&#xff0c;或者什么都不渲染。使用 &#xff0c;只有在以下情况下才能有条件地呈现复选标记&#xff1a;&&isPackedtrue return (<li className"item">{…

续篇——源码部署LAMP环境上线项目——禅道项目

上篇:LNMP环境部署WordPress——使用源码包安装方式部署环境-CSDN博客 目录 一.前提准备 1. 名词区别 2. 下载项目软件包 3. 上传项目源码到虚拟机并解压 二.安装Apache 1. 环境清理 2.关闭Nginx 3. 下载Apache 4. 下载APR组件 4.1 安装apr 4.2 安装apr-util组件 5…