Linear Data Structures

 Stack
Topics Covered in This Lecture
• Applications of stack
  – Reversing the string
  – Balancing symbols
  – Postfix expression evaluation
  – Translating infix expression to postfix expression
Applications of Stack
• Reversing the string

  – push each character on to a stack as it is read.

  – When the line is finished, we then pop characters off the
    stack, and they will come off in the reverse order.
Applications of Stack
Reversing the string
void ReverseRead(void)
{ //using static Stack class of Lecture#3
  Stack<char> stack;//The Stack ‘stack’ is created
  char item;
  cin>>item;
  while (!stack.isFull()&&item!='$')//type in $ from keyboard to stop input
  {      stack.push(item); // push each character onto the stack
         cin>>item;
  }
  while(!stack.isEmpty() )
  {      item=stack.pop ();//Pop an element from stack
          cout<<item;
  }
}
Applications of Stack
•    Balancing Symbols
     Compilers use a program that checks whether every symbol (like braces,
     parenthesis, brackets, etc) in a program is balanced.
         The simple algorithm for this purpose is:
1.   Make an empty stack.
2.   Read the characters until end of file.
3.   If the character is an open any thing, push it onto the stack.
4.   If it is a close any thing, then
        if the stack is empty report an error.
        Otherwise Pop the Stack.
        If the popped symbol is not the corresponding opening symbol, then
        report an error.
5.   At the end of the file, if the stack is not empty report an error.
Polish Notation

a–b/c+d*e

Precedence?

1.   b/c
2.   d*e
3.   a – a1      /a1 = b/c /
4.   t2 + a2    / t2 = a – b/c /   /a2 = d*e/
Infix, Suffix, Prefix
Infix = a * b + c
((a*b) +c)
Priority:
1. a * b
2. a1 + c / a1 = a * b /
Prefix =
* a b , +a1 c
+*abc
Suffix =
ab* , a1c+
ab*c+
Infix, Suffix, Prefix
infix = a- b * c / d + e / f
suffix =a – bc* / d + e / f
       a – bc*d/ + e / f
       a – bc*d/ + ef/
       abc*d/- + ef/
       abc*d/-ef/+
