SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

Deque and its applications
Deque and its applicationsDeque and its applications
Deque and its applications
Jsaddam Hussain
 
Algorithm: priority queue
Algorithm: priority queueAlgorithm: priority queue
Algorithm: priority queue
Tareq Hasan
 

Was ist angesagt? (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
 

Andere mochten auch

Stack Data Structure & It's Application
Stack Data Structure & It's Application Stack Data Structure & It's Application
Stack Data Structure & It's Application
Tech_MX
 
Stack data structure
Stack data structureStack data structure
Stack data structure
Tech_MX
 
المحاضرة الثامنة: تراكيب البيانات الطابور
المحاضرة الثامنة: تراكيب البيانات الطابورالمحاضرة الثامنة: تراكيب البيانات الطابور
المحاضرة الثامنة: تراكيب البيانات الطابور
Mahmoud Alfarra
 

Andere mochten auch (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
 
المحاضرة الثامنة: تراكيب البيانات الطابور
المحاضرة الثامنة: تراكيب البيانات الطابورالمحاضرة الثامنة: تراكيب البيانات الطابور
المحاضرة الثامنة: تراكيب البيانات الطابور
 

Ähnlich wie Queue Data Structure (w/ php egs)

queuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbb
queuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbbqueuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbb
queuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbb
RAtna29
 
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
aromalcom
 
Stack linked list
Stack linked listStack linked list
Stack linked list
bhargav0077
 
computer notes - Data Structures - 9
computer notes - Data Structures - 9computer notes - Data Structures - 9
computer notes - Data Structures - 9
ecomputernotes
 

Ähnlich wie 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
 

Kürzlich hochgeladen

AKTU Computer Networks notes --- Unit 3.pdf
AKTU Computer Networks notes ---  Unit 3.pdfAKTU Computer Networks notes ---  Unit 3.pdf
AKTU Computer Networks notes --- Unit 3.pdf
ankushspencer015
 
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Christo Ananth
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
dharasingh5698
 

Kürzlich hochgeladen (20)

AKTU Computer Networks notes --- Unit 3.pdf
AKTU Computer Networks notes ---  Unit 3.pdfAKTU Computer Networks notes ---  Unit 3.pdf
AKTU Computer Networks notes --- Unit 3.pdf
 
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
 
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
 
Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024
 
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINEMANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
 
Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations
 
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
 
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
 
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
 
(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
 
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLSMANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdf
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
 
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...
 
Roadmap to Membership of RICS - Pathways and Routes
Roadmap to Membership of RICS - Pathways and RoutesRoadmap to Membership of RICS - Pathways and Routes
Roadmap to Membership of RICS - Pathways and Routes
 
KubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlyKubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghly
 
Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)
 
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordCCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
 

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

Hinweis der Redaktion

  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