数据结构与算法(C语言版)P4---顺序表、链表总结

news2024/11/25 6:35:10

顺序表和链表(双向带头链表)的区别

顺序表:

  • 优点:
    • 支持随机访问。需要随机访问结构支持算法可以很好的使用。
    • cpu高速缓存利用率(命中率)更高。
    • 存储密度高
  • 缺点:
    • 头部中部插入删除时间效率低。O(N)
    • 连续的物理空间,空间不够了以后需要增容。
      • 增容有一定程序消耗。
      • 为了避免频繁增容,一般我们都以2倍数去增,如果用不完可能存在一定的空间的浪费。

链表(双向带头循环链表):

  • 优点:
    • 任意位置插入删除效率高。O(1)
    • 按需申请释放空间。
  • 缺点:
    • 不支持随机访问。(用下标访问)意味着:一些排序,二分查找等在这种结构上不适用。
    • 链表存储一个值,同时需要存储链接指针,也有一定的消耗。
    • 存储密度小。
    • cpu高速缓存命中率低。

总体而言。顺序表和链表的区别,如下表格:

不同点顺序表链表
存储空间上物理上一定连续逻辑上连续,物理上不连续
随机访问支持O(1)不支持O(N)
任意位置插入或者删除元素可能需要搬移元素,效率低O(N)只需要修改指针指向
插入动态顺序表,空间不够时需要扩容没有熔炼过的概念
应用场景元素高效存储+频繁访问位置任意访问和删除频繁
缓存利用率

在这里插入图片描述

存储密度

存储密度是指结点数据本身所占的存储量和整个结点结构中所占的存储量之比,即:

在这里插入图片描述

例如:

在这里插入图片描述

一般地,存储密度越大,存储空间的利用率就越高。显然,顺序表的存储密度为1(100%),而链表的存储密度小于1。

cpu高速缓存利用率讲解

备注:缓存利用率参考存储体系结构以及局部原理性。

在这里插入图片描述

在这里插入图片描述

那这和顺序表、链表有什么关系呢?如下分析:

现在有一个顺序表和一个链表:

1690112724640

我们直到cpu需要运行指令,顺序表和链表的数据在内存中。

首先访顺序表中存储数据1的内存位置尾0x00123400和链表中存储数据1(0x00200000),先看这个地址在缓存中没有(L1-cache、L2-cache、L3-cache),如果在就直接访问,不在就先加载到缓存,在访问。

我们可以想到在访问顺序表和链表的第一个数据时,由于数据都不在缓存中,所以二者的cpu利用率一样。

但是由计算机的理论支持:内存在访问时,默认会访问连续内存空间位置。这也就意味着在加载内存时,不会只加载一个数据的位置,而是加载这个数据后面的一片位置,具体加载多少取决于内存。由于顺序表就是连续的存储空间,而链表有可能不是连续的存储空间,所以在加载内存时,顺序表会加载一大片数据,而链表只是有可能加载一片数据,也有可能一次加载一个数据。所以顺序表的cpu高速缓存利用率高,而链表cpu高速缓存利用率低。

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

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

相关文章

数据结构与算法面试

1、链表反转 需要三个指针,一个pre指针指向反转的前一个节点,cur指向要反转的节点,然后设置有一个temp指针指向需要反转的下一个节点,用来使得cur指针移动,因为我们反转之后,无法使用next指针访问到后一个节…

【三维重建】3D Gaussian Splatting:实时的神经场渲染

文章目录 摘要一、前言二、相关工作1.传统的场景重建与渲染2.神经渲染和辐射场3.基于点的渲染和辐射场4.*什么是 Tile-based rasterizer (快速光栅化) 三、OVERVIEW四、可微的三维高斯 Splatting五、三维高斯 自适应密度控制的优化1.优化2.高斯的自适应控制 六、高斯分布的快速…

计算机是如何工作的(上篇)

