为什么我们需要堆栈,因为我们已经有了这么多的数据结构,它们也可以处理反向链接列表和向量中的数据管理?其他数据结构没有的堆栈有什么用处/独特之处?
另外,为什么只有数组和链表与堆栈兼容,为什么向量不能与堆栈兼容?
发布于 2022-05-12 20:36:17
这听起来像个家庭作业问题。我认为最后一个问题是基于一个有缺陷的前提。
首先,堆栈是一个古老的概念.我在汇编代码级别上编写的每一台计算机都使用过它们。因此,它们的存在在一定程度上是出于历史原因。
但这是个有用的概念。堆栈有三个基本操作:
他们是一个简单的,先进的,最后的结构。它们对某些类型的语言很有用。有一些基于堆栈概念的编程语言。写起来太容易了。(语言本身)他们挺有趣的。
例如:
8 7 mul这是PostScript和其他基于堆栈的语言中的法律代码。解释器将其分解为令牌,然后看到一个8并将其推到堆栈上。它看到了7并推动了它。它看到了mul,并且知道多个操作数需要两个操作数,所以它会弹出7,弹出8,乘以它们,并推入56。当该行完成时,堆栈上只有一个56 (加上比这个更早的任何东西)。
在其他解析形式中,堆栈也是非常有用的。我在解析某些类型的输入(如XML)时使用它们。当我到达"end of object“标记时,我会弹出堆栈上的顶部项,然后在输入中遇到的下一件事是处理堆栈项的新顶部。
但是堆栈是一个概念,而不是一个实现。数组、链接列表和向量都是实现堆栈的合理方法。
至于最后一个问题--这是个有缺陷的问题。数组和向量有什么区别?嗯,那可能是语言方面的问题。在C++中,数组是固定长度的(而且我几乎从不使用它们)。我将使用向量来实现堆栈,堆栈的顶部是向量中的最后一项。
这是一个比使用链接列表更轻的答案,这取决于堆栈的大小。(每次你在任何分配的范围之外增长一个向量,代价都会很高,所以如果你没有提前分配足够的空间,链接列表可能会更便宜。)
发布于 2022-05-12 22:26:49
在做了一些阅读和研究之后,我认为:
的任务来说是更大的,也是有点不必要的。
发布于 2022-05-14 06:20:47
堆栈是一个ADT (抽象数据类型),由一个数学模型(一个元素序列)和在该模型上执行的一些操作(push、pop、isEmpty、makenull和top)组成。在许多应用程序中,这是您希望在列表上执行的唯一操作:每次删除元素时,都是最近插入到列表中的元素。栈的一个重要应用是调用堆栈,它用于实现过程调用。当过程A调用程序中的过程B时,过程B的新堆栈框架将被推到调用堆栈上。
ADT在Java中称为接口,是规范,而数据结构是关于如何实现这些规范的。可以使用数组数据结构或链接列表数据结构来实现堆栈,其方式是所有五个堆栈ADT操作都可以在O(1)时间内执行。
因此,我不会将堆栈称为数据结构;我将称之为ADT。数据结构的示例包括数组、排序数组、链接列表、双链接列表、二进制搜索树、哈希表、最大堆等。每个数据结构非常适合它们高效执行的子集操作。根据应用程序或算法中出现的操作子集(ADT),可以选择有效执行此操作子集的数据结构。
https://stackoverflow.com/questions/72221656
复制相似问题