SlideShare una empresa de Scribd logo
1 de 59
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

Más contenido relacionado

La actualidad más candente (20)

Data Structure (Queue)
Data Structure (Queue)Data Structure (Queue)
Data Structure (Queue)
 
Queues in C++
Queues in C++Queues in C++
Queues in C++
 
Queue
QueueQueue
Queue
 
Stacks, Queues, Deques
Stacks, Queues, DequesStacks, Queues, Deques
Stacks, Queues, Deques
 
Queue by rajanikanth
Queue by rajanikanthQueue by rajanikanth
Queue by rajanikanth
 
Queues
QueuesQueues
Queues
 
Queue
QueueQueue
Queue
 
Queue in Data Structure
Queue in Data StructureQueue in Data Structure
Queue in Data Structure
 
Circular queue
Circular queueCircular queue
Circular queue
 
Stack and its operations
Stack and its operationsStack and its operations
Stack and its operations
 
Team 6
Team 6Team 6
Team 6
 
Deque and its applications
Deque and its applicationsDeque and its applications
Deque and its applications
 
Queues
QueuesQueues
Queues
 
Queue
QueueQueue
Queue
 
stacks and queues
stacks and queuesstacks and queues
stacks and queues
 
Algorithm: priority queue
Algorithm: priority queueAlgorithm: priority queue
Algorithm: priority queue
 
Detalied information of queue
Detalied information of queueDetalied information of queue
Detalied information of queue
 
Stacks and queues
Stacks and queuesStacks and queues
Stacks and queues
 
Stack and Queue
Stack and Queue Stack and Queue
Stack and Queue
 
Stack and queue
Stack and queueStack and queue
Stack and queue
 

Destacado (17)

Queue Data Structure
Queue Data StructureQueue Data Structure
Queue Data Structure
 
Queue data structure
Queue data structureQueue data structure
Queue data structure
 
Ppt presentation of queues
Ppt presentation of queuesPpt presentation of queues
Ppt presentation of queues
 
STACKS IN DATASTRUCTURE
STACKS IN DATASTRUCTURESTACKS IN DATASTRUCTURE
STACKS IN DATASTRUCTURE
 
Stack
StackStack
Stack
 
Queue
QueueQueue
Queue
 
Presentation on queue
Presentation on queuePresentation on queue
Presentation on queue
 
Queue
QueueQueue
Queue
 
Priority queues
Priority queuesPriority queues
Priority queues
 
Stack Data Structure & It's Application
Stack Data Structure & It's Application Stack Data Structure & It's Application
Stack Data Structure & It's Application
 
Stack data structure
Stack data structureStack data structure
Stack data structure
 
Stack Applications
Stack ApplicationsStack Applications
Stack Applications
 
DATA STRUCTURES
DATA STRUCTURESDATA STRUCTURES
DATA STRUCTURES
 
Queues
QueuesQueues
Queues
 
stack
stackstack
stack
 
Stack & queue
Stack & queueStack & queue
Stack & queue
 
المحاضرة الثامنة: تراكيب البيانات الطابور
المحاضرة الثامنة: تراكيب البيانات الطابورالمحاضرة الثامنة: تراكيب البيانات الطابور
المحاضرة الثامنة: تراكيب البيانات الطابور
 

Similar a Queue Data Structure (w/ php egs)

queuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbb
queuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbbqueuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbb
queuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbbRAtna29
 
In java , I want you to implement a Data Structure known as a Doubly.pdf
In java , I want you to implement a Data Structure known as a Doubly.pdfIn java , I want you to implement a Data Structure known as a Doubly.pdf
In java , I want you to implement a Data Structure known as a Doubly.pdfaromalcom
 
Data structure , stack , queue
Data structure , stack , queueData structure , stack , queue
Data structure , stack , queueRajkiran Nadar
 
What is Stack, Its Operations, Queue, Circular Queue, Priority Queue
What is Stack, Its Operations, Queue, Circular Queue, Priority QueueWhat is Stack, Its Operations, Queue, Circular Queue, Priority Queue
What is Stack, Its Operations, Queue, Circular Queue, Priority QueueBalwant Gorad
 
Stack linked list
Stack linked listStack linked list
Stack linked listbhargav0077
 
Ch03_stacks_and_queues.ppt
Ch03_stacks_and_queues.pptCh03_stacks_and_queues.ppt
Ch03_stacks_and_queues.pptOliverKane3
 
Queue(lecture8).pptx
Queue(lecture8).pptxQueue(lecture8).pptx
Queue(lecture8).pptxsinghprpg
 
computer notes - Data Structures - 9
computer notes - Data Structures - 9computer notes - Data Structures - 9
computer notes - Data Structures - 9ecomputernotes
 
Unit II - LINEAR DATA STRUCTURES
Unit II -  LINEAR DATA STRUCTURESUnit II -  LINEAR DATA STRUCTURES
Unit II - LINEAR DATA STRUCTURESUsha Mahalingam
 
Data Structures and Files
Data Structures and FilesData Structures and Files
Data Structures and FilesKanchanPatil34
 

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

05-stack_queue.ppt
05-stack_queue.ppt05-stack_queue.ppt
05-stack_queue.ppt
 
queuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbb
queuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbbqueuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbb
queuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbb
 
2 b queues
2 b queues2 b queues
2 b queues
 
