Professional Documents
Culture Documents
Stacks
Stacks in real life: stack of books, stack of plates
Stack Operations
Push(X) insert X as the top element of the stack
Pop() remove the top element of the stack and return it.
Top() return the top element without removing it from the
stack.
Stack Operations
top
top
5
7
5
7
5
push(2)
push(5)
push(7)
push(1)
top
top
top
top
21
7
5
7
5
pop()
push(21)
top
7
5
top
2
21
pop()
2
7
pop()
top
2
5
pop()
Stack Operations
The last element to go into the stack is the first to come
full?
IsFull() boolean function
Stack Operations
The stack
push
push
push
depth
pop
(returned)
pop
(returned)
top
(returned)
LIFO: Last-In-First-Out
6
top
1
7
5
2
top = 3
10
11
constant time.
12
13
14
15
head
top
1
7
5
2
16
7
5
2
17
9
7
5
2
newNode
push(9)
18
19
20
Use of Stack
Example of use: prefix, infix, postfix expressions.
Consider the expression A+B: we think of applying the
21
+ A B prefix
A B + postfix
The prefixes pre and post refer to the position of the
22
A+B*C
We know that multiplication is done before addition.
The expression is interpreted as
A+(B*C)
Multiplication has precedence over addition.
23
A+(B*C)
infix form
24
A+(B*C)
A+(BC*)
infix form
convert multiplication
25
A+(B*C)
A+(BC*)
A(BC*)+
infix form
convert multiplication
convert addition
26
A+(B*C)
A+(BC*)
A(BC*)+
ABC*+
infix form
convert multiplication
convert addition
postfix form
27
(A + B ) * C
infix form
28
(A + B ) * C
(AB+)*C
infix form
convert addition
29
(A + B ) * C
(AB+)*C
(AB+)C*
infix form
convert addition
convert multiplication
30
(A + B ) * C
(AB+)*C
(AB+)C*
AB+C*
infix form
convert addition
convert multiplication
postfix form
31
Precedence of Operators
The five binary operators are: addition, subtraction,
Multiplication/division
*, /
Addition/subtraction
+, -
32
Precedence of Operators
For operators of same precedence, the left-to-right rule
applies:
A+B+C means (A+B)+C.
For exponentiation, the right-to-left rule applies
A B C means A ( B C )
33
Infix to Postfix
Infix
A+B
12 + 60 23
(A + B)*(C D )
A B * C D + E/F
Postfix
AB+
12 60 + 23
AB+CD*
A B C*D E F/+
34
Infix to Postfix
Infix
A+B
12 + 60 23
(A + B)*(C D )
A B * C D + E/F
Postfix
AB+
12 60 + 23
AB+CD*
A B C*D E F/+
35
Infix to Postfix
Note that the postfix form an expression does not require
parenthesis.
Consider 4+3*5 and (4+3)*5. The parenthesis are not
needed in the first but they are necessary in the second.
The postfix forms are:
4+3*5
435*+
(4+3)*5
43+5*
36
37
38
39
prcd(+,+) is TRUE
prcd(+,*) is FALSE
Here is the algorithm that converts infix expression to its
postfix form.
The infix expression is without parenthesis.
40
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Stack s;
While( not end of input ) {
c = next input character;
if( c is an operand )
add c to postfix string;
else {
while( !s.empty() && prcd(s.top(),c) ){
op = s.pop();
add op to the postfix string;
}
s.push( c );
}
while( !s.empty() ) {
op = s.pop();
add op to postfix string;
}
41
symb
A
postfix
A
stack
42
symb
A
+
postfix
A
A
stack
+
43
symb
A
+
B
postfix
A
A
AB
stack
+
+
44
symb
A
+
B
*
postfix
A
A
AB
AB
stack
+
+
+*
45
symb
A
+
B
*
C
postfix
A
A
AB
AB
ABC
stack
+
+
+*
+*
46
symb
A
+
B
*
C
postfix
A
A
AB
AB
ABC
ABC *
stack
+
+
+*
+*
+
47
symb
A
+
B
*
C
postfix
A
A
AB
AB
ABC
ABC *
ABC * +
stack
+
+
+*
+*
+
48
on the stack.
This can be done by setting prcd(op,( ) to be FALSE.
Also, prcd( (,op ) == FALSE which ensures that an
operator after ( is pushed on the stack.
49
50
51
symb
(
A
+
B
)
*
C
postfix
A
A
AB
AB +
AB +
AB + C
AB + C *
stack
(
(
(+
(+
*
*
52
Evaluating Postfix
Each operator in a postfix expression refers to the
53
Evaluating Postfix
Stack s;
while( not end of input ) {
e = get next element of input
if( e is an operand )
s.push( e );
else {
op2 = s.pop();
op1 = s.pop();
value = result of applying operator e to op1 and op2;
s.push( value );
}
}
finalresult = s.pop();
54
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
op1
op2
value
stack
6
55
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
op1
op2
value
stack
6
6,2
56
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
3
op1
op2
value
stack
6
6,2
6,2,3
57
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
3
+
op1
op2
value
stack
6
6,2
6,2,3
6,5
58
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
3
+
-
op1
op2
value
2
6
3
5
5
1
stack
6
6,2
6,2,3
6,5
1
59
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
3
+
3
op1
op2
value
2
6
6
3
5
5
5
1
1
stack
6
6,2
6,2,3
6,5
1
1,3
60
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
3
+
3
8
op1
op2
value
2
6
6
6
3
5
5
5
5
1
1
1
stack
6
6,2
6,2,3
6,5
1
1,3
1,3,8
61
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
3
+
3
8
2
op1
op2
value
2
6
6
6
6
3
5
5
5
5
5
1
1
1
1
stack
6
6,2
6,2,3
6,5
1
1,3
1,3,8
1,3,8,2
62
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
3
+
3
8
2
/
op1
op2
value
2
6
6
6
6
8
3
5
5
5
5
2
5
1
1
1
1
4
stack
6
6,2
6,2,3
6,5
1
1,3
1,3,8
1,3,8,2
1,3,4
63
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
3
+
3
8
2
/
+
op1
op2
value
2
6
6
6
6
8
3
3
5
5
5
5
2
4
5
1
1
1
1
4
7
stack
6
6,2
6,2,3
6,5
1
1,3
1,3,8
1,3,8,2
1,3,4
1,7
64
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
3
+
3
8
2
/
+
*
op1
op2
value
2
6
6
6
6
8
3
1
3
5
5
5
5
2
4
7
5
1
1
1
1
4
7
7
stack
6
6,2
6,2,3
6,5
1
1,3
1,3,8
1,3,8,2
1,3,4
1,7
7
65
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
3
+
3
8
2
/
+
*
2
op1
op2
value
2
6
6
6
6
8
3
1
1
3
5
5
5
5
2
4
7
7
5
1
1
1
1
4
7
7
7
stack
6
6,2
6,2,3
6,5
1
1,3
1,3,8
1,3,8,2
1,3,4
1,7
7
7,2
66
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
3
+
3
8
2
/
+
*
2
op1
op2
value
2
6
6
6
6
8
3
1
1
7
3
5
5
5
5
2
4
7
7
2
5
1
1
1
1
4
7
7
7
49
stack
6
6,2
6,2,3
6,5
1
1,3
1,3,8
1,3,8,2
1,3,4
1,7
7
7,2
49
67
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
3
+
3
8
2
/
+
*
2
op1
op2
value
2
6
6
6
6
8
3
1
1
7
7
3
5
5
5
5
2
4
7
7
2
2
5
1
1
1
1
4
7
7
7
49
49
stack
6
6,2
6,2,3
6,5
1
1,3
1,3,8
1,3,8,2
1,3,4
1,7
7
7,2
49
49,3
68
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
3
+
3
8
2
/
+
*
2
3
+
op1
op2
value
2
6
6
6
6
8
3
1
1
7
7
49
3
5
5
5
5
2
4
7
7
2
2
3
5
1
1
1
1
4
7
7
7
49
49
52
stack
6
6,2
6,2,3
6,5
1
1,3
1,3,8
1,3,8,2
1,3,4
1,7
7
7,2
49
49,3
52
69
Evaluating Postfix
Evaluate 6 2 3 + - 3 8 2 / + * 2 3 +
Input
6
2
3
+
3
8
2
/
+
*
2
3
+
op1
op2
value
2
6
6
6
6
8
3
1
1
7
7
49
3
5
5
5
5
2
4
7
7
2
2
3
5
1
1
1
1
4
7
7
7
49
49
52
stack
6
6,2
6,2,3
6,5
1
1,3
1,3,8
1,3,8,2
1,3,4
1,7
7
7,2
49
49,3
52
70
End of Lecture