JavaScript数据结构与算法Day1

149 阅读2分钟

什么是数据结构

  • 在计算机中存储和组织数据的方式

什么是算法(Algorithm)

  • 解决问题

数组

  • js的数组就是API的调用
  • 普通语言比如JavaArrayList不能存放不同的数据类型,且数组容量不能自动改变,其中间插入和删除操作性能比较低

栈结构

  • 栈结构示意图

  • 栈(stack),一种受限的线性表,是后进先出

  • 仅在栈顶能插入和删除
  • LastInFirstOut(LIFO)后进先出
  • 进栈,出栈
  • 栈的应用
  • 函数调用栈
  • 函数之间互相调用:A中调用B,B中调用C,C中调用D
  • 递归函数的栈溢出
  • 栈结构面试题

  • 栈结构代码实现封装

  • 实现栈可基于数组也可基于链表
  • 先封装栈类,定义一个类,也就是定义一个方法,让栈中的items为数组
  • 实现方法需要用原型来实现,不然每个实例都有这些全部方法就会太占用内存,在Stack类中,定义各原型方法,用本来就有的pushpop...
  • 注意使用this.items
  • 栈的常见操作
  • push(element):添加一个新元素到栈顶
  • pop():移除栈顶的元素,同时返回
  • peek():返回栈顶元素,不移除
  • isEmpty():如果栈里面没用任何元素就true,否则false
  • size():返回栈里的元素个数,像数组的length
  • toString():将栈结构的内容以字符串形式返回
 function Stack() {
            this.items = [];
            Stack.prototype.push = function (element) {
                this.items.push(element)
            }
            Stack.prototype.pop = function () {
                return this.items.pop();
            }
            Stack.prototype.peek = function () {
                return this.items[this.items.length - 1]
            }
            Stack.prototype.isEmpty = function () {
                return this.items.length == 0
            }
            Stack.prototype.size = function(){
                return this.items.length
            }
            Stack.prototype.toString = function(){
                var str = ''
                for(var i = 0;i<this.items.length;i++){
                    str += this.items[i] + ' '
                }
                return str
            }
        }
  • 用栈实现十进制转二进制
  • 定义一个方法要传入参数
  • 新定义一个栈
  • 用while循环,获取余数并将其压入栈
  • 把除的整数作为下一次的被除数
  • 直到这个数为小于等于0的值
  • while循环拿出栈里的值并转成字符串的形式
function dec2bin(decNumber) {
            var stack = new Stack()
            while(decNumber>0){
                stack.push(decNumber%2)
                decNumber = Math.floor(decNumber/2)
            }
            var res = ''
            while(!stack.isEmpty()){
                res += stack.pop()
            }
            return res
        }    
        console.log(dec2bin(1001));