队列是一种 先进先出(FIFO,First In First Out)的数据结构。

基于数组创建队列

  1. /**
  2. * enqueue 尾部入队
  3. * dequeue 头部出队.返回出队的元素
  4. * peek 返回队列中第一个元素,不改变队列
  5. * size 队列中元素的个数
  6. * isEmpty 是否为空
  7. */
  8. class Queue {
  9. constructor() {
  10. this.items = [];
  11. }
  12. enqueue(element) {
  13. this.items.push(element);
  14. }
  15. dequeue() {
  16. return this.items.shift();
  17. }
  18. peek() {
  19. return this.items[0];
  20. }
  21. size(){
  22. return this.items.length;
  23. }
  24. isEmpty(){
  25. return this.items.length === 0;
  26. }
  27. }

双端队列

双端队列(deque,double-ended queue)是一种允许同时在前端和后端添加和删除元素的特殊队列。

双端队列在现实生活中的例子有电影院、餐厅中排队的队伍等。举个例子,一个刚买了票的人如果只是还需要再问一些简单的信息,就可以直接回到队伍的头部。另外,在队伍末尾的人如果赶时间,他可以直接离开队伍。

  1. /**
  2. * addFront 头部入队
  3. * removeFront 头部出队,返回出队的元素
  4. * addBack 尾部入队
  5. * removeBack 尾部出队,返回出队的元素
  6. * front 返回头部元素,不改变队列
  7. * back 返回尾部元素,不改变队列
  8. * size 返回队列元素的个数
  9. * isEmpty 判断队列是否为空
  10. */
  11. class Queue {
  12. constructor() {
  13. this.items = [];
  14. }
  15. addFront(element) {
  16. this.items.unshift(element);
  17. }
  18. removeFront() {
  19. return this.items.shift();
  20. }
  21. addBack(element) {
  22. this.items.push(element);
  23. }
  24. removeBack() {
  25. return this.items.pop();
  26. }
  27. front() {
  28. return this.items[0];
  29. }
  30. back() {
  31. return this.items[this.items.length - 1];
  32. }
  33. size(){
  34. return this.items.length;
  35. }
  36. isEmpty(){
  37. return this.items.length === 0;
  38. }
  39. }