常见数据结构的概念和区别(学习笔记)

栈和堆的概念和区别 一、概念区分 在进程地址布局(如下图),可见地址的分布情况,栈和堆所在的位置区域。 栈:由编译器自动分配释放,存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈。每当一个函数被调用,该函数返回地址和一些关于调用的信息,比如某些寄存器的内容,被存储到栈区。然后这个被调用的函数再为它的自动变量和临时变量在栈区上分配空间,这就是C实现函数递归调用的方法。... 阅读详情

顺序表

        顺序表的本质是一个由数组构成的一整片且连续的空间,它的特点就是在物理空间上是连续的,并且支持下标访问,也可以进行随机访问。但是由于是由数组构成的结构,所以对数据的增删效率低,需要挪动后面的一堆元素并且数组的大小不支持随意改动,故而导致空间大小是固定的,空间满了就无法继续添加元素,空间未满时也会浪费不少的空间。所以顺序表一般用于需要高效存储和频繁访问元素的场景。

链表

        链表比起顺序表就有很大的不同,它实际上是由两个部分组成:一个是其存储的数据,另一个则是指向链表下一个节点的指针。这也导致了它在内存中的存储模式与顺序表有很大的不同,它的空间是非连续的,用指针将各个节点相连,从而实现链式结构。链表的增删会比顺序表简单很多,因为它的空间为非连续的,删除或增加数据时只要进行开辟或释放节点,然后调整指针的指向就可以操作。此外它的灵活性也更高,因为它是每次增加或删除数据时才进行对应的开辟和释放空间的操作,就不容易出现空间浪费和不足的问题。但是链表比起顺序表也有缺陷,就是由于空间不连续,所以导致链表查找和访问数据效率低,往往都需要遍历链表才能定位到需要访问的位置。

链表的两种形式

        链表分为两种形式:单链表以及双链表,这两种链表之间也有着不小的差别

链表类型单链表(单向不循环不带头)双链表(双向循环带头)
有无头节点无有
是否循环否是
指针指向只能指向后一项同时指向前一项和后一项

能否直接

找到尾节点

不能能

        单链表比较好理解,就是只能一个方向进行查找,首节点就是正常节点,尾节点指向空。双链表就是可以双向进行查找,它拥有两个指针,一个指向前一个节点,一个指向后一个节点,且拥有一个头节点,俗称哨兵位,哨兵位的作用就是标志着这个位置为头节点,它本身并不存储任何数据,只有两个指针,一个指向后一节点,也就是实际存数据的节点的头一位节点,另一个指针则向后指向尾节点,形成一个闭环。

        双向链表比起单链表来说有很多好处,其一是能很快的找到尾节点,因为双链表的哨兵位直接指向尾节点,其二是双链表的删除操作更为简便,因为在单链表中我们是无法定位到某一节点的前一节点的,所以在删除操作时,我们要先记录下前一节点,让前一节点的指针指向要删除节点的下一节点,然后才能进行删除操作,而双链表中我们直接就能从被删除节点定位到前一节点,比单链表方便了不少。

顺序表与链表的优劣对比

        

结构类型顺序表链表

空间是否连续

是否
是否支持随机访问支持O(1)不支持O(N)
能否在任意位置插入或删除数据可能需要移动数据,效率低只需修改指针指向
插入空间固定,不够时需扩容空间不固定,即插即扩
应用场景元素高效存储和频繁访问任意位置插入和删除频繁
栈和队列的概念、区别及联系 在数据结构中,栈和队列是两种非常基础和重要的线性数据结构。它们各自具有独特的特性和操作方式,且在计算机程序设计和算法实现中扮演着不可或缺的角色。本文将详细探讨栈和队列的概念、区别及联系,以期帮助读者更深入地理解这两种数据结构。 阅读详情

相关推荐

STM32+W5500实战:5分钟搞定FreeModbus TCP移植(附完整代码)

本文详细介绍了如何在STM32微控制器上,结合W5500以太网芯片,快速完成FreeModbus TCP协议栈的移植,构建稳定可靠的工业级Modbus TCP服务器。内容涵盖硬件连接、软件架构、驱动适配、核心移植代码实现及调试优化技巧,旨在提供可直接应用于实际项目的完整解决方案。

life6的博客 878

数据结构算法的认识

文章目录python数据分析学习笔记第一节1、算法的概念2、时间复杂度与“大O记法”2.1. 分析算法2.2. 时间复杂度基本计算规则3、常见时间复杂度表格4、算法与数据结构的区别 python数据分析学习笔记 第一节 1、算法的概念 算法: 算法是计算机处理信息的本质,是一个算法来告诉计算机确切的步骤执行一个指定的此程序 算法的特征 ①输入:算法具有0个或多个输入 ②输出:算法至少有一个或者多个输出 ③有穷性:算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成 ④确定性:

weixin_43735332的博客 172

西电计科数据库系统期末复习笔记

