认识栈结构
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
特点:后进先出即Last in First Out(LIFO)。
函数调用栈
封装栈结构
class Stack{
#items = []
push(data){
this.#items.push(data)
}
pop(){
return this.#items.pop()
}
peek(){
// return this.items[this.items.length-1]
return this.#items.at(-1)
}
isEmpty(){
return this.#items.length===0
}
size(){
return this.#items.length
}
clear(){
this.#items = []
}
toString(){
return this.#items.join("")
}
}
应用场景
十进制转二进制
function convert(decNumber){
let remStack = new Stack()
let number = decNumber
let string = ""
while(number>0){
rem = number%2
remStack.push(rem)
number = Math.floor(number/2)
}
while(!remStack.isEmpty()){
string+=remStack.pop()
}
return string
}
进制转换法
function convert(decNumber, type) {
let stack = new Stack();
let number = decNumber;
let string = ""; // 输出结果
let ofType = "0123456789ABCDEF";
while (number > 0) {
stack.push(number % type);
number = Math.floor(number / type);
}
while (!stack.isEmpty()) {
const val = stack.pop();
console.log(val);
string += ofType[val];
}
return string;
}