Data Structure Interview Questions
Data Structure Interview Questions
Types
There are two types of data structures:
Linear data structure: If the elements of a data structure result in a sequence or a linear list then it
is called a linear data structure. Example: Arrays, Linked List, Stacks, Queues etc.
Non-linear data structure: If the elements of data structure results in a way that traversal of nodes
is not done in a sequential manner, then it is a non linear data structure. Example: Trees, Graphs
etc.
Applications
Data structures form the core foundation of software programming as any efficient algorithm to a given
problem is dependent on how effectively a data is structured.
Identifiers look ups in compiler implementations are built using hash tables.
The B-trees data structures are suitable for the databases implementation.
Some of the most important areas where data structures are used are as follows:
1. Artificial intelligence
2. Compiler design
3. Machine learning
4. Database design and management
5. Blockchain
6. Numerical and Statistical analysis
7. Operating system development
8. Image & Speech Processing
9. Cryptography
Benefits of Learning Data Structures
Any given problem has constraints on how fast the problem should be solved (time) and how much less
resources the problem consumes(space). That is, a problem is constrained by the space and time
complexity within which it has to be solved efficiently.
In order to do this, it is very much essential for the given problem to be represented in a proper
structured format upon which efficient algorithms could be applied.
Selection of proper data structure becomes the most important step before applying algorithm to any
problem.
Interview Questions
1. Can you explain the difference between file structure and storage structure?
File Structure: Representation of data into secondary or auxiliary memory say any device such as
hard disk or pen drives that stores data which remains intact until manually deleted is known as a file
structure representation.
Storage Structure: In this type, data is stored in the main memory i.e RAM, and is deleted once the
function that uses this data gets completely executed.
The difference is that storage structure has data stored in the memory of the computer system,
whereas file structure has the data stored in the auxiliary memory.
2. Can you tell how linear data structures differ from non-linear data structures?
If the elements of a data structure result in a sequence or a linear list then it is called a linear data
structure. Whereas, traversal of nodes happens in a non-linear fashion in non-linear data structures.
Lists, stacks, and queues are examples of linear data structures whereas graphs and trees are the
examples of non-linear data structures.
3. What is an array?
Arrays are the collection of similar types of data stored at contiguous memory locations.
It is the simplest data structure where the data element can be accessed randomly just by using its
index number.
When linked list is used for access strategies, it is considered as a linear data-structure. When
they are used for data storage, it can be considered as a non-linear data structure.
8. Explain the scenarios where you can use linked lists and arrays.
Following are the scenarios where we use linked list over array:
When we do not know the exact number of elements beforehand.
When we know that there would be large number of add or remove operations.
Less number of random access operations.
When we want to insert items anywhere in the middle of the list, such as when implementing a
priority queue, linked list is more suitable.
Below are the cases where we use arrays over the linked list:
When we need to index or randomly access elements more frequently.
When we know the number of elements in the array beforehand in order to allocate the right
amount of memory.
When we need speed while iterating over the elements in the sequence.
When memory is a concern:
1. Due to the nature of arrays and linked list, it is safe to say that filled arrays use less memory
than linked lists.
2. Each element in the array indicates just the data whereas each linked list node represents the
data as well as one or more pointers or references to the other elements in the linked list.
To summarize, requirements of space, time, and ease of implementation are considered while
deciding which data structure has to be used over what.
deQueue(q):
If stack1 is empty then error
else
Pop an item from stack1 and return it
enqueued element. This operation of pushing all elements to new stack takes O(n) complexity.
Pseudocode:
Enqueue: Time complexity: O(1)
enqueue(q, data):
Push data to stack1
dequeue(q):
If both stacks are empty then raise error.
If stack2 is empty:
While stack1 is not empty:
push everything from stack1 to stack2.
Pop the element from stack2 and return it.
A stack can be implemented using two queues. We know that a queue supports enqueue and
dequeue operations. Using these operations, we need to develop push, pop operations.
Let stack be ‘s’ and queues used to implement be ‘q1’ and ‘q2’. Then, stack ‘s’ can be implemented
in two ways:
1. By making push operation costly:
This method ensures that newly entered element is always at the front of ‘q1’, so that pop
operation just dequeues from ‘q1’.
‘q2’ is used as auxillary queue to put every new element at front of ‘q1’ while ensuring pop
happens in O(1) complexity.
Pseudocode:
Push element to stack s : Here push takes O(n) time complexity.
push(s, data):
Enqueue data to q2
Dequeue elements one by one from q1 and enqueue to q2.
Swap the names of q1 and q2
pop(s):
dequeue from q1 and return it.
push(s,data):
Enqueue data to q1
pop(s):
Step1: Dequeue every elements except the last element from q1 and enqueue to q2
Step2: Dequeue the last item of q1, the dequeued item is stored in result varia
Step3: Swap the names of q1 and q2 (for getting updated data after dequeue)
Step4: Return the result.
19. What is the time complexity of basic operations get() and put() in HashMap
class?
The time complexity is O(1) assuming that the hash function used in hash map distributes elements
uniformly among the buckets.
20. Which data structures are used for implementing LRU cache?
LRU cache or Least Recently Used cache allows quick identification of an element that hasn’t been
put to use for the longest time by organizing items in order of use. In order to achieve this, two data
structures are used:
Queue – This is implemented using a doubly-linked list. The maximum size of the queue is
determined by the cache size, i.e by the total number of available frames. The least recently used
pages will be near the front end of the queue whereas the most recently used pages will be
towards the rear end of the queue.
Hashmap – Hashmap stores the page number as the key along with the address of the
corresponding queue node as the value.
26. Write a recursive function to calculate the height of a binary tree in Java.
Consider that every node of a tree represents a class called Node as given below:
//use the larger among the left and right height and plus 1 (for the root)
return Math.max(leftHeight, rightHeight) + 1;
}
}
Uses: In binary search trees (BST), inorder traversal gives nodes in ascending order.
2. Preorder Traversal:
Algorithm:
Step 1. Visit the root.
Step 2. Traverse the left subtree, i.e., call Preorder(root.left)
Step 3. Traverse the right subtree, i.e., call Preorder(root.right)
Preorder traversal in Java:
Uses:
1. Preorder traversal is commonly used to create a copy of the tree.
2. It is also used to get prefix expression of an expression tree.
3. Postorder Traversal:
Algorithm:
Step 1. Traverse the left subtree, i.e., call Postorder(root.left)
Step 2. Traverse the right subtree, i.e., call Postorder(root.right)
Step 3. Visit the root.
Postorder traversal in Java:
Uses:
Postorder traversal is commonly used to delete the tree.
It is also useful to get the postfix expression of an expression tree.
Consider the following tree as an example, then:
Node(int data) {
this.data = data;
}
}
public class InterviewBit
{
// traverse nodes in pre-order way
public static void leftViewUtil(Node root, int level, HashMap<Integer, Integer> map)
{
if (root == null) {
return;
}
// traverse the tree and find out the first nodes of each level
leftViewUtil(root, 1, map);
leftView(root);
}
}
1. Social network graphs to determine the flow of information in social networking websites like
facebook, linkedin etc.
2. Neural networks graphs where nodes represent neurons and edge represent the synapses
between them
3. Transport grids where stations are the nodes and routes are the edges of the graph.
4. Power or water utility graphs where vertices are connection points and edge the wires or pipes
connecting them.
5. Shortest distance between two end points algorithms.
35. What is the difference between tree and graph data structure?
1. Tree and graph are differentiated by the fact that a tree structure must be connected and can never
have loops whereas in the graph there are no restrictions.
2. Tree provides insights on relationship between nodes in a hierarchical manner and graph follows a
network model.
36. What is the difference between the Breadth First Search (BFS) and Depth
First Search (DFS)?
1. BFS and DFS both are the traversing methods for a graph. Graph traversal is nothing but the
process of visiting all the nodes of the graph.
2. The main difference between BFS and DFS is that BFS traverses level by level whereas DFS follows
first a path from the starting to the end node, then another path from the start to end, and so on until all
nodes are visited.
3. Furthermore, BFS uses queue data structure for storing the nodes whereas DFS uses the stack for
traversal of the nodes for implementation.
4. DFS yields deeper solutions that are not optimal, but it works well when the solution is dense
whereas the solutions of BFS are optimal.
5. You can learn more about BFS here: Breadth First Search
(https://www.interviewbit.com/tutorial/breadth-first-search/) and DFS here: Depth First Search
(https://www.interviewbit.com/tutorial/depth-first-search/).
39. Given an m x n 2D grid map of '1’s which represents land and '0’s that represents water,
return the number of islands (surrounded by water and formed by connecting adjacent lands in
2 directions - vertically or horizontally). Assume that the boundary cases - which is all four
edges of the grid are surrounded by water.
Constraints are:
m == grid.length
n == grid[i].length
1 <= m, n <= 300
grid[i][j] can only be ‘0’ or ‘1’.
Example:
Input: grid = [
[“1” , “1” , “1” , “0” , “0”],
[“1” , “1” , “0” , “0” , “0”],
[“0” , “0” , “1” , “0” , “1”],
[“0” , “0” , “0” , “1” , “1”]
]
Output: 3
Solution:
class InterviewBit {
public int numberOfIslands(char[][] grid) {
if(grid==null || grid.length==0||grid[0].length==0)
return 0;
int m = grid.length;
int n = grid[0].length;
int count=0;
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(grid[i][j]=='1'){
count++;
mergeIslands(grid, i, j);
}
}
}
return count;
}
if(i<0||i>=m||j<0||j>=n||grid[i][j]!='1')
return;
grid[i][j]='X';
1. Which of the following data structure can’t store the non-homogeneous data
elements?
Arrays
Records
Pointers
Stacks
2. A directed graph is _______ if there is a path from each vertex to every other
vertex in the graph.
Weakly connected
Strongly connected
Tightly connected
Linearly connected
BFS
DFS
Level order
Width first
REAR = REAR + 1
i only
ii only
both i and ii
(log2n) + 1
logn
(logn) + 1
log2n
8. Which of the following scenario is true for the statement - “Arrays are best
data structures”?
For the size of the structure and the data in the structure are constantly changing
both a and b
10. What will be the final elements on the stack if the following sequence of
operations are executed?
* Push(a,s);
* Push(b,s);
* Pop(s);
* Push(c,s);
- where a, b, c are the data elements and s is the stack.
abc
ac
acb
b
11. Dijkstra’s Algorithm cannot be applied on which of the following?
Unweighted graphs