Stack Notes for GATE Exam [2024] (original) (raw)

Last Updated : 23 Jul, 2025

Stacks, a fundamental data structure in computer science, are crucial for understanding algorithmic paradigms and solving complex computational problems. As candidates gear up for the GATE Exam 2024, a solid grasp of stack concepts is indispensable. These notes are designed to provide a concise yet comprehensive overview of stacks, covering key topics that are likely to be assessed in the GATE examination.

Table of Content

Introduction to Stack:

_A stack is a linear data structure in which the insertion of a new element and removal of an existing element takes place at the same end represented as the top of the stack.

To implement the stack, it is required to maintain the **pointer to the top of the stack, which is the last element to be inserted because **we can access the elements only on the top of the stack.

**LIFO (Last In First Out) in Stack****:**

This strategy states that the element that is inserted last will come out first. You can take a pile of plates kept on top of each other as a real-life example. The plate which we put last is on the top and since we remove the plate that is at the top, we can say that the plate that was put last comes out first.

Basic Operations on Stack

In order to make manipulations in a stack, certain operations are provided to us.

Stack

**Time Complexity of Stack Operations:

**Operations **Complexity
push() O(1)
pop() O(1)
isEmpty() O(1)
size() O(1)

Implementation of Stack using Singly Linked List:

To implement a stack using the singly linked list concept, all the singly linked list operations should be performed based on Stack operations LIFO(last in first out) and with the help of that knowledge, we are going to implement a stack using a singly linked list.

So we need to follow a simple rule in the implementation of a stack which is **last in first out and all the operations can be performed with the help of a top variable. Let us learn how to perform **Pop, Push, Peek, and Display operations in the following article:

In the stack Implementation, a stack contains a top pointer. which is the “head” of the stack where pushing and popping items happens at the head of the list. The first node has a null in the link field and second node-link has the first node address in the link field and so on and the last node address is in the “top” pointer.

The main advantage of using a linked list over arrays is that it is possible to implement a stack that can shrink or grow as much as needed. Using an array will put a restriction on the maximum capacity of the array which can lead to stack overflow. Here each new node will be dynamically allocated. so overflow is not possible.

**Push Operation:

**Pop Operation:

**Peek Operation:

**Display Operation:

Applications, Advantages and Disadvantages of Stack:

**Application of Stack Data Structure:

**Advantages of Stack:

**Disadvantages of Stack:

Infix to Postfix Operation in Stack:

To convert infix expression to postfix expression, use the **stack data structure. Scan the infix expression from left to right. Whenever we get an operand, add it to the postfix expression and if we get an operator or parenthesis add it to the stack by maintaining their precedence.

