CS2010: Algorithms and Data Structures - Lecture 5 ...
Transcript of CS2010: Algorithms and Data Structures - Lecture 5 ...
![Page 1: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/1.jpg)
cs2010: algorithms and data structuresLecture 5: Abstract Data Types - Stack & Queue
Vasileios Koutavas
School of Computer Science and StatisticsTrinity College Dublin
![Page 2: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/2.jpg)
this lecture
ROBERT SEDGEWICK | KEVIN WAYNE
F O U R T H E D I T I O N
Algorithms
http://algs4.cs.princeton.edu
Algorithms ROBERT SEDGEWICK | KEVIN WAYNE
1.3 BAGS, QUEUES, AND STACKS
‣ stacks
‣ resizing arrays
‣ queues
‣ generics
‣ iterators
‣ applications
→ Abstract Data Types→ Stacks and Queues *→ S&W 1.2 and 1.3
1
![Page 3: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/3.jpg)
Abstract Data Types
![Page 4: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/4.jpg)
abstract data type
Example:
A Data Type is
→ A set of values→ in example: all counter objects at state 0, 1, 2, …
→ A set of operations on those values→ in example: constructor, increment, tally, toString
An Abstract Data Type (ADT) is
→ A Data Type whose implementation is unknown to the client ofthe ADT
An Application Programming Interface (API) is
→ A list and informal description of the operations of an ADT
3
![Page 5: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/5.jpg)
abstract data type
Example:
A Data Type is
→ A set of values→ in example: all counter objects at state 0, 1, 2, …
→ A set of operations on those values→ in example: constructor, increment, tally, toString
An Abstract Data Type (ADT) is
→ A Data Type whose implementation is unknown to the client ofthe ADT
An Application Programming Interface (API) is
→ A list and informal description of the operations of an ADT
3
![Page 6: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/6.jpg)
abstract data type
Example:
A Data Type is
→ A set of values→ in example: all counter objects at state 0, 1, 2, …
→ A set of operations on those values→ in example: constructor, increment, tally, toString
An Abstract Data Type (ADT) is
→ A Data Type whose implementation is unknown to the client ofthe ADT
An Application Programming Interface (API) is
→ A list and informal description of the operations of an ADT 3
![Page 7: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/7.jpg)
who is the client of an adt?
Example:
→ Client: the rest of the program, using the ADT
4
![Page 8: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/8.jpg)
Stacks & Queues
![Page 9: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/9.jpg)
stacks & queues
6
![Page 10: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/10.jpg)
Fundamental data types.
・Value: collection of objects.
・Operations: insert, remove, iterate, test if empty.
・Intent is clear when we insert.
・Which item do we remove?
Stack. Examine the item most recently added.
Queue. Examine the item least recently added.
pop
pushstack
2
Stacks and queues
LIFO = "last in first out"
FIFO = "first in first out"
enqueue dequeue
queue
![Page 11: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/11.jpg)
3
Client, implementation, interface
Separate interface and implementation.
Ex: stack, queue, bag, priority queue, symbol table, union-find, .…
Benefits.
・Client can't know details of implementation ⇒
client has many implementation from which to choose.
・Implementation can't know details of client needs ⇒
many clients can re-use the same implementation.
・Design: creates modular, reusable libraries.
・Performance: use optimized implementation where it matters.
Client: program using operations defined in interface.
Implementation: actual code implementing operations.
Interface: description of data type, basic operations.
![Page 12: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/12.jpg)
http://algs4.cs.princeton.edu
ROBERT SEDGEWICK | KEVIN WAYNE
Algorithms
‣ stacks
‣ resizing arrays
‣ queues
‣ generics
‣ iterators
‣ applications
1.3 BAGS, QUEUES, AND STACKS
![Page 13: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/13.jpg)
Warmup API. Stack of strings data type.
Warmup client. Reverse sequence of strings from standard input.
5
Stack API
poppush
public class StackOfStrings public class StackOfStrings public class StackOfStrings
StackOfStrings() create an empty stack
void push(String item) insert a new string onto stack
String pop()remove and return the string
most recently added
boolean isEmpty() is the stack empty?
int size() number of strings on the stack
![Page 14: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/14.jpg)
6
How to implement a stack with a linked list?
A. Can't be done efficiently with a singly-linked list.
B.
C.
top of stack
it was the best of null
of best the was it null
top of stack
![Page 15: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/15.jpg)
7
Stack: linked-list implementation
・Maintain pointer first to first node in a singly-linked list.
・Push new item before first.
・Pop item from first.
first
of best the was it null
top of stack
![Page 16: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/16.jpg)
stack: linked list implementation
http://dsvproject.github.io/dsvproject/code/stackLinkedList.html
7
![Page 17: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/17.jpg)
8
Stack pop: linked-list implementation
to
be
orfirst
first = first.next;
to
beor
first
null
null
Removing the first node in a linked list
String item = first.item;
save item to return
delete first node
return item;
return saved item
inner class
private class Node{ String item; Node next;}
![Page 18: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/18.jpg)
9
Stack push: linked-list implementation
to
be
Inserting a new node at the beginning of a linked list
first = new Node();
Node oldfirst = first;
orfirst
to
be
or
oldfirst
oldfirst
first
save a link to the list
create a new node for the beginning
set the instance variables in the new node
first.item = "not";first.next = oldfirst;
to
beor
notfirst
null
null
null
inner class
private class Node{ String item; Node next;}
![Page 19: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/19.jpg)
10
Stack: linked-list implementation in Java
public class LinkedStackOfStrings{ private Node first = null;
private class Node { String item; Node next; } public boolean isEmpty() { return first == null; }
public void push(String item) { Node oldfirst = first; first = new Node(); first.item = item; first.next = oldfirst; }
public String pop() { String item = first.item; first = first.next; return item; }}
private inner class(access modifiers for instance variables don't matter)
![Page 20: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/20.jpg)
Proposition. Every operation takes constant time in the worst case.
Proposition. A stack with N items uses ~ 40 N bytes.
Remark. This accounts for the memory for the stack
(but not the memory for strings themselves, which the client owns).
11
Stack: linked-list implementation performance
8 bytes (reference to String)
8 bytes (reference to Node)
16 bytes (object overhead)
40 bytes per stack node
public class Node{ String item; Node next;...}
node object (inner class) 40 bytes
references
objectoverhead
extraoverhead
item
next
8 bytes (inner class extra overhead)
inner class
private class Node{ String item; Node next;}
![Page 21: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/21.jpg)
A. Can't be done efficiently with an array.
B.
C.
12
How to implement a fixed-capacity stack with an array?
top of stack
times of best the was it null null null null
0 1 2 3 4 5 6 7 8 9
it was the best of times null null null null
0 1 2 3 4 5 6 7 8 9
top of stack
![Page 22: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/22.jpg)
・Use array s[] to store N items on stack.
・push(): add new item at s[N].
・pop(): remove item from s[N-1].
Defect. Stack overflows when N exceeds capacity. [stay tuned]
it was the best of times null null null null
0 1 2 3 4 5 6 7 8 9
13
Fixed-capacity stack: array implementation
s[]
N capacity = 10
top of stack
![Page 23: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/23.jpg)
stack: array implementation
http://dsvproject.github.io/dsvproject/code/stackArray.html
8
![Page 24: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/24.jpg)
public class FixedCapacityStackOfStrings{ private String[] s; private int N = 0; public FixedCapacityStackOfStrings(int capacity) { s = new String[capacity]; } public boolean isEmpty() { return N == 0; } public void push(String item) { s[N++] = item; } public String pop() { return s[--N]; }}
14
Fixed-capacity stack: array implementation
decrement N;then use to index into array
a cheat(stay tuned)
use to index into array;then increment N
![Page 25: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/25.jpg)
15
Overflow and underflow.
・Underflow: throw exception if pop from an empty stack.
・Overflow: use resizing array for array implementation. [stay tuned]
Null items. We allow null items to be inserted.
Loitering. Holding a reference to an object when it is no longer needed.
Stack considerations
this version avoids "loitering": garbage collector can reclaim memory for
an object only if no outstanding references
public String pop(){ String item = s[--N]; s[N] = null; return item;}
loitering
public String pop(){ return s[--N]; }
![Page 26: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/26.jpg)
a better array implementation of stackofstrings
http://algs4.cs.princeton.edu
ROBERT SEDGEWICK | KEVIN WAYNE
Algorithms
‣ stacks
‣ resizing arrays
‣ queues
‣ generics
‣ iterators
‣ applications
1.3 BAGS, QUEUES, AND STACKS
9
![Page 27: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/27.jpg)
17
Stack: resizing-array implementation
Problem. Requiring client to provide capacity does not implement API!
Q. How to grow and shrink array?
First try.
・push(): increase size of array s[] by 1.
・pop(): decrease size of array s[] by 1.
Too expensive.
・Need to copy all items to a new array, for each operation.
・Array accesses to insert first N items = N + (2 + 4 + … + 2(N – 1)) ~ N 2.
Challenge. Ensure that array resizing happens infrequently.
infeasible for large N
1 array accessper push
2(k–1) array accesses to expand to size k(ignoring cost to create new array)
![Page 28: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/28.jpg)
increase size by 1
We start with an empty array of size 1Array accesses (AC):
→ 1st push: 1 AC (store new item)→ 2nd push: 1 AC + 2 AC (read-write previous item(s) to new array)→ 3rd push: 1 AC + 4 AC→ 4th push: 1 AC + 6 AC→ …→ Nth push: 1 AC + 2(N− 1) AC
∼ N2 array accesses to insert N items starting from the empty stack
10
![Page 29: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/29.jpg)
17
Stack: resizing-array implementation
Problem. Requiring client to provide capacity does not implement API!
Q. How to grow and shrink array?
First try.
・push(): increase size of array s[] by 1.
・pop(): decrease size of array s[] by 1.
Too expensive.
・Need to copy all items to a new array, for each operation.
・Array accesses to insert first N items = N + (2 + 4 + … + 2(N – 1)) ~ N 2.
Challenge. Ensure that array resizing happens infrequently.
infeasible for large N
1 array accessper push
2(k–1) array accesses to expand to size k(ignoring cost to create new array)
![Page 30: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/30.jpg)
18
Q. How to grow array?
A. If array is full, create a new array of twice the size, and copy items.
Array accesses to insert first N = 2i items. N + (2 + 4 + 8 + … + N) ~ 3N.
Stack: resizing-array implementation
"repeated doubling"
public ResizingArrayStackOfStrings() { s = new String[1]; }
public void push(String item) { if (N == s.length) resize(2 * s.length); s[N++] = item; }
private void resize(int capacity) { String[] copy = new String[capacity]; for (int i = 0; i < N; i++) copy[i] = s[i]; s = copy; }
1 array accessper push
k array accesses to double to size k(ignoring cost to create new array)
![Page 31: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/31.jpg)
19
Q. How to shrink array?
First try.
・push(): double size of array s[] when array is full.
・pop(): halve size of array s[] when array is one-half full.
Too expensive in worst case.
・Consider push-pop-push-pop-… sequence when array is full.
・Each operation takes time proportional to N.
Stack: resizing-array implementation
to be or not to null null nullN = 5
to be or notN = 4
to be or not to null null nullN = 5
to be or notN = 4
![Page 32: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/32.jpg)
20
Q. How to shrink array?
Efficient solution.
・push(): double size of array s[] when array is full.
・pop(): halve size of array s[] when array is one-quarter full.
Invariant. Array is between 25% and 100% full.
Stack: resizing-array implementation
public String pop() { String item = s[--N]; s[N] = null; if (N > 0 && N == s.length/4) resize(s.length/2); return item; }
![Page 33: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/33.jpg)
amortized running time
Assume implementation of ADT with operations A, B, CHow do we calculate the amortized running time of the operations ofthe ADT?
→ Consider the ADT to be empty→ Consider all feasible sequences of N operations
→ A, A, A, …→ A, B, A, C, …→ …
→ calculate total running time for each of these sequences takethe largest one (worst case sequence)
→ Amortized running time of ADT operations = worst-case runningtime of N operations / N
11
![Page 34: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/34.jpg)
21
Amortized analysis. Starting from an empty data structure, average
running time per operation over a worst-case sequence of operations.
Proposition. Starting from an empty stack, any sequence of M push and
pop operations takes time proportional to M.
Stack resizing-array implementation: performance
best worst amortized
construct
push
pop
size
1 1 1
1 N 1
1 N 1
1 1 1
doubling andhalving operations
order of growth of running timefor resizing stack with N items
![Page 35: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/35.jpg)
resizing-array implementation of stackofstrings adt
Operations (push/pop/construct/resize) have
O(1) amortized running time
12
![Page 36: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/36.jpg)
22
Proposition. Uses between ~ 8 N and ~ 32 N bytes to represent a stack
with N items.
・~ 8 N when full.
・~ 32 N when one-quarter full.
Remark. This accounts for the memory for the stack
(but not the memory for strings themselves, which the client owns).
Stack resizing-array implementation: memory usage
public class ResizingArrayStackOfStrings{ private String[] s; private int N = 0; …}
8 bytes × array size
![Page 37: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/37.jpg)
Tradeoffs. Can implement a stack with either resizing array or linked list;
client can use interchangeably. Which one is better?
Linked-list implementation.
・Every operation takes constant time in the worst case.
・Uses extra time and space to deal with the links.
Resizing-array implementation.
・Every operation takes constant amortized time.
・Less wasted space.
23
Stack implementations: resizing array vs. linked list
to be or not null null null nullN = 4
to
be
Inserting a new node at the beginning of a linked list
first = new Node();
Node oldfirst = first;
orfirst
to
be
or
oldfirst
oldfirst
first
save a link to the list
create a new node for the beginning
set the instance variables in the new node
first.item = "not";first.next = oldfirst;
to
beor
notfirst
null
null
null
![Page 38: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/38.jpg)
http://algs4.cs.princeton.edu
ROBERT SEDGEWICK | KEVIN WAYNE
Algorithms
‣ stacks
‣ resizing arrays
‣ queues
‣ generics
‣ iterators
‣ applications
1.3 BAGS, QUEUES, AND STACKS
![Page 39: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/39.jpg)
25
Queue API
public class QueueOfStrings public class QueueOfStrings public class QueueOfStrings
QueueOfStrings() create an empty queue
void enqueue(String item) insert a new string onto queue
String dequeue()remove and return the string
least recently added
boolean isEmpty() is the queue empty?
int size() number of strings on the queue
enqueue
dequeue
![Page 40: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/40.jpg)
26
How to implement a queue with a linked list?
A. Can't be done efficiently with a singly-linked list.
B.
C.
back of queue front of queue
of best the wastimes it null
front of queue back of queue
was the best ofit times null
![Page 41: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/41.jpg)
27
Queue: linked-list implementation
・Maintain one pointer first to first node in a singly-linked list.
・Maintain another pointer last to last node.
・Dequeue from first.
・Enqueue after last.
first last
was the best ofit times null
front of queue back of queue
![Page 42: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/42.jpg)
Visualisation:http://www.cs.usfca.edu/~galles/visualization/QueueLL.html
13
![Page 43: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/43.jpg)
Remark. Identical code to linked-list stack pop().28
Queue dequeue: linked-list implementation
or
be
tofirst
first = first.next;
or
beto
first
null
null
Removing the first node in a linked list
String item = first.item;
save item to return
delete first node
return item;
return saved item
last
lastinner class
private class Node{ String item; Node next;}
![Page 44: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/44.jpg)
29
Queue enqueue: linked-list implementation
inner class
private class Node{ String item; Node next;}
or
be
Inserting a new node at the end of a linked list
last = new Node();last.item = "not";
Node oldlast = last;
tofirst
or
be
to
oldlast
oldlast
last
save a link to the last node
create a new node for the end
link the new node to the end of the list
oldlast.next = last;
not
not
orbe
tofirst
null
null
null
null
last
lastfirst
oldlast
![Page 45: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/45.jpg)
30
Queue: linked-list implementation in Java
public class LinkedQueueOfStrings{ private Node first, last; private class Node { /* same as in LinkedStackOfStrings */ } public boolean isEmpty() { return first == null; } public void enqueue(String item) { Node oldlast = last; last = new Node(); last.item = item; last.next = null; if (isEmpty()) first = last; else oldlast.next = last; } public String dequeue() { String item = first.item; first = first.next; if (isEmpty()) last = null; return item; }}
special cases for empty queue
![Page 46: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/46.jpg)
A. Can't be done efficiently with an array.
B.
C.
31
How to implement a fixed-capacity queue with an array?
times of best the was it null null null null
0 1 2 3 4 5 6 7 8 9
it was the best of times null null null null
0 1 2 3 4 5 6 7 8 9
back of queuefront of queue
front of queueback of queue
![Page 47: CS2010: Algorithms and Data Structures - Lecture 5 ...](https://reader031.fdocuments.net/reader031/viewer/2022030209/621dd1cffca022702b626865/html5/thumbnails/47.jpg)
32
Queue: resizing-array implementation
・Use array q[] to store items in queue.
・enqueue(): add new item at q[tail].
・dequeue(): remove item from q[head].
・Update head and tail modulo the capacity.
・Add resizing array.
Q. How to resize?
q[]
head tail capacity = 10
null null the best of times null null null null
0 1 2 3 4 5 6 7 8 9
front of queue back of queue