-
Notifications
You must be signed in to change notification settings - Fork 143
/
Copy pathLinkedListDeQueue.php
76 lines (60 loc) · 1.63 KB
/
LinkedListDeQueue.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
namespace DataStructure\Queue;
class LinkedListDeQueue
{
private $limit = 0;
private $queue;
public function __construct(int $limit = 0)
{
$this->limit = $limit;
$this->queue = new \DataStructure\LinkedList\LinkedList();
}
public function dequeueFromFront(): string
{
if ($this->isEmpty()) {
throw new \UnderflowException('Queue is empty');
}
$item = $this->queue->getNthNode(0);
$this->queue->deleteFirst();
return $item->data;
}
public function dequeueFromBack(): string
{
if ($this->isEmpty()) {
throw new \UnderflowException('Queue is empty');
}
$item = $this->queue->getNthNode($this->queue->getSize() - 1);
$this->queue->deleteLast();
return $item->data;
}
public function isFull()
{
return $this->queue->getSize() >= $this->limit;
}
public function enqueueAtBack(string $data = null)
{
if ($this->isFull()) {
throw new \OverflowException('queue is full');
}
$this->queue->insert($data);
}
public function enqueueAtFront(string $data = null)
{
if ($this->isFull()) {
throw new \OverflowException('queue is full');
}
$this->queue->insertAtFirst($data);
}
public function isEmpty()
{
return $this->queue->getSize() === 0;
}
public function peekFront()
{
return $this->queue->getNthNode(0)->data;
}
public function peekBack()
{
return $this->queue->getNthNode($this->queue->getSize() - 1)->data;
}
}