0% found this document useful (0 votes)
104 views

Data Structures & Algorithms: Lecture # 3

The document discusses stacks and their implementation and applications. It begins by describing what stacks are, how they are represented, and basic operations like push and pop. It then covers stack applications like function calls and reversing data. Key aspects of stacks like LIFO behavior and terminology are explained. The document provides pseudocode for reversing a string using a stack. It also discusses evaluating expressions using stacks, including infix to postfix conversion. Implementation of stacks using arrays is described along with algorithms for basic stack operations.

Uploaded by

Vicky Butt
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
104 views

Data Structures & Algorithms: Lecture # 3

The document discusses stacks and their implementation and applications. It begins by describing what stacks are, how they are represented, and basic operations like push and pop. It then covers stack applications like function calls and reversing data. Key aspects of stacks like LIFO behavior and terminology are explained. The document provides pseudocode for reversing a string using a stack. It also discusses evaluating expressions using stacks, including infix to postfix conversion. Implementation of stacks using arrays is described along with algorithms for basic stack operations.

Uploaded by

Vicky Butt
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 54

Data Structures & Algorithms

Lecture # 3
Today Topics
 What are Stacks?

 Representation of Stacks

 Operations on Stacks
 Push
 Pop

 Evaluation of Expressions

 Infix to Postfix Conversion


Stack application
 Function calls
 Reversing Data: We can use stacks to reverse data.
(example: files, strings)
Very useful for finding palindromes.
Consider the following pseudocode:
1) read (data)
2) loop (data not EOF and stack not full)
1) push (data)
2) read (data)
3) Loop (while stack notEmpty)
1) pop (data)
2) print (data)
Stack application
What are Stacks?
 In array insertion and deletion can take place at
both end, i.e. start and end,
 But if insertion and deletion are restricted from one
end, must used STACKS , QUEUES.

Stack can be defined as:

 A stack is a linear data structure which can


be accessed only at one of its ends for
storing and retrieving data. OR
 In which item may b inserted or deleted only at one
end called top of the stack.
 There are two ways of implementing a stack:
 Array (Static)
 Link List (Dynamic)
Example of Stack
 A common model of a
stack is a plate or coin
stacker. Plates are
"pushed “onto to the top
and "popped" off from the
top.

 Stacks form Last-In-First-


Out (LIFO) queues.
Stack terminology

“Top”: end where insertion and


deletion take place
“Push”: is the term used to insert an
element into an array

“Pop”: is the term used to delete an


element from a stack.
Basic operations of a Stack
New Push

?
Pop Peek

Empty ?
Array implementation of Stacks

 A stack can be implemented with an array


and an integer.

 A pointer variable TOP which contains the


location of the top element of the stack;
 Variable MAXSTK which gives the maximum
number of elements that can be held by the
stack.
 Condition TOP=0, or MAXSTK=NULL
indicate that the stack is empty.
Stack implemented in an array
 Note that all operations need check array
bounds
 Pushing onto a full stack: Overflow
 When TOP=MAXSTK
 Popping an empty stack: Underflow
 TOP=NULL
Operations on Stack
 A stack is generally implemented with only two
principle operations (apart from a constructor
and destructor methods):

 initializeStack: initializes the stack to an empty state


 destroyStack: Removing all the element 4m the stack
 Is EmpthyStack: check whether stack is empty or
not, and return true or false.
 IsFullStack: returns true if full else false.
 Top: returns the top elements of the stack;
 Push: adds an item to a stack
 Pop: extracts the most recently pushed item from the
stack
How the stack routines work
empty stack; push(a), push(b); pop

a a a

empty stack push(a) push(b) pop()


top = 0 top = 1 top = 2 top = 1
Implementation of the operation
 Initialize Stack:
 Destroy Stack:
 EmpthyStack:
 Full Stack:
 Top: returns the top elements of the stack;
 Push: tow step process, adding and
incrementing the top pointer.
 Pop: extracts the most recently pushed item
from the stack
Algorithms of Push Operation
Push (STACK , TOP, MAXST, ITEM)
Algorithm for push element into the Stack

1. [stack already filled]


