手撕数据结构—-队列与优先队列
什么是队列(先进先出)
队列,和栈有点类似,但是又不太一样,队列遵循先进先出的原则。
列就是排队,在前面的人先享受服务,完后前面的人先走。
普通队列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
class Queue { constructor() { this.list = []; } push(val) { return this.list.push(val); } pop() { return this.list.shift(); } peck() { return this.list[0]; } size() { return this.list.length; } isEmpty() { return this.list.length === 0 ? true : false; } toString() { return this.list.join(''); } }
|
优先队列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
class QueueNode { constructor(data, priority) { this.data = data; this.priority = priority; } }
class PriorityQueue extends Queue { constructor() { super(); }
push(val, priority = 0) { if (!val) throw new Error('need a parameter'); let newnode = new QueueNode(val, priority); let flag = false; for (let i = 0; i < this.list.length; i++) { if (this.list[i].priority < priority) { this.list.splice(i, 0, newnode); flag = true; return; } } if (!flag) { this.list.push(newnode); } } toString() { let result = ''; this.list.forEach((item) => { result += '{data:' + item.data + ',priority:' + item.priority + '}'; }); return result; } }
|