堆栈及;队列-Javascript-实现方法和工作设置示例?

堆栈及;队列-Javascript-实现方法和工作设置示例?,javascript,data-structures,stack,lifo,Javascript,Data Structures,Stack,Lifo,编辑 我不同意这是一个重复,我不是在问实现它们的最佳方式,我下面的问题是要澄清有多少种方式可以定义它们,以及问一个在工作环境中何时考虑并使用它们的示例。(即可以定义为对象?) 我正在阅读课程中的一段内容,需要澄清: 堆栈数据结构实现后进先出优先级收集。它提供两个功能:推送和弹出。push将元素添加到堆栈顶部,而pop将删除最顶部的元素 我在这个示例中被赋予给定一个字符串,使用堆栈将其反转 代码 我举了一个例子: let word = 'Bloc'; const reverseString =

编辑

我不同意这是一个重复,我不是在问实现它们的最佳方式,我下面的问题是要澄清有多少种方式可以定义它们,以及问一个在工作环境中何时考虑并使用它们的示例。
(即可以定义为对象?)

我正在阅读课程中的一段内容,需要澄清:

堆栈数据结构实现后进先出优先级收集。它提供两个功能:推送和弹出。push将元素添加到堆栈顶部,而pop将删除最顶部的元素

我在这个示例中被赋予
给定一个字符串,使用堆栈将其反转

代码

我举了一个例子:

let word = 'Bloc';

const reverseString = (str) => {

  let stack = [];

  for (let i of str) {

      stack.push(str[i]);

  }

  let reversed = '';

  for (let i of word) {

      reversed += stack.pop();

  }

  return reversed;

 }

console.log(reverseString('Bloc'));
  • 定义或使用堆栈时,
    数组、链表和类是定义堆栈的唯一方法吗

  • 在工作环境中考虑和使用这一点的频率是多少?有没有一个简单的例子,当有人正在构建一个应用程序,并考虑使用这个

  • 在我在顶部给出的段落中,它说它提供了两个功能,
    推送和弹出
    ,这自动意味着
    数组
    数组方法
    ,对吗?除了定义堆栈的其他方法之外,这些是否只是额外的特性


  • 简而言之,
    stack
    只是一种数据结构,用于解决不同语言、系统、库等中的特定问题

  • 如果我们专门讨论javascript,那么我想说,您列出的方式(数组、链表,作为一个类)都是构建堆栈的良好开端。然而,它们都只是您试图用来构建另一个数据结构的数据结构。 您构建的任何类型的
    堆栈
    都是为特定目的构建的,具有不同的属性。例如,您可以随时限制堆栈中的元素数量(例如-堆栈中的元素最大数量为4,然后当您尝试向堆栈中添加第5个元素时-它将达到
    堆栈溢出
    ,并且不允许您这样做)。您还可以限制进入其中的数据类型。这完全取决于堆栈的用途。 数组是可视化堆栈的好方法,也是构建堆栈的绝佳起点,因为它们已经为您提供了像堆栈一样操纵自身的方法(
    push
    pop
    )。但是您不需要使用数组,您可以使用
    对象
    并找到处理这些对象的方法。 世界就是你的牡蛎:)
  • 我个人不经常在我的工作场所构建堆栈(我是一名web开发人员)。然而,了解和理解它是一种重要的数据结构。 如果您将在一个执行大量数据操作的环境中工作,那么您也将偶尔编写自己的堆栈实现。一些
    js
    库有自己的堆栈实现,如果您要构建它们,那么您应该了解它是如何工作的! 如果您将使用图形和图形数据堆栈,那么理解图形和图形数据堆栈是必不可少的。 所以再说一遍——这一切都取决于你的工作场所对数据聚合和数据处理的重视程度
  • js
    中的
    push
    pop
    用于
    数组,这是正确的。我想说,这两个函数是堆栈的重要组成部分,因为它们为您提供了堆栈操作的基本方法。然而,这两种方法并不都是定义的,可以添加更多

  • 希望能有帮助。祝你好运

    有许多不同的方法可以模拟堆栈,但最终都归结为JavaScript对象的变体。JavaScript没有内置堆栈、队列或链表等结构。甚至数组也是对象的一种形式,带有一些额外的方法。Javascript的原型继承使您能够模拟这些结构并形成对象变体。模拟堆栈的一个简单示例是使用构造函数,它使用自己的方法生成对象:

    function Stack() {
      return {
        items: [],
        push: function ( item ) {
          this.items[this.items.length] = item;
        }
        pop: function () {
          const topItem = this.items[this.items.length - 1];
          this.items.length = this.items.length - 1;
          return topItem;
        }
      }
    }      
    
    然而,您可能永远不会在Javascript中真正模仿这样的堆栈。通常,您只需要像上面那样使用数组方法。堆栈如何工作的想法很重要

    例如,假设您获得一组数据,其中包括用户在站点上的开始时间和结束时间,按开始时间排序(例如
    [[02:30,03:00][02:45,3:15][4:00,5:30][5:00,6:00]
    ),您的任务是显示用户在您的站点上而不是在您的站点上的时间图表。查看差距并保持其有序的一种解决方案是合并重叠的间隔(例如变成
    [[2:30,3:15][4:00,6:00]

    您可以通过将第一个项目推到堆栈上,并将其与集合中的下一个间隔进行比较来实现这一点。如果没有重叠,您可以将该项目推到堆栈上,但如果确实重叠,您可以将其从堆栈中弹出,合并两个项目,然后将其推回到堆栈上,以便在下一个项目时进行比较


    是的,在JavaScript中,您可能仍然会为此使用数组,但是集成了堆栈结构的思想这些将有内置的堆栈、队列、链接列表等。因此了解它们的工作原理以及它们各自的优缺点/用例非常重要。

    可能重复的@PM77-1请查看我的编辑,谢谢