JavaScript数据结构——栈的实现

时间:2023-03-09 19:07:28
JavaScript数据结构——栈的实现

  栈(stack)是一种运算受限的线性表。栈内的元素只允许通过列表的一端访问,这一端被称为栈顶,相对地,把另一端称为栈底。装羽毛球的盒子是现实中常见的栈例子。栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

  下图演示了入栈和出栈的过程:

  aaarticlea/png;base64,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" alt="" />

  我们知道pop()方法虽然可以访问栈顶元素,但是调用该方法后,栈顶元素被删除,而peek()方法返回栈顶元素,并不改变栈。push(),pop(),peek()是实现栈的三个主要方法,下表定义了栈的主要方法:

主要方法及属性
dataStorage Array 存储数据的底层数据结构
top int 记录栈顶元素位置
push fucntion 入栈方法
pop fucntion 出栈方法
peek fucntion 返回栈顶元素
length     fucntion   返回栈内元素个数
clear function   清空栈元素

  

 

 

栈的实现

  构造方法:  

 function Stack() {
this.dataStorage = [];
this.top = 0;
this.push = push;
this.pop = pop;
this.peek = peek;
this.length = length;
this.clear = clear;
}

  我们用数组来存储栈内元素,构造方法将其初始化为一个空数组,变量top记录栈顶元素位置,被构造方法初始化为0,表示栈顶元素的初始位置为0,当有元素入栈,top也随之改变。

  push()方法的实现:  

 function push(element) {
this.dataStorage[this.top++] = element;//将元素保存在数组top位置,并指向下一空位置
}

  当向栈中压入一个新元素时,需要将其保存在数组中变量 top 所对应的位置,然后将 top 值加 1,让其指向数组中下一个空位置。这里要特别注意 ++ 操作符的位置,它放在 this.top 的后面,这样新入栈的元素就被放在top 的当前值对应的位置,然后再将变量 top 的值加 1,指向下一个空位置。

  pop方法的实现:  

 function pop() {
return this.dataStorage[--this.top];//返回数组top位置的元素,并让top指向top-1位置元素
}

  pop() 方法恰好与 push() 方法相反——它返回栈顶元素,同时将变量 top 的值减 1。

  peek() 方法的实现:  

 function peek() {
return this.dataStorage[this.top-1];//返回数组top-1位置的元素
}

  这里需要考虑到空栈调用peek方法时候,返回的是-1位置元素,为undefined。

  length()方法的实现:  

 function length() {
return this.top;
}

  如果需要知道栈内到底存了多少个元素,可通过调用length()方法,栈元素的个数即top的值。

  清空栈clear()饭方法的实现:

 function clear() {
this.top = 0;
}

  将top设置为0,即栈顶元素位置为0,此时为空栈。

  下面我们来测试下: 

         var s = new Stack();
s.push("a");//向栈顶压入元素
s.push("b");
s.push("c");
console.log(s.length());//输出栈内元素个数
console.log(s.pop());//返回栈顶元素并删除
console.log(s.length());
console.log(s.peek());//返回栈顶元素不删除
s.clear();
console.log(s.length());
console.log(s.peek());

  输出结果:

  JavaScript数据结构——栈的实现

  最后一行返回undefined,是因为栈内元素被清空后,栈顶无值。

  Stack实际应用  

  我们来模拟一个简单的递归过程,计算数的阶乘。

  先使用递归实现:  

 function Factorial(num) {
if (num == 0) {
return 1;//0的阶乘为1
} else {
return num*Factorial(num - 1);
} }

  用栈来计算,首先需要将数字1~num全部压入栈,然后将数字连乘。 

         function StackFactorial(num) {
var stack = new Stack();
while (num > 1) {
stack.push(num--);//将1~num压入栈
}
var result = 1;
while (stack.length() > 0) {
result *= stack.pop();//连乘从栈顶取出的元素
}
return result;
}

  测试结果:  

 console.log(Factorial(10));//输出3628800
console.log(StackFactorial(10));//输出3628800

  本文的示例代码地址:https://github.com/LJunChina/JavaScript