了解堆栈的工作原理

259 阅读2分钟

了解堆栈的工作方式

你可能很熟悉你桌子上的一摞书。你可能已经使用了文本编辑器的撤销功能。你也可能习惯于在你的手机上按下后退键,回到你的应用程序中的前一个视图。

你知道它们有什么共同点吗?它们都以一种方式存储数据,以便你可以向后穿越。

堆栈中最上面的书是最后放在那里的。如果你把那本书从堆栈的顶部移走,你就会暴露出在最后一本书之前放在那里的那本书,以此类推。

如果你仔细想想,在上述所有的例子中,你得到的是 "后进先出 "式的服务。我们将尝试用我们的代码来模仿这一点。

  1. 这种数据存储方案被称为堆栈。特别是,我们必须实现push()方法,将JavaScript对象推到堆栈的顶部;以及pop()方法,将当前时刻处于堆栈顶部的JavaScript对象删除。
  2. 在这里,我们有一个以数组形式表示的家庭作业堆栈。"BIO12 "在底部,"PSY44 "在堆栈的顶部。
  3. 修改给定的数组,用上面提到的JavaScript方法把它当作一个堆栈。从堆栈中移除最上面的元素"PSY44"。然后添加 "CS50 "作为栈顶的新元素。

var homeworkStack = ["BIO12", "HIS80", "MAT122", "PSY44"]; 
homeworkStack.pop();
homeworkStack.push("CS50");

我们将创建我们自己的堆栈类。尽管你可以使用数组来创建堆栈,但有时最好是限制我们对堆栈的控制量。除了push和pop方法之外,堆栈还有其他有用的方法。让我们给我们的堆栈类添加一个 peek, isEmpty, 和 clear 方法。

  1. 写一个push方法,把一个元素推到堆栈的顶部;
  2. 写一个pop方法,移除并返回堆栈顶部的元素;写
  3. 一个peek方法,查看堆栈中的顶部元素;
  4. 写一个isEmpty方法,检查堆栈是否为空;
  5. 写一个clear方法,移除堆栈中的所有元素。通常情况下,堆栈没有这个功能,但是我们添加了一个打印辅助方法,在控制台记录集合。
function Stack() {
  var collection = [];
  
  this.print = function() {
    console.log(collection);
  };
  
  this.push =  function(val){
      return collection.push(val)
      };
      
  this.pop =   function(){
      return collection.pop()
      };
      
  this.peek =  function(){
      return collection[collection.length - 1]
      };
      
  this.isEmpty =  function(){
      return collection.length === 0;
      };
      
  this.clear =  function(){ 
      return collection.length = 0;
      };
}