Arrays,Linked-lists和Stacks有什么区别?

时间:2018-03-14 20:23:00

标签: data-structures

我目前正在学习算法和数据结构的基础知识,我对这些概念以及数组,链表和堆栈之间的差异感到有些困惑。

如果我错了,请纠正我:堆栈更像是抽象概念,数组和链表是数据结构吗? (因此我们可以使用数组或链接列表来实现堆栈的概念)

3 个答案:

答案 0 :(得分:3)

<强>阵列

书是一个数组。您可以按索引转到任何页面,然后按照您喜欢的任何增量快速前进或后退。

关联列表

清道夫狩猎是一个链表。您只能从一个项目转到下一个项目,因为每个项目都包含查找下一个项目的信息。

<强>堆栈

桌面上的一堆字母是一堆。你只能看到顶上的字母。删除顶部字母会显示下一个字母。

答案 1 :(得分:1)

从编程理论的角度来看,所有树都是抽象数据类型它们之间的根本区别在于它们的特征。

  • 数组 - 在固定时间内随机访问任何元素,但从数组中删除或添加元素是在线性时间内完成的
  • 链接列表 - 提供线性时间的随机访问(即顺序访问)。但是在恒定时间内添加或删除元素。
  • Stack有点不同。它只允许您访问单个元素 - 堆栈的顶部。这同样适用于删除和添加元素。您只能删除堆栈顶部的元素,反之亦然,在堆栈顶部添加新元素。

使用数组或链表可以实现是正确的,但这已经是一个实现的观点。从理论角度来看,它们是不同的抽象数据类型

事实上,如果你在汇编语言级别上深入挖掘,你只有2个选项来定位任意元素:

  1. 索引 - 计算内存中的元素位置
  2. 间接寻址 - 使用存储在内存中的指针来定位元素。

答案 2 :(得分:0)

ARRAY - 一个容器,可以被称为固定数量的项目,并且这些项目应该是相同的类型。

STACK - 一个元素列表,其中一个元素只能在称为栈顶的一端添加或删除。

LINKEDLIST - 称为节点的数据元素的线性集合,通过指针指向下一个节点。