1. 程式人生 > 實用技巧 >資料結構之棧結構

資料結構之棧結構

佇列和棧的區別

佇列結構:先進先出

棧結構:後進先出

畫圖理解棧

封裝棧函式

function Stack() {
    this.container = [];
}
Stack.prototype = {
    constructor: Stack,
    //進棧執行
    enter: function enter(element) {
        this.container.unshift(element)
    },
    //出棧執行
    leave: function leave() {
        return this.container.shift()
    },
    //獲取棧元素的數量
    size: function size() {
        return this.container.length;
    },
    //獲取棧中的元素
    value: function value() {
        return JSON.parse(JSON.stringify(this.container))
    },
};
let st = new Stack();
for (let i = 1; i <= 6; i++) {
    st.enter(i)
}
console.log(st.value())

練習

// 按照6 5 4 3 2 1的順序進棧,中間可以隨時出棧,問下面哪一個出棧是不合法的

A:5 4 3 6 1 2

B:4 5 3 2 1 6

C:3 4 6 5 2 1

D:2 3 4 1 5 6

答案:選c 6進棧 5進棧 4進棧 3進棧 ->3出棧 4出棧 6出棧出現問題 6上面還有5 所以不合法

利用棧結構將十進位制轉化為二進位制

封裝函式

程式碼

function decimal2(decimal) {
    let stack = new Stack()
    while (decimal > 0) {
        let merchant = Math.floor(decimal / 2),
        remainder = decimal % 2 ;
        stack.enter(remainder);
        decimal = merchant
    }
    return stack.value().join('')
}
let n = 954284
console.log(n.toString(2));
console.log(decimal2(n))