You are now set for a job interview. You may be wondering what questions you’ll face in your interview. Just remember that interviewers aren’t trying to trick you and don’t expect perfection, but it’s their opportunity to ascertain your knowledge before they invest in your employment. Proper preparation is always advised.

Data structures and algorithm questions are an important part of any programming job interview, especially one for data science and Java-based role. Sound knowledge of data structures and algorithms will help you stand apart from the herd. The following questions will help you crack your interview!

Data structure is the way data is organized (stored) and manipulated for retrieval and access. It also defines the way different sets of data relate to one another, establishing relationships and forming algorithms.

A data structure is linear if all its elements or data items are arranged in a sequence or a linear order. The elements are stored in a non-hierarchical way so that each item has successors and predecessors except the first and last element in the list.

Examples of linear data structures are Arrays, Stack, Strings, Queue, and Linked List.

Numerical analysis, operating system, AI, compiler design, database management, graphics, statistical analysis, and simulation.

The difference lies in the memory area accessed. Storage structure refers to the data structure in the memory of the computer system, whereas file structure represents the storage structure in the auxiliary memory.

It’s a linear data structure or a sequence of data objects where elements are *not* stored in adjacent memory locations. The elements are linked using pointers to form a chain. Each element is a separate object, called a *node*. Each node has two items: a data field and a reference to the next node. The entry point in a linked list is called the *head*. Where the list is empty, the head is a null reference and the last node has a reference to null.

A linked list is a dynamic data structure, where the number of nodes is not fixed, and the list has the ability to grow and shrink on demand.

It is applied in cases where:

- We deal with an unknown number of objects or don’t know how many items are in the list
- We need constant-time insertions/deletions from the list, as in real-time computing where time predictability is critical
- Random access to any elements is not needed
- The algorithm requires a data structure where objects need to be stored irrespective of their physical address in memory
- We need to insert items in the middle of the list as in a priority queue

Some implementations are stacks and queues, graphs, directory of names, dynamic memory allocation, and performing arithmetic operations on long integers.

Linked lists are considered both linear and non-linear data structures depending upon the application they are used for. When used for access strategies, it is considered as a linear data-structure. When used for data storage, it is considered a non-linear data structure.

Advantages of a linked list over an array are:

**Insertion and Deletion: **Insertion and deletion of nodes is an easier process, as we only update the address present in the next pointer of a node. It’s expensive to do the same in an array as room has to be created for the new elements and existing elements must be shifted.

**Dynamic Data Structure**: As a linked list is a dynamic data structure, there is no need to give initial size as it can grow and shrink at runtime by allocating and deallocating memory. However, the size is limited in an array as the number of elements is statically stored in the main memory.

**No wastage of memory**: As the size of a linked list can increase or decrease depending on the demands of the program, and memory is allocated only when required, there is no memory wasted. In the case of an array, there is memory wastage. For instance, if we declare an array of size 10 and store only five elements in it, then the space for five elements is wasted.

**Implementation: **Data structures like stack and queues are more easily implemented using a linked list than an array.

Some scenarios where we use **linked list** over array are:

- When we know the upper limit on the number of elements in advance
- When there are a large number of add or remove operations
- When there are no large number of random access of elements
- When we want to insert items in the middle of the list, such as when implementing priority queue

Some scenarios in which we use **array** over linked list are:

- When we need to index or randomly access elements
- When we know the number of elements in the array beforehand, so we can allocate the correct amount of memory
- When we need speed when iterating through all the elements in sequence
- When memory is a concern; filled arrays use less memory than linked lists, as each element in the array is the data but each linked list node requires the data as well as one or more pointers to the other elements in the linked list

In summary, we consider the requirements of space, time, and ease of implementation to decide whether to use a linked list or array.

Enroll today for the Java Certification Training Course to learn all about arrays, loops, operators, and more. Check out the course curriculum now!

It is a complex type (double ended LL) of a linked list in which a node has two links, one that connects to the next node in the sequence and another that connects to the previous node. This allows traversal across the data elements in both directions.

Examples include:

- A music playlist with next and previous navigation buttons
- The browser cache with BACK-FORWARD visited pages
- The
*undo*and*redo*functionality on a browser, where you can reverse the node to get to the previous page

All of the elements in a one-dimension array can be referenced using an indexed loop as the array subscript so that the counter runs from 0 to the array size minus one.

They are collections of data in memory that expand and contract to grow or shrink in size as a program runs. This enables the programmer to control exactly how much memory is to be utilized.

Examples are the dynamic array, linked list, stack, queue, and heap.

An algorithm is a step by step method of solving a problem or manipulating data. It defines a set of instructions to be executed in a certain order to get the desired output.

A problem can be solved in more than one way using several solution algorithms. Algorithm analysis provides an estimation of the required resources of an algorithm to solve a specific computational problem. The amount of time and space resources required to execute is also determined.

The time complexity of an algorithm quantifies the amount of time taken for an algorithm to run as a function of the length of the input. The space complexity quantifies the amount of space or memory taken by an algorithm, to run as a function of the length of the input.

A stack is an abstract data type that specifies a linear data structure, as in a real physical stack or piles where you can only take the top item off the stack in order to remove things. Thus, insertion (push) and deletion (pop) of items take place only at one end called *top of the stack*, with a particular order: LIFO (Last In First Out) or FILO (First In Last Out).

- Expression, evaluation, or conversion of evaluating prefix, postfix, and infix expressions
- Syntax parsing
- String reversal
- Parenthesis checking
- Backtracking

A queue is an abstract data type that specifies a linear data structure or an ordered list, using the First In First Out (FIFO) operation to access elements. Insert operations can be performed only at one end called REAR and delete operations can be performed only at the other end called FRONT.

To prioritize jobs as in the following scenarios:

- As waiting lists for a single shared resource in a printer, CPU, call center systems, or image uploads; where the first one entered is the first to be processed
- In the asynchronous transfer of data; or example pipes, file IO, and sockets
- As buffers in applications like MP3 media players and CD players
- To maintain the playlist in media players (to add or remove the songs)

It is a double-ended queue, or a data structure, where the elements can be inserted or deleted at both ends (FRONT and REAR).

**enqueue()**adds an element to the end of the queue**dequeue()**removes an element from the front of the queue**init()**is used for initializing the queue**isEmpty**tests for whether or not the queue is empty**Front**is used to get the value of the first data item but does not remove it**Rear**is used to get the last item from a queue

Generally, both heap and stack are part of memory and used in Java for different needs:

- Heap is more flexible than the stack because memory space can be dynamically allocated and de-allocated as needed
- Heap memory is used to store objects in Java, whereas stack memory is used to store local variables and function call
- Objects created in the heap are visible to all threads, whereas variables stored in stacks are only visible to the owner as private memory
- When using recursion, the size of heap memory is more whereas it quickly fill-ups stack memory

- Expression evaluation
- Backtracking
- Memory management
- Function calling and return

The acronyms stand for Pushing and Popping operations performed on a stack. These are ways data is stored and retrieved.

- PUSH is used to add an item to a stack, while POP is used to remove an item.
- PUSH takes two arguments, the name of the stack to add the data to and the value of the entry to be added. POP only needs the name of the stack.
- When the stack is filled and another PUSH command is issued, you get a stack overflow error, which means that the stack can no longer accommodate the last PUSH. In POP, a stack underflow error occurs when you’re trying to POP an already empty stack.

A single sorting algorithm can’t be considered best, as each algorithm is designed for a particular data structure and data set. However, the QuickSort algorithm is generally considered the fastest because it has the best performance for most inputs.

Its advantages over other sorting algorithms include the following:

**Cache-efficient:**It linearly scans and linearly partitions the input. This means we can make the most of every cache load.**Can skip some swaps:**As QuickSort is slightly sensitive to input that is in the right order, it can skip some swaps.**Efficient even in****worst-case input sets**, as the order is generally random.**Easy adaption**to already- or mostly-sorted inputs.**When speed takes priority**over stability.

