数组与链表的区别_内存、链表、数组概念整理

刀枪终入库,老马牧南山,喝杯清茶,说点故事,和你聊一聊编程这件事,我是南山,一个普通的程序员,一个喜欢简单,坚持自己的肥仔……

0036f1ae5c3294969454dd93555be4a1.png

上一次和大家分享了一些我学习二分法的收获,也提出了一些自己的疑问,后来又找了一些算法方面的资料希望可以找到相应的答案,无奈这些资料中基本都是在描述二分法的理论,并没有我关心的内容,只能将希望寄予广大读者了,目前也只好把这些问题暂时留下,以后找了合适的答案再和大家讨论吧。那么这次和大家分享点什么呢?上午翻看了一下剩余的内容,发现里边出现了很多概念,比如内存、数组、链表、堆、栈等等,相信这些概念对开发人员来说并不陌生,但是您真的了解它们吗?反正我是一知半解,所以就查询了一些这方面的内容和大家分享一下吧,同时也欢迎大家批评指正!

内存、堆、栈

这个概念在生活中并不少见,现在的手机、平板、笔记本、台式机这些电子设备中,内存的大小往往决定着这些设备运行的速度,但是什么是内存呢?它是电子设备中一个重要的组成部分,决定了这些设备运行的速度。在计算机运行的过程中,CPU会将相关的数据放到内存中进行运算,然后把结果输出,同时,CPU和硬盘等设备的交互过程中的数据也会放到内存中。

关于内存更多的内容,我们作为开发人员,并不是很关注它,但是在工作和学习过程中,却频繁的会提到两个概念,堆和栈,它们又是什么呢?为什么开发中会频繁的提到它们呢?这是我们本次需要解决的一个重要问题。对于堆和栈来说,提到的场景有两种,一种就是作为内存管理的方式在程序中出现,另一种就是作为数据结构出现,而我们在这里不去研究数据结构相关的内容,仅仅来看下内存中的堆和栈有什么区别:

对于来说,它是系统自动分配和释放的,在程序的运行过程中用来存放方法的参数、变量等内容;

对于来说,它是由开发人员来控制分配和释放的,所以容易发生内存泄漏的问题,它在程序运行过程中主要存放开发人员创建的对象等内容;

这些就是搜集到的一些关于开发中堆和栈的一些主要区别,但是我相信除了这些内容外,关于这两个概念还有很多需要我们了解的地方,但是介于时间的缘故,这次就暂时先为大家整理这些,也欢迎您将自己的看法留在下方,让我们可以了解关于它的区别。

链表、数组

在开发过程中,如果需要将数据存储到内存中,在完成一系列操作之后,计算机会为我们分配一个存储地址,需要注意的是,我们所操作的数据有可能只有一个,也有可能有多个,如果是多个的话如何处理呢?这时候就会用到数组和链表了,这就是我们接下来要了解的内容了。

数组可以说开发中经常会提到的概念,也最常用,但是多数开发人员并不清楚,在数组中,所有的元素都紧密的排列在一起,所以对于数组来说我们,可以根据它的位置来获取对应的数值(数组的位置,我们一般称之为索引,它从零开始,这点和重要)。在使用数组的过程中,需要我们注意一些问题,首先,请看如下这张图:

4db816f1de11938ba254dea1bfa09032.png

在这张图中,以蓝色区域代表可以使用的内存空间,以灰色区域代表已经使用的内存空间,假设现在有三个元素要采用数组的方式存储到内存中,那么我们可以将它存放到第一行或者第三行位置,这并没有什么问题,但是如果要新添加一个数组元素呢?刚才为大家介绍过,数组中所有的元素必须放到一起,那就是说只能存放到第四行,到这里为止,是否发现一些问题呢?

很显然,使用数组的方式在元素的添加处理中存在一些麻烦,但是使用链表可以很好的解决这个问题。因为链表中存放的数据并不需要像数组那样放在一起,这样一来只要空间允许,元素就可以随意的添加,也就是说在元素的插入方面链表有很好的优势,那为什么在开发中我们使用数组的情况更多呢?其实这和链表中数据存储的方式有很大关系,因为链表中元素并不集中在一起,所以没有办法像数组那样按照索引位置来获取数据,在链表中,第一个元素会记住第二个元素所在的位置,第二个元素记住第三个元素所在的位置,以此类推,也就是说,链表中如果要访问某个位置的数据,就必须从头开始查找,这样读取数据的速度就没有数组那么快了。

本次的内容就为大家介绍到这里了,不知道您是否掌握了呢?当然,上述这些内容,是我结合自己工作中一些经验以及网上的一些资料整理出来的,相关的描述可能存在些许问题,对此欢迎您批评指正,同时如果您觉得本文对您有所帮助的话,记得点赞、关注哟,后续还会为大家继续更新算法方面的内容,下次再见吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值