js的结构与算法

100 阅读2分钟

昨天看到一本书,叫做JavaScript的结构与算法,觉得不错分享一下我看的几页东西。

这个定义大家可能都知道,一种先进后出的有序集合。先添加的元素保存在栈的末尾,称作栈顶,另一端就叫做栈底。

不画图了,就举个例子,把书放到箱子里,先放的书在底下,后放的在上面,那么取书的时候,先要拿出上面的才能取到下面的。

接下来就用js创建一个栈

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

首先我们要选个数据结构来保存栈里的元素。可以选择数组

然后我们实现一个栈需要的方法



function Stack(){
    let items=[]
    //给栈里添加元素
    this.push = function (element){
        items.push(element)
    }
    //判断一个栈是否为空
    this.isEmpty = function (){
        return items.length == 0
    }
    //移除一个元素
    this.pop = function (){
        return items.pop()
    }
    //栈的大小
    this.size = function (){
        return items.length()
    }
    //返回栈的第一个元素
    this.peek = function (){
        return items[items.length-1]
    }
    //清空栈
    this.clear = function (){
        items = []
    }
    //打印栈
    this.print = function (){
        console.log(items.toString());
    }
}

上面是我们实现的栈。 我们先来学习如何使用栈。

let stack = new Stack();
console.log(stack.isEmpty());//返回true

下来就是给栈里添加元素

stack.push(1)
stack.push(2)
stack.push(3)

测试栈的长度

console.log(stack.size());//3

然后我们删除一个栈的元素,最后清空它

stack.pop()
stack.clear()
接下来用我们的栈解决一些问题

从十进制转为二进制 因为二进制是满2进1,所以先把十进制数字跟2整除,直到结果为0为止。 让我们来完成它

function tenToTwo(num){
    let remStack = new Stack(),
        rem,
        binaryString = '';
    while(num>0){
        rem = Math.floor(num % 2);
        remStack.push(rem);
        num = Math.floor(num / 2);
    }
    while(!remStack.isEmpty()){
        binaryString += remStack.pop()
    }
     console.log(binaryString);
}
tenToTwo(10) //1010

甲方看了直摇头,这不行啊,我还想要算8进制,16进制,你看着办吧!

沉思~~~~~

one minute later

    let remStack = new Stack(),
        rem,
        binaryString = '',
        digits='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    while(num>0){
        rem = Math.floor(num % base);
        remStack.push(rem);
        num = Math.floor(num / base);
    }
    while(!remStack.isEmpty()){
        binaryString += digits[remStack.pop()]
    }
     console.log(binaryString);
}
tenToAny(10,16); //A

就像这个A一样,我们的代码真A~~~