JS-栈常见操作

JavaScript025

JS-栈常见操作,第1张

<!doctype html>

<html lang="en">

    <meta charset="UTF-8">

    <meta name="viewport"

          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

  function Stack(){

//栈中的属性

      this.items=[]

//    栈的相关操作

  //  1.将元素压入栈,两种方法!第二种方法好啊!,第一种方法是对某个实例添加了方法,第二种方法是对某个类添加了方法!共享!

  //    this.push=function (){}

      Stack.prototype.push= (element)=>{

this.items.push(element)

}

// 2.将栈中的元素取出来

      Stack.prototype.pop=()=>{

return this.items.pop()

}

//    3.查看栈中的元素

      Stack.prototype.peek=()=>{

return this.items[this.items.length-1]

}

//    4.判断栈是否空

      Stack.prototype.isEmpty=()=>{

return  this.items.length===0

      }

//    5.获取栈中元素的个数

      Stack.prototype.size=()=>{

return this.items.length

      }

//    6.toString的方法

      Stack.prototype.toString=()=>{

//    20 10 12 8 7

          let resultString=''

          for (let i=0i

resultString +=this.items[i]+' '

          }

return resultString

}

}

//  栈的使用

//  验证!

  let s=new Stack()

s.push(20)

s.push(10)

s.push(100)

s.push(77)

alert(s)

s.pop()

s.pop()

alert(s)

alert(s.peek())

alert(s.isEmpty())

alert(s.size())

</html>

结果显示:

成功实现!

这很好理解,比如说这么个函数:

function sum(i)

{

if (i == 1) return 1

return i + sum(i - 1)

}

显然,这是一个递归函数,函数自己调用自己。

那么每个调用,都必须保存一个i的变量。

此时就要用堆栈。堆栈的栈顶始终保持着函数的局部变量。当函数返回,则往回收缩,这多方便。

而堆呢?适合全局的、一般的存储。

栈:特点就是一个先进后出的结构。队列:特点就是一个先进先出的结构。//一般只要你满足这个特点就可以称之为栈或队列。栈的应用:非常广泛,在CPU内部就有提供栈这个机制。主要用途:函数调用和返回,数字转字符,表达式求值,走迷宫等等。在CPU内部栈主要是用来进行子程序调用和返回,中断时数据保存和返回。在编程语言中:主要用来进行函数的调用和返回。可以说在计算机中,只要数据的保存满足先进后出的原理,都优先考虑使用栈,所以栈是计算机中不可缺的机制。队列的应用:队列主要用在和时间有关的地方,特别是操作系统中,队列是实现多任务的重要机制。windows中的消息机制就是通过队列来实现的。进程调度也是使用队列来实现,所以队列也是一个重要的机制。只要满足数据的先进先出原理就可以使用队列。