数据结构day1-1 数组 与 栈 受限的线性结构

 

一、 数组

JS的数组就是API的调用

因此 老师没讲。。

 

二、栈结构 (基于数组来实现的)

我们知道数组是一种线性结构 并且可以在数组任意位置 插入和删除数据

但是有时候我们为了实现某些功能必须对这种任意性 加以限制.

而栈和队列就是比较常见的 受限的线性结构  我们先学习栈结构

栈结构示意图

 

添加(进栈,入栈,压栈)与删除(出栈,退栈)元素 只能在一端进行操作

 

 

递归自己调用自己  栈溢出 (自己考虑。。)

 

 

三、栈结构的实现 栈的封装

function Stack() {
  this.items = []

  // 栈的相关操作
  // 1、将元素压入栈
  Stack.prototype.push = function(element) {
    this.items.push(element)
  }
  // 2、从栈中取出元素
  Stack.prototype.pop = function() {
    return this.items.pop()
  }
  // 3、查看一下栈顶元素
  Stack.prototype.peek = function() {
    return this.items[this.items.length - 1]
  }
  // 4、判断栈是否为空
  Stack.prototype.isEmpty = function() {
    return this.items.length == 0
  }
  // 5、获取栈中元素个数
  Stack.prototype.size = function() {
    return this.items.length
  }
  // 6、toString方法
  Stack.prototype.toString = function() {
    var resultString = ''
    for (var i=0; i< this.items.length; i++) {
      resultString += this.items[i] + ' '
    }
    return resultString
  }
}

var s = new Stack();

s.push(20)
s.push(10)
s.push(100)
s.push(40)

alert(s)

s.pop()
s.pop()

alert(s)

alert(s.peek())

alert(s.isEmpty())

alert(s.size())

 

四: 100 十进制转二进制 计算步骤

 

 

// 函数: 将十进制转成二进制
function dec2bin(decNumber) {
  // 1、
  var stack = new Stack()

  while(decNumber > 0) {
    //1 、获取余数 压入到栈
    stack.push(decNumber % 2)
    //2 、 获取整除后的结果 作为下一次运行的数字
    decNumber = Math.floor(decNumber / 2)
  }

  // 3、冲栈中取出0 1
  var binaryString = ''
  while(!stack.isEmpty()) {
    binaryString += stack.pop()
  }
  
  return binaryString;
}
alert(dec2bin(100))

 

posted @ 2019-07-09 14:48  suanmei  阅读(270)  评论(0编辑  收藏  举报