If TOP= MAXSTK, then: print: “OVERFLOW”,
and return.
2. [increases TOP by 1] Set TOP:= TOP + 1
3. [insert ITEM in new TOP position ]
Set STACK[TOP]: =ITEM
4. RETRUN
Algorithms of Pop Operation
Pop (STACK, TOP, ITEM)
Algorithm for pop element from the Stack
1. [Stack has an item to be removed]
If TOP= NUL, then
Print: “UNDERFLOW” and return
2. [assign TOP element to ITEM]
Set ITEM := STACK[TOP]
3. [Decrease TOP by 1]
Set TOP:= TOP -1
4. Return
Algorithm for Display Stack
elements
Display_Stack ()
Algorithm for display stack elements
1. Start
2. Repeat step 3 For i = 1 to TOP by 1
3. Print S[i]
4. End
Algorithm for isempty Stack
isempty ()
Algorithm for return the Stack status
1. Start
2. if TOP = 0 then
Return True
else
Return False
3. End
Algorithm for return the top of
stack value
top ()
Algorithm for return the top of Stack
value
1. Start
2. Return TOP
3. End
Evaluation of Expression
 Arithmetic expression is made up
 Operands (Numeric Variables or
Constants)
 Arithmetic Operators (+, -, *, /)
 Power Operator (^)
 Parentheses

 The Expression is always evaluated


from left to right
Evaluation of Expression
 Order in which the expression is evaluated is:

 If the expression has parenthesis, then they are


evaluated first

 Exponential (^) is given highest priority

 Multiplication (*) and division (/) have the next


highest priority

 Addition (+) and subtraction (-) have the lowest


priority
Evaluation of Expression
 Steps to evaluate the following expression:

 (2^3 + 6) * 2 – 9 / 3

 = (8 + 6) * 2 – 9 / 3

 = 14 * 2 – 9 / 3

 = 28 – 3

 = 25
Infix, Prefix (Polish) and Postfix
(Reverse Polish) Notation
Infix Prefix Postfix
(Polish Notation) (Reverse Polish
Notation)
A+B +AB AB+

A*B *AB AB*

A/B /AB AB/

A-B -AB AB-


Evaluation of Expression
 Computer evaluates an expression given in infix notation by
converting it into postfix notation.

 Stack is used to perform this operation

 Following steps are take to evaluate a postfix expression:

 Expression is scanned from left to right until the end of the expression

 When an operand is encountered, it is pushed into stack

 When an operator is encountered, then


 Top two operands of stack are removed
 Arithmetic operation is performed
 Computed result is pushed back to the stack

 When end of the expression is reached, the top value from the stack is
picked. It is the computed value of the expression
Infix to Postfix Conversion
 Stack is used to convert an infix expression to postfix.

 Stack is used to store operators and operands and then pass to


the postfix expression according to their precedence.

 Infix expression is converted into postfix expression according to


the following rules:

 Infix expression is scanned from left to right until end of the


expression.

 Operands are passed directly to the output.

 Operators are first passed to the stacks.

 Operand is encountered, it is added to the output.


Infix to Postfix Conversion
 Each time an operator is read, the stack is repeatedly
popped and operands are passed to the output, until an
operator is reached that has a lower precedence than the
most recently read operator. The most recently read
operator is then pushed onto the stack.

 When end of the infix expression is reached, all operators


remaining in the stack are popped and passed to the
output in the same sequence.

 Parentheses can be used in the infix expression but these


are not used in the postfix expression.

 During conversion process, parentheses are treated as


operators that have higher precedence than any other
operator.
Infix to Postfix Conversion
 Left parenthesis is pushed into the stack, when
encountered.

 Right parenthesis is never pushed to the stack.

 Left parenthesis is popped only when right


parenthesis is encountered.

 The parentheses are not passed to the output postfix


expressions. They are discarded.

 When end of expression is reached, then all


operators from stack are popped and added to the
output.
Example (Infix to Postfix
Conversion)
Convert infix expression A+B*C+
(D*E+F)*G into postfix

A+B*C+(D*E+F)*G

1. Scanned from left to right. First


operand read is A and passed to
output

Stack

Output: A
Example (Infix to Postfix
Conversion)
A+B*C+(D*E+F)*G

2. Next the ‘+’ operator is read, at


