首页 > 其他分享 >堆栈和数组之间的区别

堆栈和数组之间的区别

时间:2023-01-15 11:08:01浏览次数:40  
标签:存储 区别 元素 数据类型 数组 堆栈 数据结构


以预定义的格式存储和排列数据,以便能够以有效的方式检索和修改数据是您想要完成的众多事情之一,而数据结构是使之成为可能的构建块。数据结构本质上是数据的逻辑表示形式,用于以有序方式存储数据,以便于对数据执行各种操作。

在单个计算机程序中,我们可以访问各种不同的方法来存储和检索信息。如果您使用的是面向对象的编程语言,则“堆栈”和“数组”是存储数据的最常见方式。使用数组而不是堆栈当然是一个有效的实现选项。访问是两种选择之间的主要区别因素。

什么是堆栈?

堆栈是一种类似于线性列表的数据结构,由对象的顺序集合表示。

  • 堆栈可以被认为是物理堆栈或堆栈,其中项目像一堆书一样堆叠在另一个之上。对象的放置方式使得只能向堆栈的一端(称为堆栈顶部)添加新项目或删除现有项目。
  • 堆栈是一种动态数据结构,由于不断从堆栈中添加和删除项目,其大小总是在变化。
  • 可以在堆栈上执行的两个最基本的操作称为推送和弹出。当您将项目推送到堆栈中时,它们会添加到堆栈中,当您将它们从堆栈中弹出时,它们会从堆栈中删除。
  • 堆栈遵循称为LIFO的预定顺序,代表“后进先出”,这意味着最近添加的项目是首先从堆栈中删除的项目,然后是放在前面的项目。

什么是数组?

数组是线性数据结构的一种形式,始终定义为具有相同数据类型的项的集合。

  • 数组的值始终存储在已预先确定的位置,称为数组的索引。
  • 数组不是像堆栈那样的动态对象;相反,它们的大小在整个使用过程中保持不变。这意味着一旦为数组分配了空间,就无法更改其维度。
  • 数组是对属于同一数据类型的许多组件执行相同类型计算的有效技术之一。
  • 数组可以存储一个或多个数据类型相同的值,并允许使用与这些值对应的索引访问这些值。
  • 数组是一种提供随机访问的数据结构,这意味着项目以线性方式存储,但可以随机访问。

堆栈和数组之间的区别

下表突出显示了堆栈和数组之间的主要区别 -

比较基础


数组

定义

堆栈是一种线性数据结构,由按预定顺序排列的片段集合表示。

数组是相互关联并称为元素的数据值的集合。每个元素都由索引数组识别。

方法

推送、弹出和速览是可以在堆栈上执行的操作。

它具有可以应用于它的各种技术或操作,例如排序、遍历、后退、推送、弹出等。

存储

堆栈的大小是动态的。

数组的大小是固定的。

原则

LIFO原则指出,最后放置的元素是第一个从列表中删除的元素,是堆栈的基础。

例如,如果你想进入数组的第四个元素,你需要在方括号中指定变量名称及其索引或位置,例如“arr[4]”。这是因为数组中的项被分配给索引。

数据访问

堆栈不允许任意访问元素。

在数组中,允许任意访问元素。

操作

使用堆栈时,插入和删除只能从列表的单端(称为顶部)进行。

数组索引中的任何位置都可以作为插入或删除操作的起点。

指针

它只有一个指针,它指向顶部。此指针指定现在位于堆栈顶部的元素的地址,该元素也是最近添加的元素。

内存可以在构建时以数组形式分配,此过程也称为静态内存分配。

实现

可以使用数组创建堆栈。

堆栈不能用于实现数组。

数据类型

可以在堆栈中找到多种数据类型的元素。

数组的项都具有相同的数据类型。

结论

堆栈是数据结构中项集合的基本表示形式。堆栈中的项目按特定顺序排列,因此只能从一端添加到堆栈中或从堆栈中删除它们,即 LIFO 或 FILO 顺序中的堆栈顶部。堆栈可以是后进先出 (LIFO) 或先进后出 (FILO) 排序。

在称为数组的静态对象中,组件数始终相同。但是,与堆栈相比,数组的组件可以从任一端添加或从中取出组件,而不管它们最初放置的顺序如何。

标签:存储,区别,元素,数据类型,数组,堆栈,数据结构
From: https://blog.51cto.com/10zhancom/6008347

相关文章

  • cookie 和 session 的区别
    1.前言cookie和session的区别是什么?这个问题在面试中问到的频率非常高cookie和session的共同点:都是用来记录用户访问浏览器时保存的数据,比如:用户的身份信息等2.co......
  • Flex项目release后图片资源不见了–图片资源采用嵌入与不嵌入的区别
    ​近期项目发现,在使用release发布项目包,图片找不到了,而debug下面又有图片。后来发现,原来图片被另外一个组件嵌入了。下面例子展示了组件嵌入和不嵌入图片的区别<?xmlversi......
  • JavaScript 中搜索数组元素的四种方法
    在实际开发当中,我们经常会遇到类似诸如下面的需求:获取满足特定条件的数组中的所有项目要检查是否满足条件?检查数组中是否有特定值?在数组中找到指定值的索引?在本文中,我们将讨......
  • final、finally与finalize的区别
    final、finally与finalize的区别1.简单区别:final用于声明属性,方法和类,分别表示属性不可改变(常量),方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行......
  • 编程:C语言内存的堆栈模型
    内存:C语言内存的堆栈模型    一、C语言内存的堆栈模型 1、栈:栈底是高地址,栈顶是低地址。栈空间的地址生长方向:从高地址到低地址。 2、堆:堆底是低地......
  • 深拷贝与浅拷贝的区别?如何实现一个深拷贝?
    一、数据类型存储JavaScript中存在两大数据类型:基本类型引用类型基本类型数据保存在在栈内存中引用类型数据保存在堆内存中,引用数据类型的变量是一个指向堆内存......
  • 为什么你应该使用NumPy数组而不是嵌套的Python列表?
    在本文中,我们将向您展示为什么使用NumPy数组而不是嵌套的Python列表,以及它们之间的异同。PythonNumPyLibraryNumPy是一个Python库,旨在有效地处理Python中的数组。......
  • C#数组
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespacelearn_list2{internalclass......
  • 【数组】前缀和
    前缀和给出一个数列:123456789它的前缀和:136101521283645前缀和即:从第一个元素到该元素之和通常我们会在数组中触及到这类知识。假设给出原数组......
  • 定义一个长度为3的数组并打印改数组
    packagecom.fqs.demo;importjava.util.Arrays;publicclassChongZ{publicstaticvoidmain(String[]args){int[]array=newint[3];//......