队列(Queue)是一种运算受限的线性表,特点:先进先出。(FIFO:First In First Out)
受限之处:
- 只允许在表的前端(front)进行删除操作。
- 只允许在表的后端(rear)进行插入操作。
队列在程序中的应用
- 打印队列:计算机打印多个文件的时候,需要排队打印。
- 线程队列:当开启多线程时,当新开启的线程所需的资源不足时就先放入线程队列,等待 CPU 处理。
队列常见的操作
enqueue(element) 向队列尾部添加一个(或多个)新的项。dequeue() 移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。front() 返回队列中的第一个元素——最先被添加,也将是最先被移除的元素。队列不做任何变动(不移除元素,只返回元素信息与 Map 类的 peek 方法非常类似)。isEmpty() 如果队列中不包含任何元素,返回 true,否则返回 false。size() 返回队列包含的元素个数,与数组的 length 属性类似。toString() 将队列中的内容,转成字符串形式。
代码实现
classQueue{constructor(){this.items=[];}enqueue(item){this.items.push(item)}dequeue(){returnthis.items.shift()}front(){returnthis.items[0]}isEmpty(){returnthis.item.length===0}// size() 查看队列中元素的个数size(){returnthis.items.length}// toString() 将队列中的元素以字符串形式返回toString(){letresult=''for(letitemofthis.items){result+=item+' '}returnresult}}击鼓传花
分析:传入一组数据集合和设定的数字 number,循环遍历数组内元素,遍历到的元素为指定数字 number 时将该元素删除,直至数组剩下一个元素。
functionqueueGame(nameList,number){constqueue=newQueue();for(constnameofnameList){queue.enqueue(name)}while(queue.size()>1){for(leti=0;i<number-1;i++){queue.enqueue(queue.dequeue());}queue.dequeue();}constendName=queue.front()returnnameList.indexOf(endName)}
队列(Queue)是一种运算受限的线性表,特点:先进先出。(FIFO:First In First Out)
受限之处:
队列在程序中的应用
队列常见的操作
enqueue(element)向队列尾部添加一个(或多个)新的项。dequeue()移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。front()返回队列中的第一个元素——最先被添加,也将是最先被移除的元素。队列不做任何变动(不移除元素,只返回元素信息与 Map 类的 peek 方法非常类似)。isEmpty()如果队列中不包含任何元素,返回 true,否则返回 false。size()返回队列包含的元素个数,与数组的 length 属性类似。toString()将队列中的内容,转成字符串形式。代码实现
击鼓传花
分析:传入一组数据集合和设定的数字 number,循环遍历数组内元素,遍历到的元素为指定数字 number 时将该元素删除,直至数组剩下一个元素。