prefix =a - *bc / d + e / f
       a - /*bcd + e / f
       a - /*bcd + /ef
       -a/*bcd + /ef
       +-a/*bcd/ef
Infix, Suffix, Prefix
Infix:
  a+b*c–d/f+e
Suffix:
  abc*+df/-e+
Prefix:
  +-+a*bc/dfe
Applications of Stack
         Postfix Expression Evaluation

     –     When a number is seen, it is pushed onto the stack

     –     When an operator is seen, then pop two elements from
           stack and push the result onto the stack.
         Now we evaluate the following postfix expression.
         6523+8*+3+*                                       3

1.   The first four are placed on the stack. The resulting stack is    2
                                                                       5
                                                                       6
                                                                      stack
Applications of Stack
•        evaluating the following postfix
         expression.
                                   3
         6523+8*+3+*               2
                                                    5
                                                    6
                                                  stack
    2.   Next a + is read, so 3 and 2 are popped from the stack and their sum 5 is
         pushed.                                                                   5
                                                                                  5
                                                                                  6
                                                                                stack
Applications of Stack
•    evaluating the following postfix
     expression.
     6523+8*+3+*                5
                                   5
                                   6
                                  stack
                                           8
3.   Next 8 is read and pushed.
                                           5
                                           5
                                           6
                                          stack
Applications of Stack
•    evaluating the following postfix
     expression.
                              8
     6523+8*+3+*              5
                                               5
                                               6
                                             stack
4.   Next a * is seen so 8 and 5 are popped as 8 * 5 = 40 is pushed
                                                                       40
                                                                        5
                                                                        6
                                                                      stack
Applications of Stack
•    evaluating the following postfix
     expression.
     6523+8*+3+*              40
                                              5
                                              6
                                            stack
5.   Next a + is read so 40 and 5 are popped and 40 + 5 = 45 is pushed.


                                                                          45
                                                                           6
                                                                          stack
Applications of Stack
•    evaluating the following postfix
     expression.
     6523+8*+3+*
                            45
                             6
                            stack
6.   Now 3 is pushed
                                        3
                                        45
                                        6
                                    stack
Applications of Stack
•    evaluating the following postfix
     expression.
     6523+8*+3+*                  3
                                                    45
                                                    6
                                                  stack
7.   Next symbol is + so pops 3 and 45 and pushes 45 + 3 = 48, so push 48 in stack.


                                                                         48
                                                                         6
                                                                       stack
Applications of Stack
•    evaluating the following postfix
     expression.
     6523+8*+3+*              48
                                                 6
                                               stack
7.   Finally a * is seen and 48 and 6 are popped, the result 6 * 48 = 288 is pushed.

8.   As there is no input, so pop the stack and we get the result.


                                                                                 288
                                                                               stack
Applications of Stack
•       Translating infix expressions to postfix expression
    –      When an operand is read, it is immediately placed onto the output.
    –      When an operator or left parenthesis comes then save it in the stack
           initially stack is empty.
    –      If we see a right parenthesis, then we pop the stack, writing symbols
           until we encounter a (corresponding) left parenthesis, which is
           popped but not output.
    –      If we see any other symbol (‘+’, ‘*’, ‘(‘, etc) then we pop entries form
           the stack until we find an entry of lower priority. One exception is
           that we never remove a ‘(‘ from the stack except when processing a
           ‘)’.

    –      When the popping is done, we push the operand onto the stack.

    –      Finally, if we read the end of input, we pop the stack until it is empty,
           writing symbols onto the output.
Applications of Stack
•     Translating infix expressions to postfix expression
Convert the following infix expression to postfix expression.
a+b*c+(d*e+f)*g

1.   First the symbol a is read, so it is passed through to the output a

2.   Then + is read and pushed onto the stack.                             output
                                                             +
                                                           stack
3.   Next b is read and passed through to the output.      ab
                                                             output             *
4.   Next a * is read. The top entry on the operator stack has lower            +
     precedence than *, so nothing is output and * is put on the .
                                                                              stack
Applications of Stack
Converting the following infix expression to postfix
    expression.
a+b*c+(d*e+f)*g
5. Next, c is read and output.    abc
                                    output
6.   The next symbol is a +. Checking the stack, we find that priority of stack top
     symbol * is higher than + . So we pop a * and place it on the output, Pop the
     other +, which is not of lower but equal priority, and then push +.

              *           abc*+
                                                        +
              +             output
           stack                                      stack
Applications of Stack
Converting the following infix expression to postfix
    expression.
a+b*c+(d*e+f)*g
 7.   The next symbol read is an ‘(‘, which, being of highest precedence, is placed on
      the stack.
                            (
                           +
                         stack
 8.   Then d is read and output.          abc*+d
                                            output
Applications of Stack
Converting the following infix expression to postfix
    expression.
a+b*c+(d*e+f)*g
9.   We continue by reading a *. Since open parenthesis do not get removed except
     when a closed parenthesis is being processed, there is no output and we push *
     in stack
                                      *
                                     (
                                     +
                                   stack
10. Next, e is read and output.
                                     abc*+de
                                       output
Applications of Stack
Converting the following infix expression to postfix
    expression.
a+b*c+(d*e+f)*g
11. The next symbol read is a +, since priority of stack top value is higher so we pop
    * and push +.

                        +               abc*+de*
                        (                 output
                        +
                      stack
12. Now we read f and output f.
                                      abc*+de*f
                                        output
Applications of Stack
Converting the following infix expression to postfix
    expression.
a+b*c+(d*e+f)*g
 13. Now we read a ‘)’, so the stack is emptied back to the ‘(‘, we output a +.

                                         abc*+de*f+
                   +
                                                 output
                 stack
 14. We read a * next; it is pushed onto the stack.
                                                           *
                                                           +
                                                        stack
 15. Now, g is read and output.      abc*+de*f+g
                                            output
Applications of Stack
Converting the following infix expression to postfix
    expression.
                           *
a+b*c+(d*e+f)*g
                                  +
                               stack
16. The input is now empty, so pop output symbols from the stack until it is empty.

                                       abc*+de*f+g*+
                                              output
                stack
Assignment 1
          Group Size: 2, Due Date : Feb 27, 2012

•     Implement Applications of stack
     1.   Balancing of symbols
     2.   Decimal to Binary Conversion
     3.   Infix to Postfix conversion
     4.   Postfix expression evaluation
     5.   Infix to Prefix conversion
     6.   Prefix expression evaluation
1.    Each application will be implemented as a separate
      function. Function will use stack, which is already
      implemented in a header file and is available for reuse.
2.    Difference between CGPAs of both group members
      should not be more than ONE
Data Structure Lecture 3

More Related Content

PDF
Regular expression
PPTX
Entity Relationship design issues
PPTX
Parallel Adder and Subtractor
PPT
Interrupt system f28x
PPTX
Lecture 15 monkey banana problem
PPTX
Serial Communication in 8051
PPTX
Reversible logic gate
Regular expression
Entity Relationship design issues
Parallel Adder and Subtractor
Interrupt system f28x
Lecture 15 monkey banana problem
Serial Communication in 8051
Reversible logic gate

What's hot (20)

PPTX
Memory interface
PPT
Memory mgmt 80386
PPTX
Advanced topics in artificial neural networks
PPT
8051 Addressing Modes
PPTX
Race around and master slave flip flop
PPTX
Abstract Data Types
DOCX
Nonrecursive predictive parsing
DOCX
8085 interfacing with memory chips
PPTX
Math Co-processor 8087
PPTX
Combinational Logic
PPTX
PPTX
Spanning trees & applications
PPT
Artificial intelligence and knowledge representation
PDF
Encoder & Decoder
PPT
CHOMSKY AND GREIBACH NORMAL FORM.ppt
PPTX
Latch and flip flop
PPTX
Sensor interfacing in 8051
PPT
8255 presentaion.ppt
PPTX
Push Down Automata (PDA) | TOC (Theory of Computation) | NPDA | DPDA
PPTX
MULTIPLEXER
Memory interface
Memory mgmt 80386
Advanced topics in artificial neural networks
8051 Addressing Modes
Race around and master slave flip flop
Abstract Data Types
Nonrecursive predictive parsing
8085 interfacing with memory chips
Math Co-processor 8087
Combinational Logic
Spanning trees & applications
Artificial intelligence and knowledge representation
Encoder & Decoder
CHOMSKY AND GREIBACH NORMAL FORM.ppt
Latch and flip flop
Sensor interfacing in 8051
8255 presentaion.ppt
Push Down Automata (PDA) | TOC (Theory of Computation) | NPDA | DPDA
MULTIPLEXER
Ad

Viewers also liked (7)

PDF
Assembly Language Programming By Ytha Yu, Charles Marut Chap 8 (The Stack and...
PDF
Assembly Language Programming By Ytha Yu, Charles Marut Chap 7 (Logic, Shift,...
PPT
Assembly Language Lecture 1
PDF
Applications of stack
PPSX
PPT
organization structure
Assembly Language Programming By Ytha Yu, Charles Marut Chap 8 (The Stack and...
Assembly Language Programming By Ytha Yu, Charles Marut Chap 7 (Logic, Shift,...
Assembly Language Lecture 1
Applications of stack
organization structure
Ad

Similar to Data Structure Lecture 3 (17)

PPTX
Data Structure- application of stacks_L02.pptx
PDF
Stack Algorithm
PPTX
DSA_chapter_04_Stack and data structure and Queue.pptx
PDF
sweetu stacks.pdf
PPTX
Data Structures_Linear Data Structure Stack.pptx
PPTX
Introduction to programming in MATLAB
PPTX
Fortran & Link with Library & Brief Explanation of MKL BLAS
PPT
PPTX
The Stack And Recursion
PDF
PPT
lecture10trsgfchjvxgfzfdchgdchgcgshyjh.ppt
PDF
Lesson 4 stacks and queues
PPT
Data structure lecture7
PPTX
Stack and queue
PDF
Stack unit-ii
PPT
lect- 3&4.ppt
PPTX
introduction of the Stacks and Queues.pptx
Data Structure- application of stacks_L02.pptx
Stack Algorithm
DSA_chapter_04_Stack and data structure and Queue.pptx
sweetu stacks.pdf
Data Structures_Linear Data Structure Stack.pptx
Introduction to programming in MATLAB
Fortran & Link with Library & Brief Explanation of MKL BLAS
The Stack And Recursion
lecture10trsgfchjvxgfzfdchgdchgcgshyjh.ppt
Lesson 4 stacks and queues
Data structure lecture7
Stack and queue
Stack unit-ii
lect- 3&4.ppt
introduction of the Stacks and Queues.pptx

More from Teksify (12)

PPSX
HCTE C&C08(TDM)
PPT
Data Structure Lecture 7
PPT
Data Structure Lecture 6
PPT
Data Structure Lecture 5
PPT
Data Structure Lecture 4
PPT
Data Structure Lecture 2
PPT
data Structure Lecture 1
PPT
Ch3
PPT
Ch1 2
DOCX
Variable power supply
DOCX
Use of rib tool in pro e
DOCX
Make lens of mobile by pro e
HCTE C&C08(TDM)
Data Structure Lecture 7
Data Structure Lecture 6
Data Structure Lecture 5
Data Structure Lecture 4
Data Structure Lecture 2
data Structure Lecture 1
Ch3
Ch1 2
Variable power supply
Use of rib tool in pro e
Make lens of mobile by pro e

Data Structure Lecture 3

  • 2. Topics Covered in This Lecture • Applications of stack – Reversing the string – Balancing symbols – Postfix expression evaluation – Translating infix expression to postfix expression
  • 3. Applications of Stack • Reversing the string – push each character on to a stack as it is read. – When the line is finished, we then pop characters off the stack, and they will come off in the reverse order.
  • 4. Applications of Stack Reversing the string void ReverseRead(void) { //using static Stack class of Lecture#3 Stack<char> stack;//The Stack ‘stack’ is created char item; cin>>item; while (!stack.isFull()&&item!='$')//type in $ from keyboard to stop input { stack.push(item); // push each character onto the stack cin>>item; } while(!stack.isEmpty() ) { item=stack.pop ();//Pop an element from stack cout<<item; } }
  • 5. Applications of Stack • Balancing Symbols Compilers use a program that checks whether every symbol (like braces, parenthesis, brackets, etc) in a program is balanced. The simple algorithm for this purpose is: 1. Make an empty stack. 2. Read the characters until end of file. 3. If the character is an open any thing, push it onto the stack. 4. If it is a close any thing, then if the stack is empty report an error. Otherwise Pop the Stack. If the popped symbol is not the corresponding opening symbol, then report an error. 5. At the end of the file, if the stack is not empty report an error.
  • 6. Polish Notation a–b/c+d*e Precedence? 1. b/c 2. d*e 3. a – a1 /a1 = b/c / 4. t2 + a2 / t2 = a – b/c / /a2 = d*e/
  • 7. Infix, Suffix, Prefix Infix = a * b + c ((a*b) +c) Priority: 1. a * b 2. a1 + c / a1 = a * b / Prefix = * a b , +a1 c +*abc Suffix = ab* , a1c+ ab*c+
  • 8. Infix, Suffix, Prefix infix = a- b * c / d + e / f suffix =a – bc* / d + e / f a – bc*d/ + e / f a – bc*d/ + ef/ abc*d/- + ef/ abc*d/-ef/+ prefix =a - *bc / d + e / f a - /*bcd + e / f a - /*bcd + /ef -a/*bcd + /ef +-a/*bcd/ef
  • 9. Infix, Suffix, Prefix Infix: a+b*c–d/f+e Suffix: abc*+df/-e+ Prefix: +-+a*bc/dfe
  • 10. Applications of Stack Postfix Expression Evaluation – When a number is seen, it is pushed onto the stack – When an operator is seen, then pop two elements from stack and push the result onto the stack. Now we evaluate the following postfix expression. 6523+8*+3+* 3 1. The first four are placed on the stack. The resulting stack is 2 5 6 stack
  • 11. Applications of Stack • evaluating the following postfix expression. 3 6523+8*+3+* 2 5 6 stack 2. Next a + is read, so 3 and 2 are popped from the stack and their sum 5 is pushed. 5 5 6 stack
  • 12. Applications of Stack • evaluating the following postfix expression. 6523+8*+3+* 5 5 6 stack 8 3. Next 8 is read and pushed. 5 5 6 stack
  • 13. Applications of Stack • evaluating the following postfix expression. 8 6523+8*+3+* 5 5 6 stack 4. Next a * is seen so 8 and 5 are popped as 8 * 5 = 40 is pushed 40 5 6 stack
  • 14. Applications of Stack • evaluating the following postfix expression. 6523+8*+3+* 40 5 6 stack 5. Next a + is read so 40 and 5 are popped and 40 + 5 = 45 is pushed. 45 6 stack
  • 15. Applications of Stack • evaluating the following postfix expression. 6523+8*+3+* 45 6 stack 6. Now 3 is pushed 3 45 6 stack
  • 16. Applications of Stack • evaluating the following postfix expression. 6523+8*+3+* 3 45 6 stack 7. Next symbol is + so pops 3 and 45 and pushes 45 + 3 = 48, so push 48 in stack. 48 6 stack
  • 17. Applications of Stack • evaluating the following postfix expression. 6523+8*+3+* 48 6 stack 7. Finally a * is seen and 48 and 6 are popped, the result 6 * 48 = 288 is pushed. 8. As there is no input, so pop the stack and we get the result. 288 stack
  • 18. Applications of Stack • Translating infix expressions to postfix expression – When an operand is read, it is immediately placed onto the output. – When an operator or left parenthesis comes then save it in the stack initially stack is empty. – If we see a right parenthesis, then we pop the stack, writing symbols until we encounter a (corresponding) left parenthesis, which is popped but not output. – If we see any other symbol (‘+’, ‘*’, ‘(‘, etc) then we pop entries form the stack until we find an entry of lower priority. One exception is that we never remove a ‘(‘ from the stack except when processing a ‘)’. – When the popping is done, we push the operand onto the stack. – Finally, if we read the end of input, we pop the stack until it is empty, writing symbols onto the output.
  • 19. Applications of Stack • Translating infix expressions to postfix expression Convert the following infix expression to postfix expression. a+b*c+(d*e+f)*g 1. First the symbol a is read, so it is passed through to the output a 2. Then + is read and pushed onto the stack. output + stack 3. Next b is read and passed through to the output. ab output * 4. Next a * is read. The top entry on the operator stack has lower + precedence than *, so nothing is output and * is put on the . stack
  • 20. Applications of Stack Converting the following infix expression to postfix expression. a+b*c+(d*e+f)*g 5. Next, c is read and output. abc output 6. The next symbol is a +. Checking the stack, we find that priority of stack top symbol * is higher than + . So we pop a * and place it on the output, Pop the other +, which is not of lower but equal priority, and then push +. * abc*+ + + output stack stack
  • 21. Applications of Stack Converting the following infix expression to postfix expression. a+b*c+(d*e+f)*g 7. The next symbol read is an ‘(‘, which, being of highest precedence, is placed on the stack. ( + stack 8. Then d is read and output. abc*+d output
  • 22. Applications of Stack Converting the following infix expression to postfix expression. a+b*c+(d*e+f)*g 9. We continue by reading a *. Since open parenthesis do not get removed except when a closed parenthesis is being processed, there is no output and we push * in stack * ( + stack 10. Next, e is read and output. abc*+de output
  • 23. Applications of Stack Converting the following infix expression to postfix expression. a+b*c+(d*e+f)*g 11. The next symbol read is a +, since priority of stack top value is higher so we pop * and push +. + abc*+de* ( output + stack 12. Now we read f and output f. abc*+de*f output
  • 24. Applications of Stack Converting the following infix expression to postfix expression. a+b*c+(d*e+f)*g 13. Now we read a ‘)’, so the stack is emptied back to the ‘(‘, we output a +. abc*+de*f+ + output stack 14. We read a * next; it is pushed onto the stack. * + stack 15. Now, g is read and output. abc*+de*f+g output
  • 25. Applications of Stack Converting the following infix expression to postfix expression. * a+b*c+(d*e+f)*g + stack 16. The input is now empty, so pop output symbols from the stack until it is empty. abc*+de*f+g*+ output stack
  • 26. Assignment 1 Group Size: 2, Due Date : Feb 27, 2012 • Implement Applications of stack 1. Balancing of symbols 2. Decimal to Binary Conversion 3. Infix to Postfix conversion 4. Postfix expression evaluation 5. Infix to Prefix conversion 6. Prefix expression evaluation 1. Each application will be implemented as a separate function. Function will use stack, which is already implemented in a header file and is available for reuse. 2. Difference between CGPAs of both group members should not be more than ONE