JS数据结构(2)——栈
栈(stack)是一种** LIFO(Last-In-First-Out,后进先出)** 的数据结构。
它是一种受限的线性表,它的限制是仅允许在表的一端进行插入和删除运算,这一端就被称为栈顶,另外一端就是栈底。
向一个栈添加一个新元素叫做进栈、入栈或者压栈,它是把新元素放到栈顶元素的上面,成为新的栈顶元素。
从一个栈中删除元素叫做出栈或者退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈的结构:
创建栈
function Stack(){
this.items = [];//栈中的属性
// 入栈
Stack.prototype.push = function (element) {
this.items.push(element);
}
// 出栈
Stack.prototype.pop = function () {
return this.items.pop();
}
// 查看栈顶元素
Stack.prototype.peak = 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 result = '';
for(var i = 0; i<this.items.length; i++)
result += this.items[i];
return result;
}
}
栈的使用
var s = new Stack();
s.push(10);
s.push(20);
s.push(30);
s.push(100);
console.log(s); //结果为:Stack{ items: [10, 20, 30, 100]}
console.log(s.pop()); // 结果为:100
console.log(s.pop()); // 结果为:30
console.log(s); // 结果为: Stack{ items: [10, 20]}
console.log(s.isEmpty()); // 结果为:false
console.log(s.peak()); // 结果为: 20
console.log(s); // 结果为: Stack{ items: [10,20]}
console.log(s.toString()); // 结果为: 10 20
栈的应用
十进制转换为二进制:
function dec2bin(decNumber) {
var s = new Stack();
while (decNumber > 0){
s.push(decNumber % 2);
decNumber = Math.floor(decNumber / 2);
}
var binString = '';
while(!s.isEmpty()) {
binString += s.pop();
}
return binString;
}
console.log(dec2bin(100));
结果输出为:1100100