栈
数组是一种线性结构,并且可以在数组的任意位置插入和删除数据。但是有时候,我们为了实现某些功能,必须对这种任意性加以限制,而栈和队列就是比较常见的受限的线性结构。
栈(stack),它是一种受限的线性表,后进先出(LIFO)
1,其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。
2,LIFO(last in first out)表示就是后进入的元素,第一个弹出栈空间.类似于自动餐托盘,放上的托盘,往往先被出去使用.
3,向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
4,从一个栈册删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
利用数组实现栈
//利用数组实现栈
class Stack {
constructor() {
this._store = [];
}
//进栈
push(item) {
return this._store.push(item);
}
//从栈中取元素
pop() {
return this._store.pop();
}
//查看栈顶元素
peek() {
return this._store[this._store.length - 1];
}
//判断栈是否为空
isEmpty() {
return this._store.length === 0;
}
//获取栈中元素的个数
size() {
return this._store.length;
}
//将栈中的元素toString
toString() {
let resultString = "";
for (let i = 0; i < this._store.length; i++) {
resultString += this._store[i] + " ";
}
return resultString;
}
}
利用栈实现十进制转二进制
function getBinary(num) {
//初始化一个栈
const res = new Stack();
//把10进制转为0或1
while (num > 0) {
res.push(num % 2);
num = Math.floor(num / 2);
}
//弹出二进制数
let binaryStr = "";
while (!res.isEmpty()) {
binaryStr += res.pop();
}
return binaryStr;
}
const result= getBinary(100);
console.log(result); //1100100