this stage, stack is empty.
Therefore no operators are
popped and ‘+’ is pushed into the
stack. Thus the stack and output
will be:

Stack

Output: A
Example (Infix to Postfix
Conversion)
A+B*C+(D*E+F)*G

3. Next the ‘B’ operand is read and


passed to the output. Thus the
stack and output will be:

Stack

Output: AB
Example (Infix to Postfix
Conversion)
A+B*C+(D*E+F)*G

4. Next the ‘*’ operator is read, The


stack has ‘+’ operator which has
lower precedence than the ‘*’
operator. Therefore no operators
are popped and ‘*’ is pushed into
the stack. Thus the stack and
output will be:
*
+

Stack

Output: AB
Example (Infix to Postfix
Conversion)
A+B*C+(D*E+F)*G

5. Next the ‘C’ operand is read and


passed to the output. Thus the
stack and output will be:

*
+

Stack

Output: ABC
Example (Infix to Postfix
Conversion)
A+B*C+(D*E+F)*G

6. Next the ‘+’ operator is read, The


stack has ‘*’ operator which has
higher precedence than the ‘+’
operator. The Stack is popped and
passed to output. Next stack has
‘+’ operator which has same
precedence than the ‘+’ operator.
The Stack is popped and passed to
output. Now stack is empty,
therefore no operators are popped
and ‘+’ is pushed into the stack. +
Thus the stack and output will be:
Stack

Output: ABC*+
Example (Infix to Postfix
Conversion)
A+B*C+(D*E+F)*G