In java , I want you to implement a Data Structure known as a Doubly.pdf
In java , I want you to implement a Data Structure known as a Doubly.pdfIn java , I want you to implement a Data Structure known as a Doubly.pdf
In java , I want you to implement a Data Structure known as a Doubly.pdf
 
Queue
QueueQueue
Queue
 
Queue
QueueQueue
Queue
 
stack.ppt
stack.pptstack.ppt
stack.ppt
 
Data structure , stack , queue
Data structure , stack , queueData structure , stack , queue
Data structure , stack , queue
 
What is Stack, Its Operations, Queue, Circular Queue, Priority Queue
What is Stack, Its Operations, Queue, Circular Queue, Priority QueueWhat is Stack, Its Operations, Queue, Circular Queue, Priority Queue
What is Stack, Its Operations, Queue, Circular Queue, Priority Queue
 
Lec3
Lec3Lec3
Lec3
 
Stack linked list
Stack linked listStack linked list
Stack linked list
 
Ch03_stacks_and_queues.ppt
Ch03_stacks_and_queues.pptCh03_stacks_and_queues.ppt
Ch03_stacks_and_queues.ppt
 
U3.stack queue
U3.stack queueU3.stack queue
U3.stack queue
 
Chapter 7 ds
Chapter 7 dsChapter 7 ds
Chapter 7 ds
 
Queue(lecture8).pptx
Queue(lecture8).pptxQueue(lecture8).pptx
Queue(lecture8).pptx
 
computer notes - Data Structures - 9
computer notes - Data Structures - 9computer notes - Data Structures - 9
computer notes - Data Structures - 9
 
Unit II - LINEAR DATA STRUCTURES
Unit II -  LINEAR DATA STRUCTURESUnit II -  LINEAR DATA STRUCTURES
Unit II - LINEAR DATA STRUCTURES
 
Data Structures and Files
Data Structures and FilesData Structures and Files
Data Structures and Files
 
Lec3
Lec3Lec3
Lec3
 
9 python data structure-2
9 python data structure-29 python data structure-2
9 python data structure-2
 

Último

complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...asadnawaz62
 
Correctly Loading Incremental Data at Scale
Correctly Loading Incremental Data at ScaleCorrectly Loading Incremental Data at Scale
Correctly Loading Incremental Data at ScaleAlluxio, Inc.
 
Vishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documentsVishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documentsSachinPawar510423
 
Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...VICTOR MAESTRE RAMIREZ
 
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEINFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEroselinkalist12
 
Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...121011101441
 
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)dollysharma2066
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptSAURABHKUMAR892774
 
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionSachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionDr.Costas Sachpazis
 
Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024hassan khalil
 
Call Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile serviceCall Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile servicerehmti665
 
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfAsst.prof M.Gokilavani
 
Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxKartikeyaDwivedi3
 
Introduction-To-Agricultural-Surveillance-Rover.pptx
Introduction-To-Agricultural-Surveillance-Rover.pptxIntroduction-To-Agricultural-Surveillance-Rover.pptx
Introduction-To-Agricultural-Surveillance-Rover.pptxk795866
 
Application of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptxApplication of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptx959SahilShah
 
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube ExchangerStudy on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube ExchangerAnamika Sarkar
 
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor CatchersTechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catcherssdickerson1
 
An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...Chandu841456
 

Último (20)

complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...
 
Correctly Loading Incremental Data at Scale
Correctly Loading Incremental Data at ScaleCorrectly Loading Incremental Data at Scale
Correctly Loading Incremental Data at Scale
 
Vishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documentsVishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documents
 
Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...
 
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEINFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
 
Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...
 
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.ppt
 
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
 
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionSachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
 
Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024
 
Call Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile serviceCall Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile service
 
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
 
Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptx
 
Introduction-To-Agricultural-Surveillance-Rover.pptx
Introduction-To-Agricultural-Surveillance-Rover.pptxIntroduction-To-Agricultural-Surveillance-Rover.pptx
Introduction-To-Agricultural-Surveillance-Rover.pptx
 
Application of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptxApplication of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptx
 
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube ExchangerStudy on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
 
Design and analysis of solar grass cutter.pdf
Design and analysis of solar grass cutter.pdfDesign and analysis of solar grass cutter.pdf
Design and analysis of solar grass cutter.pdf
 
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor CatchersTechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
 
An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...
 

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

Notas del editor

  1. first will be removed element that was added firstly дисциплиной доступа
  2. когда нужно совершить какие-то действия в порядке их поступления, выполнив их последовательно
  3. basic operations enqueue — поставить в очередь
  4. аксіоматична семантика семантика = значення слів і їх складових частин аксіома = твердження, яке сприймається як істинне визначається поведінка АДТ через аксіомі
  5. Способы реализации array-based / reference-based linear time for both operations
  6. деление по модулю один из самых простых и эффективных способов организовать FIFO, без использования динамической памяти.
  7. the maximum number of els limited by array size
  8. collection of nodes memory is an important resource; we should avoid blocking memory unnecessary добавление/удаление элементов идет строго с соответствующих его концов
  9. to find any - need to start at head
  10. Персистентная очередь
  11. Персистентная очередь
  12. LIFO/FIFO is frozen SplStack/SplQueue
  13. LIFO/FIFO is frozen SplStack/SplQueue
  14. stack: each inserted element is monotonically increasing queue: the priority of each inserted element is monotonically decreasing
  15. ordered array = the largest item is on tail
  16. ordered array = the largest item is on tail
  17. ordered array = the largest item is on tail
  18. 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