KEMBAR78
The Stack And Recursion | PPTX
The STACK
Unit 3
Simple as it sounds
Fig. stack of items
Ashim Lamichhane 2
Definition
• A stack is an ordered collection of items into which new items
may be inserted and from which items may be deleted at one end,
called the top of the stack.
• Stack is a linear data structure where all the insertions and deletions
are done at end rather than in the middle.
• Stacks are also called Last in First Out (LIFO) lists.
Ashim Lamichhane 3
Intro
• We may come across situations, where insertion or deletion is
required only at one end, either at the beginning or end of the list.
• The suitable data structures to fulfil such requirements are stacks and
queues.
• For ex. a stack of plates, a stack of coins, a stack of books etc.
Ashim Lamichhane 4
Stack as an abstract data type
• A stack of elements of type T is a finite sequence of elements together
with the operations
1. CreateEmptyStack(S): create or make stack S be an empty stack
2. Push(S,x): Insert x at one end of the stack, called its top
3. Top(S): If stack S is not empty; then retrieve the element at its top
4. Pop(S): If stack S is not empty; then delete the element at its top
5. IsFull(S): Determine if S is full or not. Return true if S is full stack; return false
otherwise
6. IsEmpty(S): Determine if S is empty or not. Return true if S is an empty stack;
return false otherwise.
Ashim Lamichhane 5
Ashim Lamichhane 6
Example of Push Pop
Ashim Lamichhane 7
Thing to consider
• Stack underflow happens when
we try to pop (remove) an item from
the stack, when nothing is actually
there to remove.
• Stack overflow happens when we
try to push one more item onto our
stack than it can actually hold.
Ashim Lamichhane 8
Stack As a Linked List
• The stack as linked list is represented as a single linked list.
• Each node in the list contains data and a pointer to the next node.
• The structure defined to represent stack is as follows:
struct node{
int data;
node *next;
};
Fig. Stack as a linked list
Ashim Lamichhane 9
Infix, Postfix and Prefix
• 2+3 <operand><operator><operand>
• A-b
• (P*2)
Operands are basic objects on which operation is performed
INFIX
<operand><operator><operand>
• (2+3) * 4 (2+3) * 4
• (P+Q)*(R+S) (P+Q) * (R+S)
Common expressions
Ashim Lamichhane 10
Infix
• What about 4+6*2and what about 4+6+2
• To clear ambiguity we remember school Mathematics
• Order of precedence
1. Parentheses (Brackets)
2. Order (Exponents)
3. Division
4. Multiplication
5. Addition
6. Subtraction
• So 4+6*2 | 2*6/2 -3 +7 | {(2*6)/2}-(3+7)
=4+12 | = 2*3-3+7 | = ???
=16 | = 6-3+7 | = ??
| = 3+7=10 | = ?
Ashim Lamichhane 11
Prefix (polish notation)
• In prefix notation the operator proceeds the two operands. i.e. the
operator is written before the operands.
<operator><operand><operand>
infix prefix
2+3 +23
p-q -pq
a+b*c +a*bc
Ashim Lamichhane 12
Postfix (Reverse Polish Notation)
• In postfix notation the operators are written after the operands so it is
called the postfix notation (post means after).
<operand><operand><operator>
infix prefix postfix
2+3 +23 23+
p-q -pq pq-
a+b*c +a*bc abc*+
Human-readable Good for machines
Ashim Lamichhane 13
Conversion of Infix to Postfix Expression
• While evaluating an infix expression, there is an evaluation order according to
which the operations are executed
• Brackets or Parentheses
• Exponentiation
• Multiplication or Division
• Addition or Subtraction
• The operators with same priority are evaluated from left to right.
• Eg:
• A+B+C means (A+B)+C
Ashim Lamichhane 14
Evaluation of Prefix and Postfix Expressions
• Suppose an expression
a*b+c*d-e
• We can write this as:
{(a*b)+(c*d)}-e
• As we want to change it into postfix expression
{(ab*)+(cd*)}-e
{(ab*)(cd*)+}-e
{(ab*)(cd*)+} e-
• Final form
ab*cd*+e-
Ashim Lamichhane 15
Evaluation of Postfix Expressions
• Suppose we have a postfix expression
ab*cd*+e-
• And we want to evaluate it so lets say
a=2, b=3,c=5,d=4,e=9
• We can solve this as,
2 3 * 5 4 * + 9 – <operand><operand><operator>
6 5 4 * + 9 –
6 20 + 9 –
26 9 –
17
Ashim Lamichhane 16
Evaluation of Postfix Expressions
• From above we get,
2 3 * 5 4 * + 9 –
Stack
EvaluatePostfix(exp)
{
create a stack S
for i=0 to length (exp) -1
{
if (exp[i] is operand)
PUSH(exp[i])
elseif (exp[i] is operator)
op2 <- pop()
op1 <- pop()
res– Perform(exp[i],op1,op2)
PUSH(res)
}
return top of STACK
}
2
3
Ashim Lamichhane 17
Evaluation of Prefix expressions
• An expression: 2*3 +5*4-9
• Can be written as:
{(2*3)+(5*4)}-9
{(*2 3)+(*5 4)}-9
{+(*2 3) (*5 4)}-9
-{+(*2 3) (*5 4)}9
• We can get Rid of Paranthesis
-+*2 3 *5 4 9
Ashim Lamichhane 18
Evaluation of Prefix expressions
• We have to scan it from right
-+*2 3 *5 4 9
Stack
9
4
5
Stack
9
20
6
Stack
9
26
Stack
17
Ashim Lamichhane 19
Algorithm to convert Infix to Postfix
Ashim Lamichhane 20
Examples:
1. A * B + C becomes A B * C +
NOTE:
• When the '+' is read, it has lower precedence than the '*', so the '*' must be printed first.
Ashim Lamichhane 21
current symbol Opstack Poststack
A A
* * A
B * AB
+ + AB* {pop and print the '*' before pushing the '+'}
C + AB*C
AB*C+
Examples:
2. A * (B + C) becomes A B C + *
NOTE:
• Since expressions in parentheses must be done first, everything on the stack is saved and the left
parenthesis is pushed to provide a marker.
• When the next operator is read, the stack is treated as though it were empty and the new operator
(here the '+' sign) is pushed on.
• Then when the right parenthesis is read, the stack is popped until the corresponding left parenthesis is
found.
• Since postfix expressions have no parentheses, the parentheses are not printed.
Ashim Lamichhane 22
current symbol Opstack Poststack
A A
* * A
( *( A
B *( AB
+ *(+ AB
C *(+ ABC
) * ABC+
ABC+*
Ashim Lamichhane 23
Classwork
• A - B + C
• A * B ^ C + D
• A * (B + C * D) + E
Ashim Lamichhane 24
References
• For Code Check Github
• For Assignment Check Github
Ashim Lamichhane 25
Recursion
• Recursion is a process by which a function calls itself repeatedly, until
some specified condition has been satisfied
• The process is used for repetitive computations in which each action is
stated in terms of a previous result.
• To solve a problem recursively, two conditions must be satisfied.
• First, the problem must be written in a recursive form
• Second the problem statement must include a stopping condition
Ashim Lamichhane 26
Factorial of an integer number using recursive function
void main(){
int n;
long int facto;
scanf(ā€œ%dā€,&n);
facto=factorial(n);
printf(ā€œ%d!=%ldā€,n,facto);
}
long int factorial(int n){
if(n==0){
return 1;
}else{
return n*factorial(n-1);
}
Factorial(5)=
5*Factorial(4)=
5*(4*Factorial(3))=
5*(4*(3*Factorial(2)))=
5*(4*(3*(2*Factorial(1))))=
5*(4*(3*(2*(1*Factorial(0)))))=
5*(4*(3*(2*(1*1))))= 5*(4*(3*(2*1)))=
5*(4*(3*2))= 5*(4*6)= 5*24=
120
Ashim Lamichhane 27
Recursion Pros and Cons
• Pros
• The code may be much easier to write.
• To solve some problems which are naturally recursive such as tower of Hanoi.
• Cons
• Recursive functions are generally slower than non-recursive functions.
• May require a lot of memory to hold intermediate results on the system stack.
• It is difficult to think recursively so one must be very careful when writing
recursive functions.
Ashim Lamichhane 28
Tower of Hanoi Problem
Ashim Lamichhane 29
Tower of Hanoi Problem
• The mission is to move all the disks to some another tower without
violating the sequence of arrangement.
• The below mentioned are few rules which are to be followed for tower
of hanoi āˆ’
• Only one disk can be moved among the towers at any given time.
• Only the "top" disk can be removed.
• No large disk can sit over a small disk.
Ashim Lamichhane 30
A recursive algorithm for Tower of Hanoi can be driven as follows āˆ’
Ashim Lamichhane 31
THE END
Ashim Lamichhane 32

The Stack And Recursion

  • 1.
  • 2.
    Simple as itsounds Fig. stack of items Ashim Lamichhane 2
  • 3.
    Definition • A stackis an ordered collection of items into which new items may be inserted and from which items may be deleted at one end, called the top of the stack. • Stack is a linear data structure where all the insertions and deletions are done at end rather than in the middle. • Stacks are also called Last in First Out (LIFO) lists. Ashim Lamichhane 3
  • 4.
    Intro • We maycome across situations, where insertion or deletion is required only at one end, either at the beginning or end of the list. • The suitable data structures to fulfil such requirements are stacks and queues. • For ex. a stack of plates, a stack of coins, a stack of books etc. Ashim Lamichhane 4
  • 5.
    Stack as anabstract data type • A stack of elements of type T is a finite sequence of elements together with the operations 1. CreateEmptyStack(S): create or make stack S be an empty stack 2. Push(S,x): Insert x at one end of the stack, called its top 3. Top(S): If stack S is not empty; then retrieve the element at its top 4. Pop(S): If stack S is not empty; then delete the element at its top 5. IsFull(S): Determine if S is full or not. Return true if S is full stack; return false otherwise 6. IsEmpty(S): Determine if S is empty or not. Return true if S is an empty stack; return false otherwise. Ashim Lamichhane 5
  • 6.
  • 7.
    Example of PushPop Ashim Lamichhane 7
  • 8.
    Thing to consider •Stack underflow happens when we try to pop (remove) an item from the stack, when nothing is actually there to remove. • Stack overflow happens when we try to push one more item onto our stack than it can actually hold. Ashim Lamichhane 8
  • 9.
    Stack As aLinked List • The stack as linked list is represented as a single linked list. • Each node in the list contains data and a pointer to the next node. • The structure defined to represent stack is as follows: struct node{ int data; node *next; }; Fig. Stack as a linked list Ashim Lamichhane 9
  • 10.
    Infix, Postfix andPrefix • 2+3 <operand><operator><operand> • A-b • (P*2) Operands are basic objects on which operation is performed INFIX <operand><operator><operand> • (2+3) * 4 (2+3) * 4 • (P+Q)*(R+S) (P+Q) * (R+S) Common expressions Ashim Lamichhane 10
  • 11.
    Infix • What about4+6*2and what about 4+6+2 • To clear ambiguity we remember school Mathematics • Order of precedence 1. Parentheses (Brackets) 2. Order (Exponents) 3. Division 4. Multiplication 5. Addition 6. Subtraction • So 4+6*2 | 2*6/2 -3 +7 | {(2*6)/2}-(3+7) =4+12 | = 2*3-3+7 | = ??? =16 | = 6-3+7 | = ?? | = 3+7=10 | = ? Ashim Lamichhane 11
  • 12.
    Prefix (polish notation) •In prefix notation the operator proceeds the two operands. i.e. the operator is written before the operands. <operator><operand><operand> infix prefix 2+3 +23 p-q -pq a+b*c +a*bc Ashim Lamichhane 12
  • 13.
    Postfix (Reverse PolishNotation) • In postfix notation the operators are written after the operands so it is called the postfix notation (post means after). <operand><operand><operator> infix prefix postfix 2+3 +23 23+ p-q -pq pq- a+b*c +a*bc abc*+ Human-readable Good for machines Ashim Lamichhane 13
  • 14.
    Conversion of Infixto Postfix Expression • While evaluating an infix expression, there is an evaluation order according to which the operations are executed • Brackets or Parentheses • Exponentiation • Multiplication or Division • Addition or Subtraction • The operators with same priority are evaluated from left to right. • Eg: • A+B+C means (A+B)+C Ashim Lamichhane 14
  • 15.
    Evaluation of Prefixand Postfix Expressions • Suppose an expression a*b+c*d-e • We can write this as: {(a*b)+(c*d)}-e • As we want to change it into postfix expression {(ab*)+(cd*)}-e {(ab*)(cd*)+}-e {(ab*)(cd*)+} e- • Final form ab*cd*+e- Ashim Lamichhane 15
  • 16.
    Evaluation of PostfixExpressions • Suppose we have a postfix expression ab*cd*+e- • And we want to evaluate it so lets say a=2, b=3,c=5,d=4,e=9 • We can solve this as, 2 3 * 5 4 * + 9 – <operand><operand><operator> 6 5 4 * + 9 – 6 20 + 9 – 26 9 – 17 Ashim Lamichhane 16
  • 17.
    Evaluation of PostfixExpressions • From above we get, 2 3 * 5 4 * + 9 – Stack EvaluatePostfix(exp) { create a stack S for i=0 to length (exp) -1 { if (exp[i] is operand) PUSH(exp[i]) elseif (exp[i] is operator) op2 <- pop() op1 <- pop() res– Perform(exp[i],op1,op2) PUSH(res) } return top of STACK } 2 3 Ashim Lamichhane 17
  • 18.
    Evaluation of Prefixexpressions • An expression: 2*3 +5*4-9 • Can be written as: {(2*3)+(5*4)}-9 {(*2 3)+(*5 4)}-9 {+(*2 3) (*5 4)}-9 -{+(*2 3) (*5 4)}9 • We can get Rid of Paranthesis -+*2 3 *5 4 9 Ashim Lamichhane 18
  • 19.
    Evaluation of Prefixexpressions • We have to scan it from right -+*2 3 *5 4 9 Stack 9 4 5 Stack 9 20 6 Stack 9 26 Stack 17 Ashim Lamichhane 19
  • 20.
    Algorithm to convertInfix to Postfix Ashim Lamichhane 20
  • 21.
    Examples: 1. A *B + C becomes A B * C + NOTE: • When the '+' is read, it has lower precedence than the '*', so the '*' must be printed first. Ashim Lamichhane 21 current symbol Opstack Poststack A A * * A B * AB + + AB* {pop and print the '*' before pushing the '+'} C + AB*C AB*C+
  • 22.
    Examples: 2. A *(B + C) becomes A B C + * NOTE: • Since expressions in parentheses must be done first, everything on the stack is saved and the left parenthesis is pushed to provide a marker. • When the next operator is read, the stack is treated as though it were empty and the new operator (here the '+' sign) is pushed on. • Then when the right parenthesis is read, the stack is popped until the corresponding left parenthesis is found. • Since postfix expressions have no parentheses, the parentheses are not printed. Ashim Lamichhane 22 current symbol Opstack Poststack A A * * A ( *( A B *( AB + *(+ AB C *(+ ABC ) * ABC+ ABC+*
  • 23.
  • 24.
    Classwork • A -B + C • A * B ^ C + D • A * (B + C * D) + E Ashim Lamichhane 24
  • 25.
    References • For CodeCheck Github • For Assignment Check Github Ashim Lamichhane 25
  • 26.
    Recursion • Recursion isa process by which a function calls itself repeatedly, until some specified condition has been satisfied • The process is used for repetitive computations in which each action is stated in terms of a previous result. • To solve a problem recursively, two conditions must be satisfied. • First, the problem must be written in a recursive form • Second the problem statement must include a stopping condition Ashim Lamichhane 26
  • 27.
    Factorial of aninteger number using recursive function void main(){ int n; long int facto; scanf(ā€œ%dā€,&n); facto=factorial(n); printf(ā€œ%d!=%ldā€,n,facto); } long int factorial(int n){ if(n==0){ return 1; }else{ return n*factorial(n-1); } Factorial(5)= 5*Factorial(4)= 5*(4*Factorial(3))= 5*(4*(3*Factorial(2)))= 5*(4*(3*(2*Factorial(1))))= 5*(4*(3*(2*(1*Factorial(0)))))= 5*(4*(3*(2*(1*1))))= 5*(4*(3*(2*1)))= 5*(4*(3*2))= 5*(4*6)= 5*24= 120 Ashim Lamichhane 27
  • 28.
    Recursion Pros andCons • Pros • The code may be much easier to write. • To solve some problems which are naturally recursive such as tower of Hanoi. • Cons • Recursive functions are generally slower than non-recursive functions. • May require a lot of memory to hold intermediate results on the system stack. • It is difficult to think recursively so one must be very careful when writing recursive functions. Ashim Lamichhane 28
  • 29.
    Tower of HanoiProblem Ashim Lamichhane 29
  • 30.
    Tower of HanoiProblem • The mission is to move all the disks to some another tower without violating the sequence of arrangement. • The below mentioned are few rules which are to be followed for tower of hanoi āˆ’ • Only one disk can be moved among the towers at any given time. • Only the "top" disk can be removed. • No large disk can sit over a small disk. Ashim Lamichhane 30
  • 31.
    A recursive algorithmfor Tower of Hanoi can be driven as follows āˆ’ Ashim Lamichhane 31
  • 32.