lecture 4 stack and queue -...
TRANSCRIPT
![Page 1: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/1.jpg)
Lecture 4 Stack and Queue
Bo Tang @ SUSTech, Spring 2018
![Page 2: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/2.jpg)
2
Our Roadmap
Stack
Queue
Stack vs. Queue
![Page 3: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/3.jpg)
3
Stack
A stack is a sequence in which: Items can be added and removed only at one end
(the top)
You can only access the item that is currently at the top
Stack Analogy
![Page 4: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/4.jpg)
4
Stack
First In Last Out (FILO) Constrained item access
Major Operations push: add an item to the top of the stack
pop: remove the item at the top of the stack
Illustration
empty push(a) push(b), push(c) pop()top
atop
cba
top
ba
top
![Page 5: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/5.jpg)
5
Stack Operation
push: add an item to the top of the stack
pop: remove the item at the top of the stack
top/peek: get the item at the top of the stack, but do not remove it
isEmpty: test if the stack is empty
isFull: test if the stack is full
clear: clear the stack, set it as empty stack
size: return the current size of the stack
push(d) pop() clear()
cba
top
dcba
top
cba
top
top
![Page 6: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/6.jpg)
6
Implementation of Stack
Array-based Stack
Linked Stack
9
6
5
4
1
top 9
6
5
top
4
1 ^
![Page 7: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/7.jpg)
7
Implementation of Stack
Array based Stack MAX_SIZE = n // the max size of stack
top = -1 // the current top position
Array S with n elements
Example MAX_SIZE = 5
top = -1
Array S
S[4]
S[3]
S[2]
S[1]
S[0]
S
top
![Page 8: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/8.jpg)
8
Push Operator
push(item):1. top++;
2. S[top] = item
push(1)
S[4]
S[3]
S[2]
S[1]
S[0] push(1) top=0 1
![Page 9: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/9.jpg)
9
Push Operator
push(item):1. top++;
2. S[top] = item
push(1)
push(4)S[4]
S[3]
S[2]
S[1]
S[0] push(1) top=0 1
push(4) top=1 4
![Page 10: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/10.jpg)
10
Push Operator
push(item):1. top++;
2. S[top] = item
push(1)
push(4)
push(5)S[4]
S[3]
S[2]
S[1]
S[0] push(1) top=0 1
push(4) top=1 4
push(5) top=2 5
![Page 11: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/11.jpg)
11
Push Operator
push(item):1. top++;
2. S[top] = item
push(1)
push(4)
push(5)
push(6)
S[4]
S[3]
S[2]
S[1]
S[0] push(1) top=0 1
push(4) top=1 4
push(5) top=2 5
push(6) top=3 6
![Page 12: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/12.jpg)
12
Push Operator
push(9)
push(10) OVERFLOW
How to avoid that?
S[4] 9
S[3] 6
S[2] 5
S[1] 4
S[0] 1
push(9) top=4
S[4] 9
S[3] 6
S[2] 5
S[1] 4
S[0] 1
top=5
![Page 13: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/13.jpg)
13
Push / Pop Operator
push(item):1. if(top == MAXSIZE-1)
2. Stack is FULL! No push!
3. else
4. top++;
5. S[top] = item
pop(): // should avoid underflow1. if(top == -1)
2. Stack is EMPTY! No pop!
3. else
4. top--;
![Page 14: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/14.jpg)
14
Application of Stacks
Making sure the delimiters (parens, brackets, etc.) are balanced: Push open (i.e., left) delimiters onto a stack
When you encounter a close (i.e., right) delimiter, pop an item off the stack and see if it matches
Evaluating arithmetic expressions Parsing arithmetic expressions written using infix
notation
The runtime stack in memory Converting a recursive algorithm to an iterative one
by using a stack to emulate the runtime stack
![Page 15: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/15.jpg)
15
Brackets Balance Problem
a+{2-[b+c ]*(8* [8+g ]/[m-e ]-7)-p}
{[ ]([ ][ ])}
Skip operators and notations
Is the bracket expression balanced or not?
() Yes
[} No
{[()}] No
{[ ]( [ ][ ])} Yes
{{{{{{[[[[[[(((((())))))]]]]]]}}}}}} Yes
![Page 16: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/16.jpg)
16
Brackets Balance Problem
Given a bracket expression, determine whether it is balanced or not?
{[ ]([ ][ ])}
How to solve it by using stack?
Bracket pairs: ( ), [ ], { }
Any ideas?
Methodology
Employ stack store checked left bracket
Pop out left bracket if it is matched
![Page 17: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/17.jpg)
17
Arithmetic Expression Evaluation
Arithmetic expression
operands (a, b, c), operator (+, *)
a + b * c
Prefix expression
+ a * b c
Infix expression
a + b * c
Postfix expression
a b c * +
![Page 18: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/18.jpg)
18
Postfix Expression
Infix expression
5 * ((9 + 3) * (4*2) + 7)
Postfix expression
5 9 3 + 4 2 * * 7 + *
Parse postfix expression is somewhat easier problem than directly parsing infix (why)
Postfix has a nice property that parentheses are unnecessary
Postfix Expression Evaluation
Convert from infix to postfix (one of lab problems)
Evaluate a postfix expression
![Page 19: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/19.jpg)
19
Postfix Expression
Postfix expression
5 9 3 + 4 2 * * 7 + *
Methodology
Read the tokens in one at a time
If it is an operand, push it on the stack
If it is a binary operator:
pop top two elements from the stack,
apply the operator,
and push the result back on the stack
![Page 20: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/20.jpg)
20
Postfix Expression Evaluation
5 9 3 + 4 2 * * 7 + *
Postfix Expression Evaluation
Stack operations Stack elements push(5) 5
push(9) 5 9
push(3) 5 9 3
push(pop() + pop()) 5 12
push(4) 5 12 4
push(2) 5 12 4 2
push(pop() * pop()) 5 12 8
push(pop() * pop()) 5 96
push(7) 5 96 7
push(pop() + pop()) 5 103
push(pop() * pop()) 515
![Page 21: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/21.jpg)
21
Our Roadmap
Stack
Queue
Stack vs. Queue
![Page 22: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/22.jpg)
22
Queue
A queue is a sequence in which: items are added at the rear and removed from the
front
You can only access the item that is currently at the front
Queue Analogy
![Page 23: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/23.jpg)
23
Queue
First In First Out (FIFO) Items access constrained
Major elements front: the first element in the queue (remove)
rear: the last element in the queue (add)
Illustration
a1 , a2 , … , andeQueue enQueue
rearfront
![Page 24: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/24.jpg)
24
Queue Operations
enQueue: add an item at the rear of the queue
deQueue: remove the item at the front of the queue
front: get the item at the front of the queue, but do not remove it
isEmpty: test if the queue is empty
isFull: test the queue is full
clear: clear the queue, set it as empty queue
size: return the current size of the queue
enQueue(d)
cba
rear dcba
dcb
front
rear
front
rear
front
deQueue()
![Page 25: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/25.jpg)
25
Implementation of Queue
Array based Queue MAX_SIZE = n // the max size of stack
front = 0 // the current front
rear = 0 // the current rear
Array S with n elements
Example MAX_SIZE = 5
front = 0
rear = 0
Array S
S[4]
S[3]
S[2]
S[1]
S[0]
S
frontrear
![Page 26: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/26.jpg)
26
enQueue Operator
enQueue(item):1. if(rear < MAXSIZE)
2. S[rear] = item
3. rear++
3. else
4. Queue is FULL, no enQueue
enQueue (1), enQueue(4), enQueue(5), enQueue(6)
S[4]
S[3] 6
S[2] 5
S[1] 4
S[0] 1
rear = 4
front=0
![Page 27: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/27.jpg)
27
deQueue Operator
deQueue():1. if(front < rear)
2. front++
3. else
4. Queue is empty, no deQueue
deQueue (), deQueue(), deQueue(), deQueue()
S[4]
S[3]
S[2]
S[1]
S[0]
rear = 4front=4
![Page 28: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/28.jpg)
28
enQueue and deQueue
enQueue(9)
enQueue(10) rear >= MAXSIZE
Queue is FULL!!!
Wrong OVERFLOW
S[0] to S[3] is empty?
How to address it?
S[4] 9
S[3]
S[2]
S[1]
S[0]
S[4] 9
S[3]
S[2]
S[1]
S[0]
rear = 5
front=4
rear = 5
front=4
![Page 29: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/29.jpg)
29
Ring Queue
1
2
34
5
0
(a) empty
frontrear
1
2
34
5
0
(b) d, e, b, g enQueue
front
d e
b
grear
1
2
34
5
0
(c) d, e deQueue
b
g
front
rear
1
2
34
5
0
(d) i, j, k enQueue
b
g
front
i
j
k
rear
1
2
34
5
0
(e) b, g deQueue
i
j
k
rear
front
1
2
34
5
0
(f) r, p, s, t deQueue
i
j
k
front
r
p
rear
![Page 30: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/30.jpg)
30
Application of Queues
First-in first-out (FIFO) inventory control OS scheduling: processes, print jobs, packets, etc.
Breadth-first traversal of a graph or level-order traversal of a binary tree (more on these later)
Real applications iTunes playlist.
Data buffers (iPod, TiVo).
Asynchronous data transfer (file IO, pipes, sockets).
Dispensing requests on a shared resource (printer, processor)
![Page 31: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/31.jpg)
31
Our Roadmap
Stack
Queue
Stack vs. Queue
![Page 32: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/32.jpg)
32
Stack VS. Queue
Stack Queue
In-Out FILO FIFO
Application function runtime OS scheduling
Operationspushpop
enQueue, deQueue
Ops TimeComplexity
O(1) O(1)
Implementation
Array-based, Linked-based
Array-based, Linked-based
![Page 33: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/33.jpg)
33
Data Structure
![Page 34: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/34.jpg)
34
Our Roadmap
Stack
Queue
Stack vs. Queue
![Page 35: Lecture 4 Stack and Queue - acm.sustc.edu.cnacm.sustc.edu.cn/cs203/slides/dsaa_L04_stack_queue.pdfParsing arithmetic expressions written using infix notation The runtime stack in memory](https://reader034.vdocuments.site/reader034/viewer/2022042708/5a9fbd227f8b9a7f178d3598/html5/thumbnails/35.jpg)
35
Thank You!