计算机发展史 世界上很多的高科技发明,来自于军事领域 计算机最初是用来计算弹道导弹轨迹的 弹道导弹 ~~国之重器,非常重要 两弹一星 原子弹,氢弹,卫星(背后的火箭发射技术) 计算弹道导弹轨迹的计算过程非常复杂,计算量也很大 ~~ 但是可以手动计算出来的(当年我国研究两弹一…

【深度学习】Pytorch 系列教程(九):PyTorch数据结构:2、张量操作(Tensor Operations):(3)张量变形

目录 一、前言 二、实验环境 三、PyTorch数据结构 0、分类 1、张量(Tensor) 2、张量操作(Tensor Operations) 1. 数学运算 2. 统计计算 3. 张量变形 展开张量:flatten 改变张量的形状:view 改变…

TDE和数据脱敏功能介绍

TDE(Transparent Data Encryption)和数据脱敏(Data Masking)是两种常见的数据安全技术,它们在保护敏感数据和增强数据隐私方面起着至关重要的作用。接下来,将对这两种技术进行详细的介绍。 TDE,全称透明数据加密(Transparent Data Encryption…

Golang编写自定义IP限流中间件

目录 基于令牌桶的限流算法实现高并发限流(使用golang官方限流器)Go代码测试记录ab -t 1 -c 1 http://127.0.0.1:8080/api/resource结果预测:1秒内最多生成10个令牌,而总共有20个串行的请求,结果应该是1个成功&#xf…

Hadoop源码阅读(二):DataNode启动

说明: 1.Hadoop版本:3.1.3 2.阅读工具:IDEA 2023.1.2 3.源码获取:Index of /dist/hadoop/core/hadoop-3.1.3 (apache.org) 4.工程导入:下载源码之后得到 hadoop-3.1.3-src.tar.gz 压缩包,在当前目录打开Pow…

二叉树(2——二叉树链式结构的实现)

二叉树的遍历 前序、中序以及后序遍历 学习二叉树结构,最简单的方式就是遍历。所谓 二叉树遍历 (Traversal) 是按照某种特定的规则,依次对二叉 树中的节点进行相应的操作,并且每个节点只操作一次 。访问结点所做的操作依赖于具体的应用问题。…

第一次课,通过进程信息和服务信息识别当前计算机运行程序(预习版)

题目: 检测的目标进程: ydebugg ; “ImmunityDebugger.exe” _500], rax Exe ; “ollydbg.exe” _4F8], rax hackerE ; “ProcessHacker.exe” _4F0], rax Exe ; “tcpview.exe” _4E8], rax sExe ; “autoruns.exe” _4E0], rax scExe ; “autorunsc.ex…

什么是GPT磁盘?介绍GPT(GUID 分区表)磁盘及其优势!

GPT概述 GPT磁盘是什么意思?GPT是全局唯一标识符分区表(GUID Partition Table)的简称,它是硬盘分区表结构的一个标准模式。在我们深入了解GPT磁盘的特性之前须知,MBR磁盘的分区信息直接保存在主引导记录&#xff0…

【论文阅读】Cornus: Atomic Commit for a Cloud DBMS with Storage Disaggregation

Cornus Paper Preknowledge Share-Nothing Related Work Cornus: Atomic Commit for a Cloud DBMS with Storage Disaggregation ABSTRACT 传统2PC存在两个限制(缺点) Long Latency:long latency due to two eager log writes on the …

SQL优化--分页优化(limit)

在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低。 通过测试我们会看到,越往后,分页查询效率越低,这就是分页查询的问题所在。 因为,当在进行分页查询时&…

想要精通算法和SQL的成长之路 - 最长等差数列

想要精通算法和SQL的成长之路 - 最长等差数列 前言一. 最长等差数列 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 最长等差数列 原题链接 思路: 我们假设dp[i][j] 为:以num[i]为结尾,以j为公差的最长等差子序列的长度。由此可知&a…

wifi密码破解

文章目录 前言一、破解原理二、配置环境三、运行测试四、资源自取 前言 本文基于 python 实现了破解 wifi 密码的功能,采用的破解方式是穷举法,效率相对来说很低,对于设置密码简单的路由器来说比较适用。 一、破解原理 程序主要采用 python…

2023-09-16 CSP-J 第一轮初赛真题解析

分数:100 考试时间:120分钟 一、 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 1.在 C中,下面哪个关键字用于声明一个变量,其值不能被修改&#xf…

JavaWeb基础学习(5)

JavaWeb基础学习 一、Filter1.1 Filter介绍1.2 Filter快速入门1.3、Filter执行流程1.4、Filter使用细节1.5、Filter-案例-登陆验证 二、Listener2.1 Listener介绍2.2、ServletContextListener使用 三、AJAX3.1 AJAX介绍与概念3.2 AJAX快速入门3.3 Axios异步架构3.4 JSON-概述和…

基于Yolov8网络进行目标检测(三)-训练自己的数据集

前一篇文章详细了讲解了如何构造自己的数据集,以及如何修改模型配置文件和数据集配置文件,本篇主要是如何训练自己的数据集,并且如何验证。 VOC2012数据集下载地址: http://host.robots.ox.ac.uk/pascal/VOC/voc2012/ coco全量数据…

推荐书目:Python从入门到精通(文末送书)

目录 编辑推荐 内容简介 作者简介 前言/序言 本书特点 编辑推荐 “软件开发视频大讲堂”丛书是清华社计算机专业基础类零售图书畅销品牌之一。 (1)2008—2023年,丛书累计修订7次,销售400万册,深受广大程序员喜爱。…

Vulnhub系列靶机---The Planets: Earth(行星-地球)

文章目录 信息收集主机发现端口扫描目录扫描dirsearch 漏洞利用反弹shellnc文件传输strace调试工具 靶机文档:The Planets: Earth 下载地址:Download (Mirror) 难易程度:Easy 信息收集 主机发现 端口扫描 80端口 需要做映射/etc/hosts https…

【算法|虚拟头节点|链表】移除链表元素

Leetcode203 移除链表元素 题目描述: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出&#xf…