SlideShare a Scribd company logo
Queue data structure
Roman R
# todo
- php impl of Queue as Linked List
- persistent queue (using 5 stacks)
- persistent queue (using 6 stacks)
- deque impl (double-end queue)
- change rair => tail, start => head, etc
- add gif-animation for algo
2
Queue: definition
data structure
set of items
earliest added item may be accessed (FIFO)
has two ends (head and rair/tail)
push (into tail) and pop (from head)
3
Queue: examples IRL
- lines of people (line in a grocery store, buy a movie ticket)
- conveyor belt
- waiting lists
- access to shared resources (e.g. printer jobs)
- things that are in "time order"
- events in Windows
- keyboard strokes
- video frames
4
Queue: types
- queue as array
- circular queue
- priority queue
- deque
- input restricted
- output restricted
- persistent queue
5
Queue: interface
enqueue (put) - add to the tail
dequeue (get + delete) - get from the head
empty(Q):bool
count(Q):int
front(Q):item - peek (just get)
6
Queue: axioms
new() returns a queue
add(v, new()).isEmpty() = false
front(add(v, new())) = v
remove(add(v, new())) = new()
front(add(v, add(w, Q))) = front(add(w, Q))
remove(add(v, add(w, Q))) = add(v, remove(add(w, Q)))
Q - queue; v and w - values;
7
Queue: basic example
initial -> | | | | (assume 3 element capacity)
enqueue(a) -> |a| | |
enqueue(b) -> |a|b| |
enqueue(c) -> |a|b|c|
dequeue() -> | |b|c| (returns a)
dequeue() -> | | |c| (returns b)
dequeue() -> | | | | (returns c) (all gone!)
head |a|b|c| tail
8
Queue: implementation
- as Array
- Cyclic Array
- as Linked List (doubly)
- as Stack (2 or 6)
9
as array and two integer variables start and end
start = head of queue
end = element that will be filled when new el will come
@todo on images replace front->start, back->end
Queue: implementation using Array
10
Queue: implementation using Array
enqueue(item): item => q[end], end++
dequeue(): item <= q[start], start++
if Queue not full
- put element at end Q[tail] <- elem
- increment tail tail <- tail + 1
11
int A[10]
front = -1
tail = -1
function isEmpty() { front == -1 && tail == -1 }
function isFull() { tail == size(A)-1 }
function enqueue(v) {
if isFull() -> error Queue is full
if isEmpty() front <- tail <- 0 else tail+=1
A[tail] = v
}
Queue: implementation using Array
12
Queue: implementation using Array
13
Queue: implementation using Array
14
Queue: implementation using Array
15
Queue: implementation using Array
function dequeue() {
if isEmpty() -> error Queue is empty
elseif front == tail
front <- rear <- -1
else
front += 1
}
16
Queue: implementation using Array
17
Queue: implementation using Array
18
no end on array
wrapping around
ring buffer / circular buffer
push/pop - O(1)
when item inserted to rair, tails’s pointer moves upwards
when item deleted, head’s pointer moves downwards
current_position = i
next_position = (i + 1) % N
prev_position = (N + i - 1) % N
Queue: implementation Cyclic Array
19
function isFull() {
(tail + 1 ) % N == head
}
function enqueue(v) {
if isFull() -> error Queue is full
if isEmpty() front <- tail <- 0
else tail = (tail + 1) % N
A[tail] = v
}
function dequeue() {
if isEmpty() -> error Queue is empty
elseif front == tail front <- rear <- -1
else front = (front + 1) % N
}
Queue: implementation Cyclic Array
20
Queue: implementation using Array: pros & cons
pros
- minor memory savings (compared with LinkedList impl)
- easier to develop
cons
- fixed size
- when is full, need create new arary, with reallocation
of memory and copy all els to the new array (costly
process, O(n))
21
Queue: implementation using Linked List
one way Linked List (based on the work with dynamic memory)
insertion/removal: at head O(1), at tail O(n)
http://www.cosc.canterbury.ac.nz/mukundan/dsal/LinkQueueAppl.html
22
Queue: implementation using Linked List
insert: create a node, update tail pointer
traversal is complex, O(n)
23
Queue: implementation using Linked List
O(1)
24
class Node {
Object data
Node next
}
class Queue {
Node front
Node rear
}
isEmpty() {
return rear == null
}
Queue: implementation using Linked List
25
function enqueue(x) {
newNode = new Node
newNode->data = x
if isEmpty()
front = newNode
else
rear->next = newNode
rear = newNode
}
function dequeue(d) {
temp = front
if front = null { return }
if front == rear {
front = rear = null
}
else {
front = front->next
}
free(temp)
}
<?php
@todo
Queue: php implementation using Linked List
26
Queue: implementation using Linked List: pros & cons
pros
- size is limited by memory capacity
cons
- requires more memory
- more memory is fragmented
27
Queue: implementation using 2 Stacks
- leftStack for push
- rightStack for pop
- push-/pop- -Left/-Right
28
Queue: implementation using 2 Stacks: example
procedure enqueue(x):
S1.push(x)
function dequeue():
if S1 is empty and S2 is empty:
error: stack is empty
while S1 isn’t empty:
S2.push(S1.pop())
return S2.pop()
29
Queue: implementation using 2 Stacks: pros & cons
Эту реализацию несложно модифицировать для получения минимума в
текущей очереди за O(1).
Если leftStack не пуст, то операция pop может выполняться O(n) времени,
в отличии от других реализаций, где pop всегда выполняется за O(1).
30
Queue: implementation using 6 Stacks
- on 2 stack - worst case O(n) for operation
- persistent queue
31
Queue: implementation using 6 Stacks: example
@ todo
32
pros
- ??? O(1)
- can be improved to persistent queue, if use persistent stack
cons
- longer than the average operation is performed
- more memory consumption
- the greater complexity of implementation
Queue: implementation using 6 Stacks: pros & cons
33
Queue: php (SPL)
SplQueue
34
class SplQueue
extends SplDoublyLinkedList
implements Iterator, ArrayAccess, Countable {
mixed dequeue ()
void enqueue ($value)
void setIteratorMode ($mode) // IT_MODE_DELETE, IT_MODE_KEEP,
SplDoublyLinkedList::IT_MODE_FIFO,
+ inherited methods from SplDoublyLinkedList
}
Queue: php (SPL) IRL
@todo
35
Queue: php (SPL)
$queue = new SplQueue();
$queue->setIteratorMode(SplDoublyLinkedList::IT_MODE_DELETE);
$queue->enqueue(1);
$queue->enqueue(2);
$queue->enqueue(3);
print_r($queue->dequeue());
print_r($queue->dequeue());
print_r($queue);
36
Output:
1
2
SplQueue Object (
[flags:SplDoublyLinkedList:private] => 1
[dllist:SplDoublyLinkedList:private] => Array
(
[0] => 3
)
)
class Queue {
public function enqueue($item) { }
public function dequeue() { }
public function count() { }
}
Queue: implementation in php
37
class Queue {
private $_queue = array();
public function enqueue($item) {
$this->_queue[] = $item;
}
public function dequeue() {
return array_shift($this->_queue);
}
public function count() {
return count($this->_queue);
}
}
Queue: implementation in php (using Array)
38
class Queue {
private $_queue = array();
private $_headPosition = null,
$_tailPosition = null;
public function enqueue($item) {
$this->_queue[] = $item;
if ($this->count() == 1) {
$this->_headPosition
= 0;
$this->_tailPosition
= 0;
}
$this->rewind();
}
public function count() {
return count($this->_queue);
}
Queue: implementation in php (using Array)
39
public function dequeue() {
$item = $this->_queue[$this->_headPositio
$this->_headPosition++;
return $item;
}
public function hasNext() {
return isset($this->_queue[$this->_headPo
}
public function rewind() {
$this->_tailPosition = $this->_headPositi
}
}
Priority Queue: definition
abstract data type
each element has a "priority" attr
pop will find element with highest priority
40
- bandwidth management
- discrete event simulation
- job scheduling
- Dijkstra's algorithm
- Huffman coding
- Best-first search algorithms
- ROAM triangulation algorithm
- Prim's algorithm for minimum spanning tree
Priority Queue: examples IRL
41
Priority Queue: types
ascending (min) priority queue
descending (max) priority queue
42
Priority Queue: interface
insert - insert with priority
find-minimum (or maximum)
delete-minimum (or maximum)
compare
meld - join two priority queues
delete an arbitrary item
decrease-key (increase) the priority of a item
43
Priority Queue: basic example
44
Priority Queue: implementation
array (unordered, ordered)
linked-list (unordered and reverse-ordered)
binary heap
45
Priority Queue: implementation as Unordered Array
class QueueAsUnorderedArray {
...foreach..
}
http://algs4.cs.princeton.edu/24pq/UnorderedArrayMaxPQ.jav
a.html
46
Priority Queue: implementation as Ordered Array
class QueueAsOrderedArray {
...foreach..
}
http://algs4.cs.princeton.edu/24pq/OrderedArrayMaxPQ.java.
html
47
Priority Queue: implementation as Linked List
48
Priority Queue: implementation as Heap
Heap-based priority queue
insert/deleteMin = O(log n)
49
SplPriorityQueue impl using max-heap
Priority Queue: php (SPL)
50
public bool isEmpty ()
public mixed key ()
public void next ()
public void recoverFromCorruption ()
public void rewind ()
public void setExtractFlags ($flags)
public mixed top ()
public bool valid ()
}
class SplPriorityQueue implements Iterator, Countable {
public __construct ()
public int compare ($priority1, $priority2)
public int count ()
public mixed current ()
public mixed extract ()
public void insert ($value, $priority)
count: 4
array { "data" => "D", "priority" => 9 }
array { "data" => "B", "priority" => 6 }
array { "data" => "A", "priority" => 3 }
array { "data" => "C", "priority" => 1 }
$queue = new SplPriorityQueue;
$queue->insert('A', 3); // A3
$queue->insert('B', 6); // B6, A3
$queue->insert('C', 1); // B6, A3, C1
$queue->insert('D', 9); // D9, B6, A3, C1
echo 'count: ' . $queue->count();
$queue->setExtractFlags(SplPriorityQueue::EXTR_BOTH);
while($queue->valid()){
var_dump($queue->current());
$queue->next();
}
Priority Queue: php (SPL)
51
Priority Queue: php (SplMinHeap SPL)
52
class SplMinHeap
extends SplHeap implements Iterator , Countable {
protected int compare ($value1, $value2)
+ inherited methods from SplHeap
}
SplMinHeap stores minimal el on head
Priority Queue: php (SplMinHeap SPL)
$pq = new SplMinHeap;
$pq->insert(array(3, 'Clear drains'));
$pq->insert(array(4, 'Feed cat'));
$pq->insert(array(5, 'Make tea'));
$pq->insert(array(1, 'Solve RC tasks'));
$pq->insert(array(2, 'Tax return'));
while (!$pq->isEmpty()) {
print_r($pq->extract());
}
53
Priority Queue: php (unordered array)
54
double-ended queue
els can be added to head or tail
is generalization of both stack and queue
DEQueue: definition
55
input restricted deque
- restricts insertion of els at one end only
- allow deletion of both ends
output restricted deque
- restricts deletion of els at one end only
- allows insertion to both ends
Deque: types
56
double linked-list (with two additional reference
variables to refer the first and last items)
Deque: implementation
57
addLeft(item)
addRight(item)
isEmpty()
front()
back()
dequeueLeft()
dequeueRight()
Deque: interface
58
# resources
- http://xlinux.nist.gov/dads//HTML/queue.html
- http://algs4.cs.princeton.edu/24pq/
- https://www.doc.ic.ac.uk/~ar3/lectures/ProgrammingII/LargePrintOut/Lecture5PrintOut.pdf
- http://neerc.ifmo.ru/wiki/index.php?title=Очередь
- http://neerc.ifmo.ru/wiki/index.php?title=Персистентная_очередь
- http://habrahabr.ru/post/241231/
- @ http://habrahabr.ru/post/240519/
- https://www.youtube.com/watch?v=okr-XE8yTO8 implementation Queue as Array
- https://www.youtube.com/watch?v=A5_XdiK4J8A implementation Queue as Linked `List
- https://www.cs.usfca.edu/~galles/visualization/QueueArray.html
- https://www.cs.usfca.edu/~galles/visualization/QueueLL.html
59

More Related Content

PPT
Queue data structure
PPTX
My lectures circular queue
PPTX
Unit 4 queue
PPT
Notes DATA STRUCTURE - queue
PPT
Queue Data Structure
PPTX
queue & its applications
PDF
Queue as data_structure
PPT
QUEUE IN DATA STRUCTURE USING C
Queue data structure
My lectures circular queue
Unit 4 queue
Notes DATA STRUCTURE - queue
Queue Data Structure
queue & its applications
Queue as data_structure
QUEUE IN DATA STRUCTURE USING C

What's hot (20)

PPSX
Data Structure (Queue)
PPTX
Queues in C++
PPT
Stacks, Queues, Deques
PPSX
Queue by rajanikanth
PDF
Queues
PPT
PPT
Queue in Data Structure
PPTX
PPTX
Stack and its operations
PPTX
Deque and its applications
PPTX
PDF
PDF
stacks and queues
PPT
Algorithm: priority queue
PPTX
Detalied information of queue
PPT
Stacks and queues
PPTX
Stack and Queue
PPT
Stack and queue
Data Structure (Queue)
Queues in C++
Stacks, Queues, Deques
Queue by rajanikanth
Queues
Queue in Data Structure
Stack and its operations
Deque and its applications
stacks and queues
Algorithm: priority queue
Detalied information of queue
Stacks and queues
Stack and Queue
Stack and queue
Ad

Viewers also liked (17)

PPT
Queue Data Structure
PPT
Queue data structure
PPTX
Ppt presentation of queues
PPTX
STACKS IN DATASTRUCTURE
PPSX
PPTX
Presentation on queue
PPTX
Queue
PPT
Priority queues
PPT
Stack Data Structure & It's Application
PPTX
Stack data structure
PPT
DATA STRUCTURES
PDF
Queues
PPTX
stack
PPT
Stack & queue
PPTX
المحاضرة الثامنة: تراكيب البيانات الطابور
Queue Data Structure
Queue data structure
Ppt presentation of queues
STACKS IN DATASTRUCTURE
Presentation on queue
Queue
Priority queues
Stack Data Structure & It's Application
Stack data structure
DATA STRUCTURES
Queues
stack
Stack & queue
المحاضرة الثامنة: تراكيب البيانات الطابور
Ad

Similar to Queue Data Structure (w/ php egs) (20)

PPTX
The presention is about the queue data structure
PPT
05-stack_queue.ppt
PPTX
DSA_Ques ewoifhjerofhefhehfreofheek.pptx
PPT
queuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbb
PPT
Queues in C++ detailed explanation and examples .ppt
PPT
2 b queues
PPT
10 -queues using array_07485555555510.ppt
PPT
Lec-07 Queues.ppt queues introduction to queue
PPTX
Data Structures and Agorithm: DS 06 Stack.pptx
PDF
In java , I want you to implement a Data Structure known as a Doubly.pdf
PPTX
Data Structures and Agorithm: DS 09 Queue.pptx
PPTX
PPTX
PPTX
UNIT II LINEAR DATA STRUCTURES – STACKS.pptx
PPT
stack.ppt
PPTX
Data structure , stack , queue
PDF
What is Stack, Its Operations, Queue, Circular Queue, Priority Queue
PPTX
UNIT II LINEAR DATA STRUCTURES – STACKS.pptx
PPT
Stack linked list
The presention is about the queue data structure
05-stack_queue.ppt
DSA_Ques ewoifhjerofhefhehfreofheek.pptx
queuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbb
Queues in C++ detailed explanation and examples .ppt
2 b queues
10 -queues using array_07485555555510.ppt
Lec-07 Queues.ppt queues introduction to queue
Data Structures and Agorithm: DS 06 Stack.pptx
In java , I want you to implement a Data Structure known as a Doubly.pdf
Data Structures and Agorithm: DS 09 Queue.pptx
UNIT II LINEAR DATA STRUCTURES – STACKS.pptx
stack.ppt
Data structure , stack , queue
What is Stack, Its Operations, Queue, Circular Queue, Priority Queue
UNIT II LINEAR DATA STRUCTURES – STACKS.pptx
Stack linked list

Recently uploaded (20)

PDF
The CXO Playbook 2025 – Future-Ready Strategies for C-Suite Leaders Cerebrai...
PDF
composite construction of structures.pdf
PPTX
Lesson 3_Tessellation.pptx finite Mathematics
PPTX
OOP with Java - Java Introduction (Basics)
PPTX
Construction Project Organization Group 2.pptx
PPTX
Internet of Things (IOT) - A guide to understanding
PPTX
CARTOGRAPHY AND GEOINFORMATION VISUALIZATION chapter1 NPTE (2).pptx
PDF
Well-logging-methods_new................
PPTX
Welding lecture in detail for understanding
PDF
PRIZ Academy - 9 Windows Thinking Where to Invest Today to Win Tomorrow.pdf
PPTX
UNIT 4 Total Quality Management .pptx
PDF
Model Code of Practice - Construction Work - 21102022 .pdf
PDF
Digital Logic Computer Design lecture notes
PPTX
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
PDF
Structs to JSON How Go Powers REST APIs.pdf
PPTX
Lecture Notes Electrical Wiring System Components
PPTX
web development for engineering and engineering
PDF
Mohammad Mahdi Farshadian CV - Prospective PhD Student 2026
PPTX
bas. eng. economics group 4 presentation 1.pptx
PPTX
Strings in CPP - Strings in C++ are sequences of characters used to store and...
The CXO Playbook 2025 – Future-Ready Strategies for C-Suite Leaders Cerebrai...
composite construction of structures.pdf
Lesson 3_Tessellation.pptx finite Mathematics
OOP with Java - Java Introduction (Basics)
Construction Project Organization Group 2.pptx
Internet of Things (IOT) - A guide to understanding
CARTOGRAPHY AND GEOINFORMATION VISUALIZATION chapter1 NPTE (2).pptx
Well-logging-methods_new................
Welding lecture in detail for understanding
PRIZ Academy - 9 Windows Thinking Where to Invest Today to Win Tomorrow.pdf
UNIT 4 Total Quality Management .pptx
Model Code of Practice - Construction Work - 21102022 .pdf
Digital Logic Computer Design lecture notes
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
Structs to JSON How Go Powers REST APIs.pdf
Lecture Notes Electrical Wiring System Components
web development for engineering and engineering
Mohammad Mahdi Farshadian CV - Prospective PhD Student 2026
bas. eng. economics group 4 presentation 1.pptx
Strings in CPP - Strings in C++ are sequences of characters used to store and...

Queue Data Structure (w/ php egs)

  • 2. # todo - php impl of Queue as Linked List - persistent queue (using 5 stacks) - persistent queue (using 6 stacks) - deque impl (double-end queue) - change rair => tail, start => head, etc - add gif-animation for algo 2
  • 3. Queue: definition data structure set of items earliest added item may be accessed (FIFO) has two ends (head and rair/tail) push (into tail) and pop (from head) 3
  • 4. Queue: examples IRL - lines of people (line in a grocery store, buy a movie ticket) - conveyor belt - waiting lists - access to shared resources (e.g. printer jobs) - things that are in "time order" - events in Windows - keyboard strokes - video frames 4
  • 5. Queue: types - queue as array - circular queue - priority queue - deque - input restricted - output restricted - persistent queue 5
  • 6. Queue: interface enqueue (put) - add to the tail dequeue (get + delete) - get from the head empty(Q):bool count(Q):int front(Q):item - peek (just get) 6
  • 7. Queue: axioms new() returns a queue add(v, new()).isEmpty() = false front(add(v, new())) = v remove(add(v, new())) = new() front(add(v, add(w, Q))) = front(add(w, Q)) remove(add(v, add(w, Q))) = add(v, remove(add(w, Q))) Q - queue; v and w - values; 7
  • 8. Queue: basic example initial -> | | | | (assume 3 element capacity) enqueue(a) -> |a| | | enqueue(b) -> |a|b| | enqueue(c) -> |a|b|c| dequeue() -> | |b|c| (returns a) dequeue() -> | | |c| (returns b) dequeue() -> | | | | (returns c) (all gone!) head |a|b|c| tail 8
  • 9. Queue: implementation - as Array - Cyclic Array - as Linked List (doubly) - as Stack (2 or 6) 9
  • 10. as array and two integer variables start and end start = head of queue end = element that will be filled when new el will come @todo on images replace front->start, back->end Queue: implementation using Array 10
  • 11. Queue: implementation using Array enqueue(item): item => q[end], end++ dequeue(): item <= q[start], start++ if Queue not full - put element at end Q[tail] <- elem - increment tail tail <- tail + 1 11
  • 12. int A[10] front = -1 tail = -1 function isEmpty() { front == -1 && tail == -1 } function isFull() { tail == size(A)-1 } function enqueue(v) { if isFull() -> error Queue is full if isEmpty() front <- tail <- 0 else tail+=1 A[tail] = v } Queue: implementation using Array 12
  • 16. Queue: implementation using Array function dequeue() { if isEmpty() -> error Queue is empty elseif front == tail front <- rear <- -1 else front += 1 } 16
  • 19. no end on array wrapping around ring buffer / circular buffer push/pop - O(1) when item inserted to rair, tails’s pointer moves upwards when item deleted, head’s pointer moves downwards current_position = i next_position = (i + 1) % N prev_position = (N + i - 1) % N Queue: implementation Cyclic Array 19
  • 20. function isFull() { (tail + 1 ) % N == head } function enqueue(v) { if isFull() -> error Queue is full if isEmpty() front <- tail <- 0 else tail = (tail + 1) % N A[tail] = v } function dequeue() { if isEmpty() -> error Queue is empty elseif front == tail front <- rear <- -1 else front = (front + 1) % N } Queue: implementation Cyclic Array 20
  • 21. Queue: implementation using Array: pros & cons pros - minor memory savings (compared with LinkedList impl) - easier to develop cons - fixed size - when is full, need create new arary, with reallocation of memory and copy all els to the new array (costly process, O(n)) 21
  • 22. Queue: implementation using Linked List one way Linked List (based on the work with dynamic memory) insertion/removal: at head O(1), at tail O(n) http://www.cosc.canterbury.ac.nz/mukundan/dsal/LinkQueueAppl.html 22
  • 23. Queue: implementation using Linked List insert: create a node, update tail pointer traversal is complex, O(n) 23
  • 24. Queue: implementation using Linked List O(1) 24
  • 25. class Node { Object data Node next } class Queue { Node front Node rear } isEmpty() { return rear == null } Queue: implementation using Linked List 25 function enqueue(x) { newNode = new Node newNode->data = x if isEmpty() front = newNode else rear->next = newNode rear = newNode } function dequeue(d) { temp = front if front = null { return } if front == rear { front = rear = null } else { front = front->next } free(temp) }
  • 27. Queue: implementation using Linked List: pros & cons pros - size is limited by memory capacity cons - requires more memory - more memory is fragmented 27
  • 28. Queue: implementation using 2 Stacks - leftStack for push - rightStack for pop - push-/pop- -Left/-Right 28
  • 29. Queue: implementation using 2 Stacks: example procedure enqueue(x): S1.push(x) function dequeue(): if S1 is empty and S2 is empty: error: stack is empty while S1 isn’t empty: S2.push(S1.pop()) return S2.pop() 29
  • 30. Queue: implementation using 2 Stacks: pros & cons Эту реализацию несложно модифицировать для получения минимума в текущей очереди за O(1). Если leftStack не пуст, то операция pop может выполняться O(n) времени, в отличии от других реализаций, где pop всегда выполняется за O(1). 30
  • 31. Queue: implementation using 6 Stacks - on 2 stack - worst case O(n) for operation - persistent queue 31
  • 32. Queue: implementation using 6 Stacks: example @ todo 32
  • 33. pros - ??? O(1) - can be improved to persistent queue, if use persistent stack cons - longer than the average operation is performed - more memory consumption - the greater complexity of implementation Queue: implementation using 6 Stacks: pros & cons 33
  • 34. Queue: php (SPL) SplQueue 34 class SplQueue extends SplDoublyLinkedList implements Iterator, ArrayAccess, Countable { mixed dequeue () void enqueue ($value) void setIteratorMode ($mode) // IT_MODE_DELETE, IT_MODE_KEEP, SplDoublyLinkedList::IT_MODE_FIFO, + inherited methods from SplDoublyLinkedList }
  • 35. Queue: php (SPL) IRL @todo 35
  • 36. Queue: php (SPL) $queue = new SplQueue(); $queue->setIteratorMode(SplDoublyLinkedList::IT_MODE_DELETE); $queue->enqueue(1); $queue->enqueue(2); $queue->enqueue(3); print_r($queue->dequeue()); print_r($queue->dequeue()); print_r($queue); 36 Output: 1 2 SplQueue Object ( [flags:SplDoublyLinkedList:private] => 1 [dllist:SplDoublyLinkedList:private] => Array ( [0] => 3 ) )
  • 37. class Queue { public function enqueue($item) { } public function dequeue() { } public function count() { } } Queue: implementation in php 37
  • 38. class Queue { private $_queue = array(); public function enqueue($item) { $this->_queue[] = $item; } public function dequeue() { return array_shift($this->_queue); } public function count() { return count($this->_queue); } } Queue: implementation in php (using Array) 38
  • 39. class Queue { private $_queue = array(); private $_headPosition = null, $_tailPosition = null; public function enqueue($item) { $this->_queue[] = $item; if ($this->count() == 1) { $this->_headPosition = 0; $this->_tailPosition = 0; } $this->rewind(); } public function count() { return count($this->_queue); } Queue: implementation in php (using Array) 39 public function dequeue() { $item = $this->_queue[$this->_headPositio $this->_headPosition++; return $item; } public function hasNext() { return isset($this->_queue[$this->_headPo } public function rewind() { $this->_tailPosition = $this->_headPositi } }
  • 40. Priority Queue: definition abstract data type each element has a "priority" attr pop will find element with highest priority 40
  • 41. - bandwidth management - discrete event simulation - job scheduling - Dijkstra's algorithm - Huffman coding - Best-first search algorithms - ROAM triangulation algorithm - Prim's algorithm for minimum spanning tree Priority Queue: examples IRL 41
  • 42. Priority Queue: types ascending (min) priority queue descending (max) priority queue 42
  • 43. Priority Queue: interface insert - insert with priority find-minimum (or maximum) delete-minimum (or maximum) compare meld - join two priority queues delete an arbitrary item decrease-key (increase) the priority of a item 43
  • 44. Priority Queue: basic example 44
  • 45. Priority Queue: implementation array (unordered, ordered) linked-list (unordered and reverse-ordered) binary heap 45
  • 46. Priority Queue: implementation as Unordered Array class QueueAsUnorderedArray { ...foreach.. } http://algs4.cs.princeton.edu/24pq/UnorderedArrayMaxPQ.jav a.html 46
  • 47. Priority Queue: implementation as Ordered Array class QueueAsOrderedArray { ...foreach.. } http://algs4.cs.princeton.edu/24pq/OrderedArrayMaxPQ.java. html 47
  • 48. Priority Queue: implementation as Linked List 48
  • 49. Priority Queue: implementation as Heap Heap-based priority queue insert/deleteMin = O(log n) 49
  • 50. SplPriorityQueue impl using max-heap Priority Queue: php (SPL) 50 public bool isEmpty () public mixed key () public void next () public void recoverFromCorruption () public void rewind () public void setExtractFlags ($flags) public mixed top () public bool valid () } class SplPriorityQueue implements Iterator, Countable { public __construct () public int compare ($priority1, $priority2) public int count () public mixed current () public mixed extract () public void insert ($value, $priority)
  • 51. count: 4 array { "data" => "D", "priority" => 9 } array { "data" => "B", "priority" => 6 } array { "data" => "A", "priority" => 3 } array { "data" => "C", "priority" => 1 } $queue = new SplPriorityQueue; $queue->insert('A', 3); // A3 $queue->insert('B', 6); // B6, A3 $queue->insert('C', 1); // B6, A3, C1 $queue->insert('D', 9); // D9, B6, A3, C1 echo 'count: ' . $queue->count(); $queue->setExtractFlags(SplPriorityQueue::EXTR_BOTH); while($queue->valid()){ var_dump($queue->current()); $queue->next(); } Priority Queue: php (SPL) 51
  • 52. Priority Queue: php (SplMinHeap SPL) 52 class SplMinHeap extends SplHeap implements Iterator , Countable { protected int compare ($value1, $value2) + inherited methods from SplHeap } SplMinHeap stores minimal el on head
  • 53. Priority Queue: php (SplMinHeap SPL) $pq = new SplMinHeap; $pq->insert(array(3, 'Clear drains')); $pq->insert(array(4, 'Feed cat')); $pq->insert(array(5, 'Make tea')); $pq->insert(array(1, 'Solve RC tasks')); $pq->insert(array(2, 'Tax return')); while (!$pq->isEmpty()) { print_r($pq->extract()); } 53
  • 54. Priority Queue: php (unordered array) 54
  • 55. double-ended queue els can be added to head or tail is generalization of both stack and queue DEQueue: definition 55
  • 56. input restricted deque - restricts insertion of els at one end only - allow deletion of both ends output restricted deque - restricts deletion of els at one end only - allows insertion to both ends Deque: types 56
  • 57. double linked-list (with two additional reference variables to refer the first and last items) Deque: implementation 57
  • 59. # resources - http://xlinux.nist.gov/dads//HTML/queue.html - http://algs4.cs.princeton.edu/24pq/ - https://www.doc.ic.ac.uk/~ar3/lectures/ProgrammingII/LargePrintOut/Lecture5PrintOut.pdf - http://neerc.ifmo.ru/wiki/index.php?title=Очередь - http://neerc.ifmo.ru/wiki/index.php?title=Персистентная_очередь - http://habrahabr.ru/post/241231/ - @ http://habrahabr.ru/post/240519/ - https://www.youtube.com/watch?v=okr-XE8yTO8 implementation Queue as Array - https://www.youtube.com/watch?v=A5_XdiK4J8A implementation Queue as Linked `List - https://www.cs.usfca.edu/~galles/visualization/QueueArray.html - https://www.cs.usfca.edu/~galles/visualization/QueueLL.html 59

Editor's Notes

  • #4: first will be removed element that was added firstly дисциплиной доступа
  • #5: когда нужно совершить какие-то действия в порядке их поступления, выполнив их последовательно
  • #7: basic operations enqueue — поставить в очередь
  • #8: аксіоматична семантика семантика = значення слів і їх складових частин аксіома = твердження, яке сприймається як істинне визначається поведінка АДТ через аксіомі
  • #10: Способы реализации array-based / reference-based linear time for both operations
  • #20: деление по модулю один из самых простых и эффективных способов организовать FIFO, без использования динамической памяти.
  • #22: the maximum number of els limited by array size
  • #23: collection of nodes memory is an important resource; we should avoid blocking memory unnecessary добавление/удаление элементов идет строго с соответствующих его концов
  • #24: to find any - need to start at head
  • #32: Персистентная очередь
  • #34: Персистентная очередь
  • #35: LIFO/FIFO is frozen SplStack/SplQueue
  • #36: LIFO/FIFO is frozen SplStack/SplQueue
  • #41: stack: each inserted element is monotonically increasing queue: the priority of each inserted element is monotonically decreasing
  • #43: ordered array = the largest item is on tail
  • #45: ordered array = the largest item is on tail
  • #46: ordered array = the largest item is on tail
  • #47: to insert => insert it at the rear end of the queue to delete => find the position of min el, and mark as deleted (lazy deletion) shift all els past the deleted el by one position and decrement rear