1、对栈的操作

栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶,是一种后入先出的数据结构。

push() 入栈

pop()出栈,可以访问栈顶元素,但这个元素删除了

peek()返回栈顶元素,而不删除

clear()清除栈内所有元素

length属性记录栈内元素个数

top变量用以记录栈顶元素的位置,标记哪里可以加入新元素

2、栈的实现

function Stack(){
    this.dataStore = []
    this.top    = 0;
    this.push   = push
    this.pop    = pop
    this.peek   = peek
    this.length = length;
}

function push(element){
    this.dataStore[this.top++] = element;
}

function peek(element){
    return this.dataStore[this.top-1];
}

function pop(){
    return this.dataStore[--this.top];
}

function clear(){
    this.top = 0
}

function length(){
    return this.top
}

 

 3、数制间的相互转换

可利用栈将一种数制转换为另一种数制。,假设将数字n转换为以b为基数的数字。

(1)最高位为n%b,将此位压入栈

(2)使用n/b代替n.

(3)重复步骤1和2,直到n等于0,且没有余数

(4)持续将栈内元素弹出,直到栈为空,依次将这些元素排列,就得到转换后数字的字符

4、回文

回文是指一种现象:一个单词、短语或数字,从前往后写和从后往前写都是一样的

function isPalindrome(word) {
    var s = new Stack()
    for (var i = 0; i < word.length; i++) {
        s.push(word[i])
    }
    var rword = "";
    while (s.length() > 0) {
        rword += s.pop();
    }
    if (word == rword) {
        return true;
    } else {
        return false;
    }
}

isPalindrome("aarra") //false
isPalindrome("aaraa") //true

 

5、递归

使用栈来模拟计算5!的过程

function fact(n) {
    var s = new Stack()
    while (n > 1) {
        //[5,4,3,2]
        s.push(n--);
    }
    var product = 1;
    while (s.length() > 0) {
        product *= s.pop();
    }
    return product;
}

fact(5) //120

 

posted @ 2017-01-05 21:34  Focousss  阅读(104)  评论(0编辑  收藏  举报