/*
基于线性表的 - 堆栈
尾部插入和删除
*/
class ListStack{
constructor() {
this.arr = new Array();
this.length = 0;
this.size = 10;
this.realloc = () => {
let new_arr;
if(this.length === this.size) {
// 满了 增加内存
this.size = this.size*2;
new_arr = new Array(this.size);
} else if(this.size > 10 && this.length <= Math.floor(this.size /4)) {
this.size = Math.floor(this.size /2);
new_arr = new Array(this.size);
}
if(new_arr) {
this.arr.forEach((v, i) => {
new_arr[i] = v;
});
this.arr = [...new_arr];
}
}
}
push(value){
this.arr[this.length] = value;
this.length++;
this.realloc();
}
pop() {
if(this.length === 0) {
return undefined;
}
const value = this.arr[this.length -1];
delete this.arr[this.length -1];
this.length--;
this.realloc();
return value;
}
}
const list = new ListStack();
list.push(1);
list.push(2);
list.push(3);
list.push(4);
list.push(1);
list.push(2);
list.push(3);
list.push(4);
list.push(1);
list.push(2);
list.push(3);
list.push(4);
console.log(list.pop());
console.log(list.pop());
console.log(list.pop());
console.log(list.pop());
console.log(list.pop());
console.log(list.pop());
console.log(list.pop());
console.log(list);