概念用途
特殊的列表
队列顾名思义,可以想一下银行排队的人,排在前面的先办理业务
用在很多地方,比如打印任务池
定义
队列只能队尾插入元素,队首删除元素
是一种 先进先出(FIFO) 的数据结构
插入元素叫做 入队,删除叫做 出队
特殊情况,删除元素不必遵守先进先出的约定,如急诊插队。这种我们需要 优先队列 的数据结构模拟
代码实现
function Queue() {this.dataStore = []this.inQ = inQthis.outQ = outQthis.getFirst = getFirstthis.getLast = getLastthis.toString = toStringthis.clear = clearthis.priorityOut = priorityOut}function inQ(ele) {this.dataStore.push(ele)}function outQ() {this.dataStore.shift()}function getFirst() {return this.dataStore[0]}function getLast() {return this.dataStore[this.dataStore.length - 1]}function toString() {return this.dataStore}function clear() {this.dataStore = []}var q = new Queue(),log = console.logq.inQ('a')q.inQ('b')// log(q.toString())// log(q.outQ())q.inQ('c')q.inQ('a')// log(q.toString())// log(q.getFirst())// log(q.getLast())// log(q.clear())// log(q.toString())// 优先队列// 改造 outQ 方法,遍历队列,优先取出最高级的,一次for 循环解决function priorityOut() {// 第一次写,写出了下面这个蠢东西// 实际上我只关心index, priority根本不需要记录,只要大于当前// var priority = 0,// index = 0// for (var i = 0; i<this.dataStore.length; i++) {// priority = this.dataStore[i].priority > priority ? this.dataStore[i].priority : priority// index = this.dataStore[i].priority > priority ? i : index// }//// 然后有了如下精妙的排序,这个应该是排序的一个算法。 淦 赶紧学吧var priority = 0for (var i = 1; i < this.dataStore.length; i++) {if (this.dataStore[i].priority > this.dataStore[priority].priority) {priority = i}}console.log(priority)return this.dataStore.splice(priority, 1)}function Person(name, priority) {this.name = namethis.priority = priority}personArr = {}personArr.p1 = new Person('a', 4)personArr.p2 = new Person('d', 5)personArr.p3 = new Person('g', 2)personArr.p4 = new Person('h', 177)personArr.p5 = new Person('6', 11)var personQueue = new Queue()for (var i = 1; i <= 5; i++) {personQueue.inQ(personArr[`p${i}`])}log(personQueue.toString())personQueue.priorityOut()log(personQueue.toString())
PS:优先队列是改变传统队列的出队方法,使用排序获取最大的index,然后splice出来即可