Merge sort is a divide-and-conquer algorithm for sorting the data. It works by merging and sorting adjacent data to create bigger sorted lists, which are then merged recursively to form even bigger sorted lists until you have one single sorted list.

Selection sort works by repeatedly picking the smallest number in ascending order from the list and placing it at the beginning. This process is repeated moving toward the end of the list or sorted subarray.

Scan all items and find the smallest. Switch over the position as the first item. Repeat the selection sort on the remaining N-1 items. We always iterate forward (i from 0 to N-1) and swap with the smallest element (always i).

Time complexity: best case O(n2); worst O(n2)

Space complexity: worst O(1)

It is a type of non-linear data structure that consists of vertices or nodes connected by edges or arcs to enable storage or retrieval of data. Edges may be directed or undirected.

- Transport grids where stations are represented as vertices and routes as the edges of the graph
- Utility graphs of power or water, where vertices are connection points and edges the wires or pipes connecting them
- Social network graphs to determine the flow of information and hotspots (edges and vertices)
- Neural networks where vertices represent neurons and edges the synapses between them

In a sorted list:

- Binary search is more efficient than a linear search because we perform fewer comparisons. With linear search, we can only eliminate one element per comparison each time we fail to find the value we are looking for, but with the binary search, we eliminate half the set with each comparison.
- Binary search runs in O(log n) time compared to linear search’s O(n) time. This means that more of the elements present in the search array, the faster is binary search compared to a linear search.

An AVL (Adelson, Velskii, and Landi) tree is a height balancing binary search tree in which the difference of heights of the left and right subtrees of any node is less than or equal to one. This controls the height of the binary search tree by not letting it get skewed. This is used when working with a large data set, with continual pruning through insertion and deletion of data.

- Null is a value, whereas Void is a data type identifier
- Null indicates an empty value for a variable, whereas void indicates pointers that have no initial size
- Null means it never existed; Void means it existed but is not in effect

Dynamic memory allocation stores simple structured data types at runtime. It has the ability to combine separately allocated structured blocks to form composite structures that expand and contract as needed, thus helping manage data of data blocks of arbitrary size, in arbitrary order.

- Using hashing
- Using the visited nodes method (with or without modifying the basic linked list data structure)
- Floyd’s cycle-finding algorithm

- Sparse matrix
- Index generation

It is an array whose elements itself are arrays and may be of different dimensions and sizes.

It is a type of heap data structure where the value of the root node is greater than or equal to either of its child nodes.

The height of the node equals the number of edges in the longest path to the leaf from the node, where the depth of a leaf node is 0.

Know where you stand in your data science preparation and work toward filling the knowledge gap with the Data Science with R Practice Test.

Although you can expect many of these interview questions, you also need to invest some time into your learning curve. A good understanding of basic data structures and how to access elements from an array or linked list, or coding for data science, is equally important.

So now that you have an idea of possible interview questions, it’s time to get cracking and join a course like the Java Certification Training Course or the Data Science Master's Course to upskill your technical knowledge.

Name | Date | Place | |
---|---|---|---|

Data Science Certification Training - R Programming | 17 Apr -16 May 2020, Weekdays batch | Your City | View Details |

Data Science Certification Training - R Programming | 20 Apr -15 May 2020, Weekdays batch | New York City | View Details |

Data Science Certification Training - R Programming | 25 Apr -24 May 2020, Weekend batch | Atlanta | View Details |

Simplilearn is one of the world’s leading providers of online training for Digital Marketing, Cloud Computing, Project Management, Data Science, IT, Software Development, and many other emerging technologies.

Data Science Certification Training - R Programming

14204 Learners

Lifetime Access*

Post Graduate Program in Data Science

470 Learners

Lifetime Access*

Java Certification Training

820 Learners

Lifetime Access*

*Lifetime access to high-quality, self-paced e-learning content.

Explore Category- Disclaimer
- PMP, PMI, PMBOK, CAPM, PgMP, PfMP, ACP, PBA, RMP, SP, and OPM3 are registered marks of the Project Management Institute, Inc.