Lecture 3.2.1 Stack New
Lecture 3.2.1 Stack New
Course Objectives
2
Course Outcomes
CO Course Outcome
Number
3
ASSESSMENT PATTERN
The performance of students is evaluated as follows:
Theory Practical
Continuous Internal Semester End Continuous Internal Semester End
Components Assessment (CAE) Examination (SEE) Assessment (CAE) Examination (SEE)
Marks 40 60 60 40
Total Marks 100 100
4
DEFINITION • The last element to be added is the first to
be removed (LIFO: Last In, First Out).
A stack is an Abstract Data Type (ADT),
commonly used in most programming
languages. It is named stack as it behaves
like a real-world stack, for example – a deck
of cards or stack of trays etc.
It is an ordered group of homogeneous items
of elements.
Elements are added to and removed from
the top of the stack (the most recently
added items are at the top of the stack).
5
Stack Representation
6
• A stack can be implemented by means of Array, Structure, Pointer, and Linked List. Stack
can either be a fixed size one or it may have a sense of dynamic resizing. Here, we are
going to implement stack using arrays, which makes it a fixed size stack
implementation.
Basic Operations
Stack operations may involve initializing the stack, using it and then de-initializing it.
Apart from these basic stuffs, a stack is used for the following two primary operations −
• push() − Pushing (storing) an element on the stack.
• pop() − Removing (accessing) an element from the stack.
• To use a stack efficiently, we need to check the status of stack as well. For the same
purpose, the following functionality is added to stacks −
• peek() − get the top data element of the stack, without removing it.
• isFull() − check if stack is full.
• isEmpty() − check if stack is empty.
• At all times, we maintain a pointer to the last PUSHed data on the stack. As this pointer
always represents the top of the stack, hence named top. The top pointer provides top 7
value of the stack without actually removing it.
Sequential/ Array representation of Stack
14
Algorithm to insert in Stack
Algorithm: PUSH(STACK,TOP,MAXSTK,ITEM)
This procedure pushes an ITEM onto a stack.
• Accessing the content while removing it from the stack, is known as a Pop Operation. In an
array implementation of pop() operation, the data element is not actually removed,
instead top is decremented to a lower position in the stack to point to the next value. But in
linked-list implementation, pop() actually removes data element and deallocates memory
space.
• A Pop operation may involve the following steps −
• Step 1 − Checks if the stack is empty.
• Step 2 − If the stack is empty, produces an error and exit.
• Step 3 − If the stack is not empty, accesses the data element at which top is pointing.
• Step 4 − Decreases the value of top by 1.
• Step 5 − Returns success.
16
Algorithm to delete in Stack
Algorithm: POP(STACK,TOP,ITEM)
This procedure deletes the top element of STACK & assigns
it to the variable ITEM.
2 (a + b) ∗ c ∗+abc ab+c∗
3 a ∗ (b + c) ∗a+bc abc+∗
5 (a + b) ∗ (c + d) ∗+ab+cd ab+cd+∗
31
Application of stacks: Evaluating a postfix expression
• This algorithm finds the value of an arithmetic expression P written in postfix
notation.
1) Add a right parenthesis “)” at the end of P(expression).
2) Scan P from left to right and repeat steps 3 & 4 for each element of P until the
sentinel “)” is encountered.
3) If an operand is encountered, put it on STACK.
4) If an operator ⊗ is encountered , then:
a) Remove the two top elements of stack, where A is the top element and
B is the next-to-top element.
b) Evaluate B ⊗ A.
c) Place the result of (b) back on stack.
[End of if structure]
[End of step2 loop]
5) Set value equal to the top element on stack.
6) Exit
Evaluating a postfix expression(contd..)
Ans 1: 52
Ans 2: 37
Ans 3: -4
Ans 4: 4
Ans 5: 3
INFIX to PREFIX Examples
INFIX POSTFIX
A+B +AB
A+B-C -+ABC
(A+B) * (C-D) *+AB-CD
A$B*C-D+E/F/(G+H) +-*$ABCD//EF+GH
((A+B)*C-(D-E))$(F+G) $-*+ABC-DE+FG
A-B/(C*D$E) -A/B*C$DE
A+((B+C)*(D+E))+F/G ++A*+BC+DE/FG
A+(B+C*D+E)+F/G ++A++B*CDE/FG
A-B/(C^D)+(E*F) +-A/B^CD*EF
A*(B+C)+(B/D)*A+Z*U ++*A+BC*/BDA*ZU
A+(B*C-(D/E^F)*G)*H +A*-*BC*/D^EFGH
Prefix to Infix
PREFIX : +A-BC
+A-BC
+A(B-C)
INFIX: (A+(B-C))
Postfix to Infix - So pop
POSTFIX: ABCDE-+/*EF*-
E E
D D D (D-E)
C C C C C
B B B B B B
A A A A A A A
(D-E)
C (C+(D-E)) (C+(D-E))
B B B (B/(C+(D-E)) (B/(C+(D-E))
A A A A A
Postfix to Infix(contd..)
* So pop
F F
E E E
(A*(B/(C+(D-E)))) (A*(B/(C+(D-E)))) (A*(B/(C+(D-E)))) (A*(B/(C+(D-E))))
- So pop
(E*F)-(A*(B/(C+(D-E))))
(E*F)
(E*F)
(A*(B/(C+(D-E))))
(A*(B/(C+(D-E))))
Applications of Stack
• Express Evolution
• Express interchange
• Infix changes to Postfix
• Infix changes to Prefix
• Postfix changes to Infix
• Prefix changes to Infix
• Parsing easily done
• Simulation of recursion
• Function call
39
REFERENCES
• https://www.cs.cmu.edu/~adamchik/15-121/lectures/Stacks%20and%20Queues/Stacks%20and%20Queues.html
• Data Structures with C/ schaum outline series/ volume 2
• https://www.geeksforgeeks.org/stack-data-structure-introduction-program/
• https://www.geeksforgeeks.org/queue-set-1introduction-and-array-implementation/
• http://www.yashcode.com/2017/11/prefix-to-postfix-conversion-using-stack.html
• Lipschutz, Seymour, “Data Structures”, Schaum's Outline Series, Tata McGraw Hill.
• Gilberg/Forouzan,” Data Structure with C ,Cengage Learning.
• Augenstein,Moshe J , Tanenbaum, Aaron M, “Data Structures using C and C++”, Prentice Hall of India.
• Goodrich, Michael T., Tamassia, Roberto, and Mount, David M., “Data Structures and Algorithms in C++”, Wiley Student
Edition.
• Aho, Alfred V., Ullman, Jeffrey D., Hopcroft ,John E. “Data Structures and Algorithms”, Addison Wesley
40
THANK YOU