Below are the steps to implement the above idea:

  1. Scan the infix expression **from left to right.
  2. If the scanned character is an operand, put it in the postfix expression.
  3. Otherwise, do the following
    • If the precedence and associativity of the scanned operator are greater than the precedence and associativity of the operator in the stack [or the stack is empty or the stack contains a ‘****(‘ ], then push it in the stack. [‘****^‘ operator is right associative and other operators like ‘****+‘,’****–‘,’*‘ and ‘/‘ are left-associative].
      * Check especially for a condition when the operator at the top of the stack and the scanned operator both are ‘
      ^**‘. In this condition, the precedence of the scanned operator is higher due to its right associativity. So it will be pushed into the operator stack.
      * In all the other cases when the top of the operator stack is the same as the scanned operator, then pop the operator from the stack because of left associativity due to which the scanned operator has less precedence.
    • Else, Pop all the operators from the stack which are greater than or equal to in precedence than that of the scanned operator.
      * After doing that Push the scanned operator to the stack. (If you encounter parenthesis while popping then stop there and push the scanned operator in the stack.)
  4. If the scanned character is a ‘****(**‘, push it to the stack.
  5. If the scanned character is a ‘****)’, pop the stack and output it until a ‘**(**‘ is encountered, and discard both the parenthesis.
  6. Repeat steps **2-5 until the infix expression is scanned.
  7. Once the scanning is over, Pop the stack and add the operators in the postfix expression until it is not empty.
  8. Finally, print the postfix expression.

Postfix Evaluation using Stack:

To evaluate a postfix expression we can use a stack.

Iterate the expression from left to right and keep on storing the operands into a stack. Once an operator is received, pop the two topmost elements and evaluate them and push the result in the stack again.

Towers of Hanoi using Stack:

Tower of Hanoi is a mathematical puzzle where we have three rods (**A, **B, and **C) and **N disks. Initially, all the disks are stacked in decreasing value of diameter i.e., the smallest disk is placed on the top and they are on rod **A. The objective of the puzzle is to move the entire stack to another rod (here considered **C), obeying the following simple rules:

**Examples:

**Input: _3
**Output: _Disk 1 moved from A to C
_Disk 2 moved from A to B
_Disk 1 moved from C to B
_Disk 3 moved from A to C
_Disk 1 moved from B to A
_Disk 2 moved from B to C
_Disk 1 moved from A to C

**Tower of Hanoi using Recursion:

The idea is to use the helper node to reach the destination using recursion. Below is the pattern for this problem:

Tower of Hanoi

Follow the steps below to solve the problem:

**Time complexity: O(2N), There are two possibilities for every disk. Therefore, 2 * 2 * 2 * . . . * 2(N times) is 2N
**Auxiliary Space: O(N), Function call stack space

Fibonaaci Series using Stack:

The Fibonacci numbers are the numbers in the following integer sequence: **0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ……..

Fibonacci Series.

**Example:

**Input : n = 9

**Output : 34

_In mathematical terms, the sequence Fn of **Fibonacci _numbers is defined by the recurrence relation:

F_{n} = F_{n-1} + F_{n-2}           F_0 = 0           F_1 = 1

Previously Asked GATE Questions on Stack:

**Question 1:

The end of a stack, traditionally known as the position where PUSH and POP operations performed, is known as:

  1. FIFO
  2. LIFO
  3. FRONT
  4. TOP

**Answer: Option 4 : TOP
**Explanation _:_The top of the stack refers to the end of the stack where operations are performed. This is where elements are added (pushed) and removed (popped). When an element is added to an empty stack, it becomes the top element. When additional elements are pushed onto the stack, they become the new top elements.

**Question 2:

What is the equivalent infix expression of the following postfix expression?

M, N, O, +, *, P, /, Q, R, S, T, /, +, *, –

  1. N*(M+Q)/Q-P*(S+R/T)
  2. (((M*(N+O))/P)-(Q*(R+(S/T))))
  3. O * (M + N)/P – Q * (R + S/T)
  4. M * (N + O)/Q – P * (R/S + T)

**Answer: Option 2 : (((M * (N + O)) / P) – (Q * (R + (S / T))))
**Explanation:

Let's apply this algorithm to the given postfixexpression - M, N, O, +, *, P, /, Q, R, S, T, /, +, *, –

Step 1 - Push M, N, O onto the stack Stack - O, N, M

Step 2 - Pop O, N, M and concatenate them with + and * Stack - (M*(N+O))

Step 3 - Push P onto the stack Stack - P, (M*(N+O))

Step 4 - Pop P and concatenate it with / Stack - ((M*(N+O))/P)

Step 5 - Push Q, R, S, T onto the stack Stack - T, S, R, Q, ((M*(N+O))/P)

Step 6 - Pop T, S, R, Q and concatenate them with / and + and * Stack - ((Q*(R+(S/T))), ((M*(N+O))/P)

Step 7 - Pop the final expression from the stack after "-" Infix expression - (((M*(N+O))/P) - ((Q*(R+(S/T))))

**Question 3:

What is the postfix representation of the following infix expression?

(A + B) * C – D * E / F

  1. A B + C * D E * F - /
  2. A B * C + D E * F / -
  3. A B + C – D E * F / *
  4. A B + C * D E * F / -

**Answer: Option 4 : A B + C * D E * F / -
**Explanation:

() has highest precedence

* and / has same precedence while + and – has same precedence

(* and /) and higher precedence than (+, -)

Associativity is left to right:

(A + B) * C – D * E / F

**A B + * C – D * E / F

**A B + C * – D * E / F

**A B + C * – **D E * / F

**A B + C * – **D E * F /

**A B + C * D E * F / –

**Question 4:

The result evaluating the postfix expression 10 5 + 60 6 / * 8 − is

  1. **284
  2. **213
  3. **142
  4. **71

**Answer: Option 3 : 142

**Question 5:

The five items P,Q,R,S and T are pushed in a stack, one after the other starting from P. The stack is popped four times and each element is inserted in a queue. Then two elements are deleted from the queue and pushed back on the stack. now one item is popped from the stack. The popped item is:

  1. P
  2. R
  3. Q
  4. S

**Answer: Option 4 : S

**Question 6:

Consider the following postfix expression with single digit operands:

6 2 3 * / 4 2 * + 6 8 * -

The top two elements of the stack after second * is evaluated, are:

  1. **6, 3
  2. **8, 1
  3. **8, 2
  4. **6, 2

**Answer: Option 2 : 8, 1

**Question 7:

What is the outcome of the prefix expression +, -, *, 3, 2, /, 8, 4, 1?

  1. **12
  2. **5
  3. **11
  4. **4

**Answer _:_Option 2 : 5

**Question 8:

A stack is implemented with an array of ‘A [0..N – 1]’ and a variable ‘pos’. The push and pop operations are defined by the following code.

push(x)
                A[pos] ← x
                pos ← pos – 1
end push
pop( )
                pos ← pos + 1
                return A[pos]
end pop

Which of the following will initialize an empty stack with capacity N for the above implementation?

  1. pos ← -1
  2. pos ← 0
  3. pos ← 1
  4. pos ← N - 1

**Answer : Option 4 : pos ← N - 1

**Question 9:

A stack can be implemented using queue, but then we need to use atleast:

  1. 3 queues
  2. 2 queues
  3. only one queue is sufficient
  4. none of the options

**Answer : Option 2 : 2 queues

**Question 10:

Which of the following applications may use a stack?

(a) Parenthesis balancing program

(b) Process scheduling operating system

(c) Conversion of infix arithmetic expression to postfix form

**Answer: Option 3 : (a) and (c)