博客列表 >javascript实现双端队列

javascript实现双端队列

P粉676693833
P粉676693833原创
2022年04月07日 16:12:00559浏览

这篇文章主要为大家详细介绍了使用javascript实现双端队列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了javascript实现双端队列的具体代码,供大家参考,具体内容如下

1.双端队列
双端队列是一种允许我们同时从前端和后端添加和移除元素的特殊队列

2.双端队列的应用
一个刚买了票的入如果只是还需要再问一些简单的信息,就可以直接回到队伍头部,另外队伍末尾的人如果赶时间也可以直接离开队伍

3.双端队列的方法
addFront(element):该方法在双端队列前端添加新的元素
addBack(element):该方法在双端队列后端添加新的元素(实现方法和 Queue 类中的enqueue 方法相同)。
removeFront():该方法会从双端队列前端移除第一个元素
removeBack():该方法会从双端队列的后端移除第一个元素
peekFront():该方法返回双端队列的第一个元素。
peekBack()):该方法返回双端队列后端的第一个元素。

4.实现

  1. class Deque{
  2. constructor(){
  3. this.items = {};
  4. this.count = 0;
  5. this.lowestCount = 0;
  6. }
  7. // 在双端队列前端添加新元素
  8. addFront(element){
  9. if(this.isEmpty()){
  10. this.addBack(element);
  11. }
  12. else if(this.lowestCount > 0){
  13. this.lowestCount -- ;
  14. this.items[this.lowestCount] = element;
  15. }
  16. else{
  17. for(let i=this.count;i>0;i--){
  18. this.items[i] = this.items[i-1];
  19. }
  20. this.lowestCount = 0;
  21. this.items[this.lowestCount] = element;
  22. this.count++;
  23. }
  24. };
  25. addBack(element){
  26. this.count++;
  27. this.items[this.count-1] = element;
  28. };
  29. removeFront(){
  30. if(this.isEmpty()){
  31. return undefined;
  32. }
  33. const result = this.items[this.lowestCount];
  34. delete this.items[this.lowestCount];
  35. this.lowestCount++;
  36. return result;
  37. };
  38. removeBack(){
  39. if(this.isEmpty()){
  40. return undefined;
  41. }
  42. const result = this.items[this.count-1];
  43. delete this.items[this.count-1];
  44. this.count--;
  45. return result;
  46. };
  47. peekFront(){
  48. if(this.isEmpty()){
  49. return null;
  50. }
  51. return this.items[this.lowestCount];
  52. };
  53. peekBack(){
  54. if(this.isEmpty()){
  55. return null;
  56. }
  57. return this.items[this.count-1];
  58. };
  59. isEmpty(){
  60. return this.count - this.lowestCount == 0;
  61. }
  62. size(){
  63. return this.count - this.lowestCount;
  64. }
  65. toString(){
  66. if(this.isEmpty()){
  67. return '';
  68. }
  69. let objString = `${this.items[this.lowestCount]}`;
  70. for(var i=this.lowestCount+1;i<this.count;i++){
  71. objString = `${objString},${this.items[i]}`;
  72. }
  73. return objString;
  74. }
  75. clear(){
  76. this.items={};
  77. this.count = 0;
  78. this.lowestCount = 0;
  79. }
  80. }
  81. const deque = new Deque();
  82. deque.addFront('John');
  83. deque.addFront('Jack');
  84. deque.addFront('Amy');
  85. deque.addBack('Lisa');
  86. // deque.removeFront();
  87. // deque.removeBack();
  88. console.log(deque.size());
  89. console.log(deque.toString());
  90. console.log(deque);
  91. console.log(deque.isEmpty());
  92. console.log(deque.clear());
  93. console.log(deque);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议