本人西电19计科,数据库系统98,这是复习期间整理的笔记,基本涵盖了课程全部重点,有需要的学弟学妹可以在复习的时候参考一下。

Polaris的博客 8593

数据结构:八大常见数据结构

数据结构目录: 一、结构分类 二、区别联系 1. 数组 2. 栈 3. 队列 4. 链表 5. 树 6. 散列表 7. 堆 8. 图 数据结构是指,相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。常用的数据结构有:数组、栈、队列、链表、树、散列表、堆、图。 一、结构分类: 数据结构大多是以三种分类方式分类,分别是逻辑结构,物理结构,存储结构,一般来讲大多是以逻辑结...

weixin_43062845的博客 6213

PID算法(位置式pid算法和增量式pid算法)

PID 算法是闭环控制系统中常用的算法,PID 分别是 Proportion(比例)、Integral(积分)、Differential(微分)的首字母缩写。它是一种结合比例、积分和微分三个环节于一体的闭环控。

m0_57678852的博客 2万+

xlinx项目系列之基于zynq-7020ISP图像处理

本Demo基于zynq-7020(正点原子启明星+OV5640+4.3'800x480)实现了ISP图像处理(将ov5640的isp关闭,在7020上实现ISP功能),输出到LCD和HDMI,软件基于SDK裸机开发,2592x1944@15fp。位置: xil_ip_repo/xil_isp_lite_1.0。项目获取链接:2.基于zynq-7020实现ISP图像处理。位置: xil_ip_repo/xil_vip_1.0。

JY6669991010的博客 2635

数据结构和算法常见面试问题总结,含答案

这些问题是我备考数据结构和算法过程中,详细总结的常见面试问题和答案。逐个搜索并记录下来,花了很大的精力!欢迎关注公众号,小梁说代码。

小梁说代码的博客 7632

[Dify 实战] 如何在内网环境部署 Dify 应用:彻底离线的企业级方案解析

企业内网环境如何离线部署Dify?本文提供详细教程:Dify作为开源AI平台,支持完全离线部署,无需外网访问。文中介绍两种部署方式:推荐使用Docker一键部署,也可选择源码安装定制化方案。重点讲解内网模型配置(支持Ollama/GPT-OSS等)、知识库存储(MinIO/PostgreSQL)及内网代理设置,并给出常见问题排查方法。该方案适用于金融、政府等对数据安全要求高的场景,确保敏感数据不泄露,实现完全本地化的AI应用闭环。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 452

【数据结构】树的概念理解和性质推导(保姆级详解,小白必看系列)

在之前的几篇文章中已经详细的介绍了数据结构中的。

weixin_45031801的博客 1971

LPDDR4 JEDEC标准测试实例解析--写操作

LPDDR4的JEDEC标准一致性测试项详解以及实例分享,满满干货!感兴趣的小伙伴可以持续关注!!

一只豌豆象的博客 7774

2篇1章1节:数据的基本概念以及 R 中的数据结构、向量与矩阵的创建及运算

本文详细介绍了R语言中常见的数据结构的向量和矩阵。通过掌握这些数据结构的基本概念和操作技巧,可以更高效地处理和分析数据。

MD Code 1243

操作系统意义上的堆和栈的概念以及数据结构意义上的堆和栈的概念

[duī zhàn]  堆和栈的区别 在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。要点:堆,顺序随意。栈,后进先出(Last-In/First-Out)。 1对比编辑 操作系统意义上的堆和栈的概

haiross的专栏 3814

增量学习入门:概念、代码示例与应用场景

在当今快速变化的数据环境中,传统的机器学习模型往往需要重新训练以适应新的数据。然而,这种方法不仅耗时耗力,还可能导致模型性能的不稳定。增量学习(Incremental Learning)作为一种新兴的学习范式,能够在新数据到来时动态更新模型,而无需重新训练整个模型。本文将详细介绍增量学习的基本概念、代码示例、应用场景以及需要注意的事项。增量学习作为一种高效的机器学习方法,能够在新数据到来时动态更新模型,具有广泛的应用前景。通过本文的介绍,相信你对增量学习有了初步的了解。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1152

数据类型和数据结构的区别

一 数据类型 数据类型反应了数据的取值范围以及对这类数据可以施加的运算。 二 数据结构 数据结构是指按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储于计算机中,并在这些数据上定义了一个运算集合。 1. 逻辑结构 常见的数据的逻辑结构:线性结构、树形结构和图形结构。 2. 存储结构 常见的数据的存储结构:顺序存储、链式存储、索引存储和散列存储。 3. 运算集合 数据的运算包括:插入、删除、检索、输出、排序等。 三 两者的区别      &

gao_zhennan的博客 9899

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

堆和栈的区别(内存和数据结构)

首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈。 堆和栈都是一种数据项按序排列的数据结构。

chensi16114的博客 3672

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

进程和线程的概念、区别和联系

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。 进程与线程的一个简单解释 在这个简单易懂的类比下,了解一下进程和线程的宏观概念: 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空 间......

Jack huang 的技术笔记 967

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数据结构中堆、栈和队列的区别

数据结构的栈和堆 一、堆 堆是一种经过排序的树形数据结构,每个节点都有一个值,通常我们所说的堆的数据结构是指二叉树。所以堆在数据结构中通常可以被看做是一棵树的数组对象。而且堆需要满足一下两个性质: (1)堆中某个节点的值总是不大于或不小于其父节点的值; (2)堆总是一棵完全二叉树。 堆分为两种情况,有最大堆和最小堆。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。下图图...

心中的日月的博客 1711

数据结构与算法——数据结构和算法的关系和区别

数据结构和算法是计算机科学中两个重要的概念,它们在软件开发和问题解决中起着关键的作用。虽然它们经常一起提到,但它们之间存在明显的区别。

Itmastergo的博客 3638

数据结构,堆和栈和队列的概念

数据结构,堆和栈和队列的概念 1 什么是数据结构 数据结构是计算机存储,组织数据的反复改。数据结构是指相互之间存在的一种或多种特定关系的数据元素集合。 2 数据结构的逻辑结构 1 集合结构,元素都是孤立存在的 2 线性结构 ,结构里的元素关系是一对一 3 树形结构,树形结构里面的元素是一对多 4 图结构 ,团结构里面的元素是多对多 3 数据结构的存储方式 1 顺序存储结构,存...

github_36850997的博客 1156

堆和栈的概念详解及区别

一:什么是堆和栈一个由C/C++编译的程序占用的内存分为以下几个部分:1. 栈区(stack) ——:由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2. 堆区(heap) ——:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分别方式倒是类似于链表。3.全局区(静态区)(static)——:全局变量和静态变量...

leikun153的博客 3311

数据结构和内存中堆和栈的区别

特别声明:本文参考了博客:http://blog.youkuaiyun.com/wolenski/article/details/7951961#comments        堆和栈在 我的眼里一直是很模糊的概念,只是简单的理解为:堆栈是一种数据结构,是用来存储数据的。由于最近研究的一些东西,涉及到的堆和栈比较多,一直都是处于模糊的状态,所以经过仔细研究后有了清晰且有条理的理解,在这里分享给大家,

Fiorna0314的博客 2万+

常见的数据结构,浅拷贝和深拷贝,赋值和浅拷贝的区别

常见的数据结构,浅拷贝和深拷贝,赋值和浅拷贝的区别

差不少的博客 213

算法和数据结构的区别

总是弄不太清这三者的关系或者区别,今天浅谈一下,只是拙见。其实也是今天刚好复习了这个,然后有了感想,所以要把它记录下来。 说到区别,那就要知道他们的基本概念。接下来的概念详见,参考于百度百科。 ——数据结构 ——算法 ——程序 算法+数据结构=程序 获得图灵奖的Pascal之父——Nicklaus Wirth如是说。 算法是解决方法的步骤和方法的描述,而数据结构更像这个东西里面的精髓。 好比到达一个地方有多条路,肯定有长有短,因此时间或多或少,这个不同的路径,不同的到达的方法就是算法;而我们如何去,在

m0_47104421的博客 2257

进程与线程的概念以及区别

综合了进程与线程概念和进程和线程的区别(超详细)两篇博客,两位大佬都写的很好,很仔细,我这里综合一下。 进程: 进程是指一个具有一定独立功能的程序,在一个数据集合上的一次动态执行过程,一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。 如下图所示,源代码文件经过编译链接形成可执行文件,将可执行文件加载进内存进行执行。为什么要加载进内存呢?这是因为负责解析和运行程序的CPU需要通过内部的程序计数器来指定内存

小灰狼与大白兔的博客 5543

值传递和引用传递的概念和区别

值传递和引用传递的概念和区别 参考回答: 值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量. 引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身。所以对引用对象进行操作会同时改变原对象. 一般认为java内的传递都是值传递. 分析: 这里首先要明白几个重要的概念: 基本类型和引用类型的区别 “=”赋值运算的本质 1.基本类型和引用类型...

weixin_44844089的博客 771

说说你对数据结构的理解?有哪些?区别?

树是典型的非线性结构,在树的结构中,有且仅有一个根结点,该结点没有前驱结点。在程序设计中,为了处理方便, 一般情况把具有相同类型的若干变量按有序的形式组织起来,这些按序排列的同类数据元素的集合称为数组。跟栈基本一致,也是一种特殊的线性表,其特性是先进先出,只允许在表的前端进行删除操作,而在表的后端进行插入操作。堆是一种特殊的树形数据结构,每个结点都有一个值,特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。一种特殊的线性表,只能在某一端插入和删除的特殊线性表,按照先进后出的特性存储数据。

林恒的博客 838
上一篇: 超详细!手把手教你如何用C语言实现简单的扫雷游戏
下一篇: 函数栈帧的创建与销毁
虚无的纽扣
博客等级 码龄1年 405粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值