7. Next the left parenthesis ‘(’ is


read, Since all operators have
lower precedence than the left
parenthesis, it is pushed into the
stack. Thus the stack and output
will be:

(
+

Stack

Output: ABC*+
Example (Infix to Postfix
Conversion)
A+B*C+(D*E+F)*G

8. Next the ‘D’ operand is read and


passed to the output. Thus the
stack and output will be:

(
+

Stack

Output: ABC*+D
Example (Infix to Postfix
Conversion)
A+B*C+(D*E+F)*G

9. Next the ‘*’ operator is read.


Now, left parenthesis ‘(‘ has
higher precedence than ‘*’; it can
not be popped from the stack
until a right parenthesis ‘)’ has
been read. Thus the stack is not
popped and ‘*’ is pushed into the *
stack. Thus the stack and output
will be: (
+

Stack

Output: ABC*+D
Example (Infix to Postfix
Conversion)
A+B*C+(D*E+F)*G

10. Next the ‘E’ operand is read and


passed to the output. Thus the
stack and output will be:

*
(
+

Stack

Output: ABC*+DE
Example (Infix to Postfix
Conversion)
A+B*C+(D*E+F)*G

11. Next the ‘+’ operator is read, The


stack has ‘*’ operator which has
higher precedence than the ‘+’
operator. The Stack is popped
and passed to output. Next stack
has left parenthesis ‘(’ which has
not been popped and ‘+’ operator +
is pushed into the stack. Thus the
stack and output will be: (
+

Stack

Output: AB*+DE*
Example (Infix to Postfix
Conversion)
A+B*C+(D*E+F)*G

12. Next the ‘F’ operand is read and


passed to the output. Thus the
stack and output will be:

+
(
+

Stack

Output: ABC*+DE*F
Example (Infix to Postfix
Conversion)
A+B*C+(D*E+F)*G

14. Next the ‘*’ operator is read, The


stack has ‘+’ operator which has
lower precedence than the ‘*’
operator. Therefore no operators
are popped and ‘*’ is pushed into
the stack. Thus the stack and
output will be:
*
+

Stack

Output: ABC*+DE*F+
Example (Infix to Postfix
Conversion)
A+B*C+(D*E+F)*G

15. Next the ‘G’ operand is read and


passed to the output. Thus the
stack and output will be:

*
+

Stack

Output: ABC*+DE*F+G
Example (Infix to Postfix
Conversion)
A+B*C+(D*E+F)*G

16. The end of expression is


encountered. The operators are
popped from the stacked and
passed to the output in the same
sequence in which these are
popped. Thus the stack and
output will be:

Stack

Output: ABC*+DE*F+G*+
Example (Evaluation of Expression)
Postfix Expression

ABC*+DE*F+G*+

A=5, B=6, C=9, D=2, E=4, F=8, G=3

2. Scanned from left to right. In first,


second and third iteration, the value
of A, B and C are pushed into the
stack. Thus the stack will be: 9
6
5

Stack
Example (Evaluation of Expression)
Postfix Expression

ABC*+DE*F+G*+

A=5, B=6, C=9, D=2, E=4, F=8, G=3

2. In fourth iteration, the operator ‘*’ is


read. So the two values ‘9’ and ‘6’
are popped from the stack and
multiplication is perform. i.e 9*6=54.
The computed value pushed back to 54
the stack. Thus the stack will be:
5

Stack
Example (Evaluation of Expression)
Postfix Expression

ABC*+DE*F+G*+

A=5, B=6, C=9, D=2, E=4, F=8, G=3

3. In fifth iteration, the operator ‘+’ is


read. So the two values ‘54’ and ‘5’
are popped from the stack and
addition is perform. i.e 54+5=59.
The computed value pushed back to
the stack. Thus the stack will be:
59

Stack
Example (Evaluation of Expression)
Postfix Expression

ABC*+DE*F+G*+

A=5, B=6, C=9, D=2, E=4, F=8, G=3

4. In sixth and seventh iteration, the


value of D and E are pushed into the
stack. Thus the stack will be:
4
2
59

Stack
Example (Evaluation of Expression)
Postfix Expression

ABC*+DE*F+G*+

A=5, B=6, C=9, D=2, E=4, F=8, G=3

5. In eighth iteration, the operator ‘*’ is


read. So the two values ‘4’ and ‘2’
are popped from the stack and
multiplication is perform. i.e 2*4=8.
The computed value pushed back to 8
the stack. Thus the stack will be:
59

Stack
Example (Evaluation of Expression)
Postfix Expression

ABC*+DE*F+G*+

A=5, B=6, C=9, D=2, E=4, F=8, G=3

6. In ninth iteration, the value of F is


pushed into the stack. Thus the stack
will be:
8
8
59

Stack
Example (Evaluation of Expression)
Postfix Expression

ABC*+DE*F+G*+

A=5, B=6, C=9, D=2, E=4, F=8, G=3

7. In tenth iteration, the operator ‘+’ is


read. So the two values ‘8’ and ‘8’
are popped from the stack and
addition is perform. i.e 8+8=16. The
computed value pushed back to the 16
stack. Thus the stack will be:
59

Stack
Example (Evaluation of Expression)
Postfix Expression

ABC*+DE*F+G*+

A=5, B=6, C=9, D=2, E=4, F=8, G=3

8. In eleventh iteration, the value of G


is pushed into the stack. Thus the
stack will be:
3
16
59

Stack
Example (Evaluation of Expression)
Postfix Expression

ABC*+DE*F+G*+

A=5, B=6, C=9, D=2, E=4, F=8, G=3

9. In twelve iteration, the operator ‘*’ is


read. So the two values ‘3’ and ‘16’
are popped from the stack and
multiplication is perform. i.e
3*16=48. The computed value 48
pushed back to the stack. Thus the
stack will be: 59

Stack
Example (Evaluation of Expression)
Postfix Expression

ABC*+DE*F+G*+

A=5, B=6, C=9, D=2, E=4, F=8, G=3

10. In thirteen iteration, the operator ‘+’


is read. So the two values ‘48’ and
‘59’ are popped from the stack and
addition is perform. i.e 48+59=107.
The computed value pushed back to
the stack. Thus the stack will be:
107

Stack
Example (Evaluation of Expression)

A+B*C+(D*E+F)*G

A=5, B=6, C=9, D=2, E=4, F=8, G=3

= 5 + 6 * 9 + (2 * 4 + 8) * 3

= 5 + 54 + (8 + 8) * 3

= 59 + 16 * 3

= 59 + 48

=107
Next Lecture
 What are Queues?

 Representation of Queues

 Operations on Queues
 QInsert
 QDelete
References

 Structures: A Pseudocode Apporoach with C. Gilberg, Richard


F., Forouzan, Data Behrouz A.. PWS Publishing Company:
1998

You might also like