当前位置:Gxlcms > PHP教程 > PHP双向队列,双端队列代码

PHP双向队列,双端队列代码

时间:2021-07-01 10:21:17 帮助过:15人阅读

  1. /**
  2. * User: jifei
  3. * Date: 2013-07-30
  4. * Time: 23:12
  5. */
  6. /**
  7. * PHP实现双向队列,双端队列
  8. * 双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的数据结构。
  9. * 双端队列中的元素可以从两端弹出,插入和删除操作限定在队列的两边进行。
  10. */
  11. class Deque
  12. {
  13. public $queue=array();
  14. /**
  15. * 构造函数初始化队列
  16. */
  17. public function __construct($queue=array())
  18. {
  19. if(is_array($queue))
  20. {
  21. $this->queue=$queue;
  22. }
  23. }
  24. /**
  25. * 获取第一个元素
  26. */
  27. public function front()
  28. {
  29. return reset($this->queue);
  30. }
  31. /**
  32. * 获取最后一个元素
  33. */
  34. public function back()
  35. {
  36. return end($this->queue);
  37. }
  38. /**
  39. * 判断是否为空
  40. */
  41. public function is_empty()
  42. {
  43. return empty($this->queue);
  44. }
  45. /**
  46. * 队列大小
  47. */
  48. public function size()
  49. {
  50. return count($this->queue);
  51. }
  52. /**
  53. * 插入到尾
  54. */
  55. public function push_back($val)
  56. {
  57. array_push($this->queue,$val);
  58. }
  59. /**
  60. * 插入到头
  61. */
  62. public function push_front($val)
  63. {
  64. array_unshift($this->queue,$val);
  65. }
  66. /**
  67. * 移除最后一个元素
  68. */
  69. public function pop_back()
  70. {
  71. return array_pop($this->queue);
  72. }
  73. /**
  74. * 移除第一个元素
  75. */
  76. public function pop_front()
  77. {
  78. return array_shift($this->queue);
  79. }
  80. /**
  81. * 清空队列
  82. */
  83. public function clear()
  84. {
  85. $this->queue=array();
  86. }
  87. }
  88. //初始化一个双向队列
  89. $deque=new Deque(array(1,2,3,4,5));
  90. echo $deque->size().PHP_EOL;
  91. echo $deque->is_empty().PHP_EOL;
  92. echo $deque->front().PHP_EOL;
  93. echo $deque->back().PHP_EOL;
  94. echo PHP_EOL;
  95. //弹出元素测试
  96. echo $deque->pop_back().PHP_EOL;
  97. echo $deque->pop_front().PHP_EOL;
  98. echo $deque->size().PHP_EOL;
  99. echo PHP_EOL;
  100. $deque->push_back('a').PHP_EOL;
  101. $deque->push_front(0).PHP_EOL;
  102. echo PHP_EOL;
  103. //插入测试
  104. echo $deque->front().PHP_EOL;
  105. echo $deque->back().PHP_EOL;
  106. echo $deque->size().PHP_EOL;
  107. echo PHP_EOL;
  108. //清空测试
  109. $deque->clear();
  110. echo $deque->is_empty();

PHP

人气教程排行