Data Structures & Algorithms: Stacks
Data Structures & Algorithms: Stacks
Data Structures & Algorithms: Stacks
STACKS:
Basic operations:
These are two basic operations associated with stack:
Push() is the term used to insert/add an element into a stack.
Pop() is the term used to delete/remove an element from a stack.
Other names for stacks are piles and push-down lists.
There are two ways to represent Stack in memory. One is using array and other is
using linked list.
STACK
Data 1 Data 2 Data 3
0 1 2 3 4 5 6 7 8
TOP 2 STACKSIZE 9
Push Operation
Push an item onto the top of the stack (insert an item)
Pop Operation
INFIX,POSTFIXANDPREFIXNOTATIONS
In f ix , P o s tf ix a n d P r e f ix n o ta tio n s a r e u s e d in m a n y c a lc u la to r s .
T h e e a s ie s t w a y to im p le m e n t th e
P o s tf ix a n d P r e f ix o p e ra tio n s is tou s e s ta c k . In f ix a n d p r e f ix n o ta tio n s c a nb e c o n v e r te d to p o s tfix
n o ta tio n u s in g s ta c k .
T h e r e a s o n w h y p o s tf ix n o ta tio n isp r e f e r r e d is th a t y o u d o n ’t n e e d a n y p a re n th e s is a n d th e r e is n o
p r e s c ie n c e p r o b le m .
Stacks are used by compilers to help in the process of converting infix to postfix
arithmetic expressions and also evaluating arithmetic expressions. Arithmetic
expressions consisting variables, constants, arithmetic operators and parentheses.
Humans generally write expressions in which the operator is written between the
operands (3 + 4, for example). This is called infix notation. Computers “prefer”
postfix notation in which the operator is written to the right of two operands. The
preceding infix expression would appear in postfix notation as 3 4 +.
To evaluate a complex infix expression, a compiler would first convert the expression
to postfix notation, and then evaluate the postfix version of the expression. We use
the following three levels of precedence for the five binary operations.
For example:
(66 + 2) * 5 – 567 /
42 to postfix
66 22 + 5 * 567 42 / –
Algorithm: Infix_to_PostFix(Q, P)
Suppose Q is an arithmetic expression written in infix notation. This algorithm finds the equivalent postfix expression P.
Push “(“ onto STACK, and add “)” to the end of Q.
Scan Q from left to right and repeat Steps 3 to 6 for each element of Q until the STACK is empty:
If an operand is encountered, add it to P.
If a left parenthesis is encountered, push it onto STACK.
If an operator © is encountered, then:
Repeatedly pop from STACK and add to P each operator (on the top of STACK) which has the same or
higher precedence/priority than ©
Add © to STACK. [End of If structure.]
If a right parenthesis is encountered, then:
Repeatedly pop from STACK and add to P each operator (on the top of STACK) until a left parenthesis is encountered.
Remove the left parenthesis. [Do not add the left parenthesis to P.]
[End of If structure.] [End of Step 2
loop.] 7. Exit.
For example:
Following is an infix arithmetic expression
(5 + 2) * 3 – 9 / 3
And its postfix is:
5 2 + 3 * 9 3 / –
Now add “$” at the end of expression as a sentinel.
5 2 + 3 * 8 4 / –
Scanned Elements Stack $ Action to _
do
5 5 Pushed on stack
2 5, 2 Pushed on Stack
3 7, 3 Pushed on Stack