基本定义

队列结构是一种受限的数据结构,它是一种线性表,符合先进先出的特点(FIFO—-> First In First Out)。受限之处是因为他只允许在前端进行删除操作,在后端进行插入操作。比如说我们日常生活中的排队,有限排队的人优先处理。

在JavaScript中实现队列结构

实现队列结构可以通过数组实现,也可以基于链表实现,采用数组实现效率不高,因为我们删除了第一个元素,会导致后面的所有元素都要往前面移一位,但是还没有学习到链表,于是我们就采取熟悉的数组实现。

队列的常见操作

  1. enqueue:向队列尾部添加一个或多个项
  2. dequeue:移除队列第一个项,也是需要删除的哪一项,并且返回被删除的元素
  3. front:返回队列的第一个元素,队列不做任何操作,单纯的看一眼会被移除的元素
  4. isEmpty:如果队列为空则返回true,反之返回false
  5. size:返回队列中的元素个数
  6. toString:将队列的元素转换为字符串

利用数组实现队列结构

  1. class Queue {
  2. constructor() {
  3. this.items = [];
  4. }
  5. enqueue(item) {
  6. this.items.push(item);
  7. }
  8. dequeue() {
  9. return this.items.shift();
  10. }
  11. front() {
  12. return this.items[0];
  13. }
  14. isEmpty() {
  15. return this.items.length > 0 ? false : true;
  16. }
  17. size() {
  18. return this.items.length;
  19. }
  20. toString() {
  21. let str = "";
  22. this.items.forEach(item => {
  23. str = str + item + " ";
  24. });
  25. return str;
  26. }
  27. }
  28. const queue = new Queue();

击鼓传花案例

  1. class Queue {
  2. constructor() {
  3. this.items = [];
  4. }
  5. enqueue(item) {
  6. this.items.push(item);
  7. }
  8. dequeue() {
  9. return this.items.shift();
  10. }
  11. front() {
  12. return this.items[0];
  13. }
  14. isEmpty() {
  15. return this.items.length > 0 ? false : true;
  16. }
  17. size() {
  18. return this.items.length;
  19. }
  20. toString() {
  21. let str = "";
  22. this.items.forEach(item => {
  23. str = str + item + " ";
  24. });
  25. return str;
  26. }
  27. }
  28. //封装函数
  29. function cuurent(playerList, number) {
  30. const queue = new Queue();
  31. playerList.forEach(item => {
  32. queue.enqueue(item);
  33. });
  34. while (!(queue.size() === 1)) {
  35. for (let i = 0; i < number - 1; i++) {
  36. queue.enqueue(queue.dequeue());
  37. }
  38. queue.dequeue();
  39. }
  40. return queue.front();
  41. }
  42. //定义需要传入的数组
  43. const playerList = [
  44. "amy",
  45. "doinb",
  46. "coderwei",
  47. "zys",
  48. "jacker",
  49. "join",
  50. "rokkie",
  51. "bin",
  52. "faker",
  53. "the shy",
  54. ];
  55. console.log(cuurent(playerList, 5)); //coderwei