Stacks and Queues
-
Upload
nelle-guerra -
Category
Documents
-
view
27 -
download
2
description
Transcript of Stacks and Queues
![Page 1: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/1.jpg)
Stacks and Queues
CSE 373
Data Structures
Lecture 6
![Page 2: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/2.jpg)
1/17/03 Stacks and Queues - Lecture 6 2
Readings
• Reading › Sections 3.3 and 3.4
![Page 3: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/3.jpg)
1/17/03 Stacks and Queues - Lecture 6 3
Stack ADT
• A list for which Insert and Delete are allowed only at one end of the list (the top)› the implementation defines which
end is the "top"› LIFO – Last in, First out
• Push: Insert element at top• Pop: Remove and return top
element (aka TopAndPop)• IsEmpty: test for emptyness
a tray stack
![Page 4: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/4.jpg)
1/17/03 Stacks and Queues - Lecture 6 4
An Important Application of Stacks
• Parsing phase in compilers
yields the reverse Polish (postfix) notation:
ab+c*d+ (traversal of a binary tree in postorder; see Lecture 7)
(a+b)*c+dd+
* c
a + b
parse tree
![Page 5: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/5.jpg)
1/17/03 Stacks and Queues - Lecture 6 5
Another Important Application of Stacks
• Call stack in run time systems› When a function (method, procedure) is
called the work area (local variables, copies of parameters, return location in code) for the new function is pushed on to the stack. When the function returns the stack is popped.
› So, calling a recursive procedure with a depth of N requires O(N) space.
![Page 6: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/6.jpg)
1/17/03 Stacks and Queues - Lecture 6 6
Two Basic Implementations of Stacks
• Linked List› Push is InsertFront› Pop is DeleteFront (Top is “access” the
element at the top of the stack)› IsEmpty is test for null
• Array› The k items in the stack are the first k
items in the array.
![Page 7: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/7.jpg)
1/17/03 Stacks and Queues - Lecture 6 7
Linked List Implementation
• Stack of blobs
null
a blobnode
Pointer to blob
Pointer to next node
![Page 8: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/8.jpg)
1/17/03 Stacks and Queues - Lecture 6 8
Array Implementation
• Stack of blobs
1 2 3 4 5 6 7 8 9 10 11 12
A
holder = blob pointer arraysize = number in stackmaxsize = max size of stack
topbottom
412
![Page 9: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/9.jpg)
1/17/03 Stacks and Queues - Lecture 6 9
Push and Pop (array impl.)
IsEmpty(A : blobstack pointer) : boolean { return A.size = 0}IsFull(A : blobstack pointer) : boolean { return A.size = A.maxsize;}Pop(A : blobstack pointer) : blob pointer {// Precondition: A is not empty // A.size := A.size – 1; return A.holder[A.size + 1];}Push(A : blobstack pointer, p : blob pointer): {// precondition: A is not full// A.size := A.size + 1; A.holder[A.size] := p;}
![Page 10: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/10.jpg)
1/17/03 Stacks and Queues - Lecture 6 10
Linked Lists vs Array
• Linked list implementation+ flexible – size of stack can be anything+ constant time per operation- Call to memory allocator can be costly
• Array Implementation+ Memory preallocated+ constant time per operation. - Not all allocated memory is used- Overflow possible - Resizing can be used but some
ops will be more than constant time.-
![Page 11: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/11.jpg)
1/17/03 Stacks and Queues - Lecture 6 11
Queue
• Insert at one end of List, remove at the other end
• Queues are “FIFO” – first in, first out• Primary operations are Enqueue and
Dequeue• A queue ensures “fairness”
› customers waiting on a customer hotline› processes waiting to run on the CPU
![Page 12: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/12.jpg)
1/17/03 Stacks and Queues - Lecture 6 12
Queue ADT
• Operations:› Enqueue - add an entry at the end of the
queue (also called “rear” or “tail”)› Dequeue - remove the entry from the front
of the queue› IsEmpty› IsFull may be needed
![Page 13: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/13.jpg)
1/17/03 Stacks and Queues - Lecture 6 13
A Sample of Applications of Queues
• File servers: Users needing access to their files on a shared file server machine are given access on a FIFO basis
• Printer Queue: Jobs submitted to a printer are printed in order of arrival
• Phone calls made to customer service hotlines are usually placed in a queue
![Page 14: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/14.jpg)
1/17/03 Stacks and Queues - Lecture 6 14
Pointer Implementation
null
frontrear
Q
HeaderNot always there
front rear
![Page 15: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/15.jpg)
1/17/03 Stacks and Queues - Lecture 6 15
List Implementation
IsEmpty(Q : blobqueue pointer) : boolean { return Q.front = Q.rear}Dequeue(Q : blobqueue pointer) : blob pointer {// Precondition: Q is not empty // B : blob pointer; B := Q.front.next; Q.front.next := Q.front.next.next; return B;}Enqueue(Q : blobqueue pointer, p : blob pointer): { Q.rear.next := new node; Q.rear := Q.rear.next; Q.rear.value := p;}
![Page 16: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/16.jpg)
1/17/03 Stacks and Queues - Lecture 6 16
Array Implementation
• Circular array
0 1 2 3 4 5 6 7 8 9 10 11
Q
holder = blob pointer arraysize = number in queuefront = index of front of queuemaxsize = max size of queue
1224
rear = (front + size) mod maxsize
front rear
![Page 17: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/17.jpg)
1/17/03 Stacks and Queues - Lecture 6 17
Wrap Around
0 1 2 3 4 5 6 7 8 9 10 11
Q
12104
frontrear
rear = (front + size) mod maxsize = (10 + 4) mod 12 = 14 mod 12 = 2
![Page 18: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/18.jpg)
1/17/03 Stacks and Queues - Lecture 6 18
Enqueue
0 1 2 3 4 5 6 7 8 9 10 11
Q
12104
frontrear
p
![Page 19: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/19.jpg)
1/17/03 Stacks and Queues - Lecture 6 19
Enqueue
0 1 2 3 4 5 6 7 8 9 10 11
Q
12105
frontrear
p
![Page 20: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/20.jpg)
1/17/03 Stacks and Queues - Lecture 6 20
Enqueue
Enqueue(Q : blobqueue pointer, p : blob pointer) : {// precondition : queue is not full //Q.holder[(Q.front + Q.size) mod Q.maxsize] := p;Q.size := Q.size + 1;}
Constant time!
![Page 21: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/21.jpg)
1/17/03 Stacks and Queues - Lecture 6 21
Dequeue
0 1 2 3 4 5 6 7 8 9 10 11
Q
12104
frontrear
![Page 22: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/22.jpg)
1/17/03 Stacks and Queues - Lecture 6 22
Dequeue
0 1 2 3 4 5 6 7 8 9 10 11
Q
12113
frontrear
return
![Page 23: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/23.jpg)
1/17/03 Stacks and Queues - Lecture 6 23
Try Dequeue
• Define the circular array implementation of Dequeue
![Page 24: Stacks and Queues](https://reader035.fdocuments.in/reader035/viewer/2022062718/56812c67550346895d90fb10/html5/thumbnails/24.jpg)
1/17/03 Stacks and Queues - Lecture 6 24
Solution to Dequeue
Dequeue(Q : blobqueue pointer) : blob pointer {// precondition : queue is not empty //p : blob pointerp := Q.holder[Q.front];Q.front := (Q.front + 1) mod Q.maxsize;Q.size := Q.size - 1;return p;}