Stack Data Structure By : Imam M Shofi
What is stack? A stack is a limited version of an array.  New elements, or nodes as they are often called, can be added to a stack and removed from a stack only from one end.  Access system a stack is referred to as a LIFO structure (Last-In First-Out) Some illustrations: stack of satay stack of CDs
Stacks operations Push : adds a new node Push(X,S)    add the value X to the TOP of stack Pop : removes a node Pop(S)    removes the TOP node and returns its value IsEmpty : reports whether the stack is empty IsEmpty(S)    report whether the stack S is empty IsFull : reports whether the stack is full IsFull(S)    report whether the stack S is full  Initialize : creates/initializes the stack Initialize(S)    create a new empty stack named S Destroy : deletes the contents of the stack (may be implemented by re-initializing the stack) Destroy(S)    deletes the contents of the stack S
Illustration/example Operation Stack’s contents TOP value 1. Initialiaze(S) <empty> 0 2. Push(‘a’,S) a 1 3. Push(‘b’,S) a b 2 4. Push(‘c’,S) a b c 3 5. Pop(S) a b 2 6. Push(‘d’,S) a b d 3 7. Push(‘e’,S) a b d e 4 8. Pop(S) a b d 3 9. Pop(S) a b 2 10. Pop(S) a 1
Exercise What would the state of the stack be after the following operations: create stack push A onto stack push F onto stack pop item from stack push B onto stack pop item from stack pop item from stack Show the state of the stack and the value of each variable after execution of each of the following statements: A = 5 B = 3 C = 7 (a) create stack push A onto stack push C*C onto stack pop item from stack and store in B push B+A onto stack pop item from stack and store in A pop item from stack and store in B (b) create stack push B onto stack push C onto stack push A onto stack A=B*C push A+C onto stack pop item from stack and store in A pop item from stack and store in B pop item from stack and store in C
Converting between notations INFIX to PREFIX : (A+B) – (C*D) Do the first brace: (A+B), the PREFIX is +AB Do the second brace: (C*D), the PREFIX is *CD The end is operator -:  +AB  -  *CD ,  the PREFIX is -+AB*CD INFIX to POSTFIX : (A+B) – (C*D) Do the first brace: (A+B), the POSTFIX is AB+ Do the second brace: (C*D), the POSTFIX is CD* The end is operator -:  AB+  -  CD* ,  the PREFIX is AB+CD*- PREFIX to INFIX : +/*A B C D Find the first operator: *, take 2 operands before the operator ( A  and  B ), the INFIX is (A*B) Find the second operator: /, take 2 operands before the operator ( A*B  and  C ), the INFIX is ((A*B)/C) Find the third operator: +, take 2 operands before the operator ( ((A*B)/C)  and  D ), the INFIX is ((A*B)/C)+D
Converting between notations(2) PREFIX to POSTFIX : +/*A B C D Find the first operator: *, take 2 operands before the operator ( A  and  B ), the POSTFIX is AB* Find the second operator: /, take 2 operands before the operator ( AB*  and  C ), the POSTFIX is AB*C/ Find the third operator: +, take 2 operands before the operator ( AB*C/  and  D ), the POSTFIX is AB*C/D+ POSTFIX to INFIX : ABCD*/- Find the first operator: *, take 2 operands before the operator ( C  and  D ), the INFIX is (C*D) Find the second operator: /, take 2 operands before the operator ( (C*D)  and  B ), the INFIX is (B/(C*D) Find the third operator: -, take 2 operands before the operator ( (B/(C*D)  and  A ), the INFIX is A – (B/(C*D) POSTFIX to PREFIX : ABCD*/- Find the first operator: *, take 2 operands before the operator ( C  and  D ), the PREFIX is *CD Find the second operator: /, take 2 operands before the operator ( *CD  and  B ), the PREFIX is /B*CD Find the third operator: -, take 2 operands before the operator ( /B*CD  and  A ), the PREFIX is -A /B*CD
Exercise: Converting Convert these INFIX to PREFIX and POSTFIX : A / B – C / D (A + B) ^ 3 – C * D A ^ (B + C) Convert these PREFIX to INFIX and POSTFIX : + – / A B C ^ D E –  + D E / X Y ^ + 2 3 – C D Convert these POSTFIX to INFIX and PREFIX : A B C + –  G H + I J / * A B ^ C D + –

Stack Data Structure V1.0

  • 1.
    Stack Data StructureBy : Imam M Shofi
  • 2.
    What is stack?A stack is a limited version of an array. New elements, or nodes as they are often called, can be added to a stack and removed from a stack only from one end. Access system a stack is referred to as a LIFO structure (Last-In First-Out) Some illustrations: stack of satay stack of CDs
  • 3.
    Stacks operations Push: adds a new node Push(X,S)  add the value X to the TOP of stack Pop : removes a node Pop(S)  removes the TOP node and returns its value IsEmpty : reports whether the stack is empty IsEmpty(S)  report whether the stack S is empty IsFull : reports whether the stack is full IsFull(S)  report whether the stack S is full Initialize : creates/initializes the stack Initialize(S)  create a new empty stack named S Destroy : deletes the contents of the stack (may be implemented by re-initializing the stack) Destroy(S)  deletes the contents of the stack S
  • 4.
    Illustration/example Operation Stack’scontents TOP value 1. Initialiaze(S) <empty> 0 2. Push(‘a’,S) a 1 3. Push(‘b’,S) a b 2 4. Push(‘c’,S) a b c 3 5. Pop(S) a b 2 6. Push(‘d’,S) a b d 3 7. Push(‘e’,S) a b d e 4 8. Pop(S) a b d 3 9. Pop(S) a b 2 10. Pop(S) a 1
  • 5.
    Exercise What wouldthe state of the stack be after the following operations: create stack push A onto stack push F onto stack pop item from stack push B onto stack pop item from stack pop item from stack Show the state of the stack and the value of each variable after execution of each of the following statements: A = 5 B = 3 C = 7 (a) create stack push A onto stack push C*C onto stack pop item from stack and store in B push B+A onto stack pop item from stack and store in A pop item from stack and store in B (b) create stack push B onto stack push C onto stack push A onto stack A=B*C push A+C onto stack pop item from stack and store in A pop item from stack and store in B pop item from stack and store in C
  • 6.
    Converting between notationsINFIX to PREFIX : (A+B) – (C*D) Do the first brace: (A+B), the PREFIX is +AB Do the second brace: (C*D), the PREFIX is *CD The end is operator -: +AB - *CD , the PREFIX is -+AB*CD INFIX to POSTFIX : (A+B) – (C*D) Do the first brace: (A+B), the POSTFIX is AB+ Do the second brace: (C*D), the POSTFIX is CD* The end is operator -: AB+ - CD* , the PREFIX is AB+CD*- PREFIX to INFIX : +/*A B C D Find the first operator: *, take 2 operands before the operator ( A and B ), the INFIX is (A*B) Find the second operator: /, take 2 operands before the operator ( A*B and C ), the INFIX is ((A*B)/C) Find the third operator: +, take 2 operands before the operator ( ((A*B)/C) and D ), the INFIX is ((A*B)/C)+D
  • 7.
    Converting between notations(2)PREFIX to POSTFIX : +/*A B C D Find the first operator: *, take 2 operands before the operator ( A and B ), the POSTFIX is AB* Find the second operator: /, take 2 operands before the operator ( AB* and C ), the POSTFIX is AB*C/ Find the third operator: +, take 2 operands before the operator ( AB*C/ and D ), the POSTFIX is AB*C/D+ POSTFIX to INFIX : ABCD*/- Find the first operator: *, take 2 operands before the operator ( C and D ), the INFIX is (C*D) Find the second operator: /, take 2 operands before the operator ( (C*D) and B ), the INFIX is (B/(C*D) Find the third operator: -, take 2 operands before the operator ( (B/(C*D) and A ), the INFIX is A – (B/(C*D) POSTFIX to PREFIX : ABCD*/- Find the first operator: *, take 2 operands before the operator ( C and D ), the PREFIX is *CD Find the second operator: /, take 2 operands before the operator ( *CD and B ), the PREFIX is /B*CD Find the third operator: -, take 2 operands before the operator ( /B*CD and A ), the PREFIX is -A /B*CD
  • 8.
    Exercise: Converting Convertthese INFIX to PREFIX and POSTFIX : A / B – C / D (A + B) ^ 3 – C * D A ^ (B + C) Convert these PREFIX to INFIX and POSTFIX : + – / A B C ^ D E – + D E / X Y ^ + 2 3 – C D Convert these POSTFIX to INFIX and PREFIX : A B C + – G H + I J / * A B ^ C D + –