数据结构标准入门-栈

98 阅读2分钟

数组是计算机科学中最常用的数据结构,我们知道,我们可以在数组的任意位置上删除或者添加元素,然而,有时候我们还需要一种在添加和删除元素时有更多的控制数据结构。有两种数据结构类似于数组,但是在添加元素时更加可控。他们就是队列和栈。这里我们讲栈

什么是栈?

栈是一种遵循从后进先出(LIFO)原则的有序集合。新添加的或者等待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫做栈底。在栈里,新元素都靠近栈顶。旧元素都接近栈底。

栈的创建

我们将创建一个类来表示栈。让我们从基础开始。先声明这个类:

function Stack(){
    //各种属性和方法的声明
}

首先,我们需要一种数据结构来保存栈当中的元素。我们这里可以选择数组

let item=[]

接下来,我们要为我们的栈声明一些方法:

  • push(element(s)):添加一个或者几个新元素到栈顶

  • pop():移除栈顶的元素,同时返回被移除的元素

  • peek():返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素,仅仅返回他)

  • isEmpty():如果栈里面没有任何元素就返回true,否则就返回false

  • clear():移除栈里的所有元素

  • size():返回栈当中的元素个数,这个方法和length属性类似

代码实现

class Stack{  constructor(){    this.dataStore=[]  }  push(key){    this.dataStore.push(key)  }  pop(){    return this.dataStore.pop()  }  peek(){    return this.dataStore[this.dataStore.length-1]  }  isEmpty(){    return this.dataStore.length===0?true:false  }  clear(){    this.dataStore=[]  }  size(){    return this.dataStore.length  }  toString(){    let s='栈的元素为:'    for(let i=0;i<this.dataStore.length;i++){      if(i===this.dataStore.length-1){        s+=`${this.dataStore[i]}`      }else{        s+=`${this.dataStore[i]}=>`      }    }    return s  }}function fn(){  let stack=new Stack()  stack.push(1)  stack.push(2)  stack.push(3)  stack.push(4)  console.log(stack.toString())  console.log(stack.pop())  console.log(stack.toString())  console.log(stack.peek())  console.log(stack.isEmpty())  console.log(stack.clear())  console.log(stack.isEmpty())}fn()

栈解决了什么问题?

客户输入一个10进制数,再输入一个他需要转化为的进制数,然后我们编写一个函数,对10进制数进行处理,最后返回客户需要的进制数

// 进制转化  parseStack(num1,num2){    if(num1===0){      return num1    }    while(num1!==0){      this.dataStore.push(num1%num2)      num1=Math.floor(num1/num2)    }    return this.dataStore  }  parseStackToString(){    let s=''    while(this.dataStore.length!==0){      s+=this.dataStore.pop()    }    return parseInt(s);  }

视频讲解

www.bilibili.com/video/bv1u3…