自助餐的盘子,后进先出。
const log = console.log class Stack { //栈中的属性 items = [] constructor(){ log(this) } push(element) { this.items.push(element) } pop() { if(this.items.length === 0) return null return this.items.pop() } peek() { if(this.items.length === 0) return undefin const index = this.items.length - 1 return this.items[index] } isEmpty() { return this.items.length === 0 } size() { return this.items.length } toString() { return `栈底 -> ` + this.items.join(' -> ') } }复制成功
100 => 1100 100const toBin = (number) => { const stack = new Stack() while(number > 0) { stack.push(number % 2) number = Math.floor(number / 2) } // return stack.toString() let binaryString = '' while(!stack.isEmpty()) { binaryString += stack.pop() } return binaryString } log(toBin(100))复制成功
排队上厕所,先进先出。
实现类型:1.队列 2.优先级队列
//例子:击鼓传花 //队列 const log = console.log class Queue { items = [] constructor(){ log(`前端`,this.items) } enqueue(element) { this.items.push(element) } dequeue() { return this.items.shift() } front() { return this.items[0] } isEmpty() { return this.items.length === 0 } size() { return this.items.length } toString() { return `前端 -> ` + this.items.join(' -> ' + ` -> 后端`) } } const passGame = (nameList,targetNum) => { const queue = new Queue() nameList.forEach(item => { queue.enqueue(item) }) while(queue.size() > 1){ for(let i = 0; i < targetNum - 1; i++) { queue.enqueue(queue.dequeue()) } queue.dequeue() } return queue.front() } // log(passGame(['Lily','lucy','tom','lilei','why'],3)) // log(passGame([1,2,3,4,5],3))复制成功
//优先级队列 const log = console.log class QueueElement { constructor(element, priority) { this.element=element this.priority=priority } } class PriorityQueue { items = [] enqueue = (element,priority) => { const obj = new QueueElement(element,priority) if(this.size() === 0) { this.items.push(obj) return } //变量 let added = false for(let i=0; i<this.size(); i++) { if(obj.priority < this.items[i].priority) { this.items.splice(i, 0, obj) added = true //。。。。。。。。。。。 break } } if(!added) this.items.push(obj) } dequeue() { return this.items.shift() } front() { return this.items[0] } isEmpty() { return this.items.length === 0 } size() { return this.items.length } toString() { let result = '' this.items.forEach(item => result+=`${item.element},优先级:${item.priority} => `) return result } } let queue = new PriorityQueue() queue.enqueue(4399,0) queue.enqueue(439,350) queue.enqueue(49,124) queue.enqueue(99,50) // queue.enqueue(499,-1) log(queue.toString())复制成功