Ds02
Ds02
Hashing is a technique where search time is independent of the number of items or elements. In
this technique a hash function is used to generate an address from a key. The hash function takes
a key as input and returns the hash value of that key which is used as an address index in the
array.
h(k)=a;
Where h is hash function, k is the key, a is the hash value of the key.
Truncation Method
Midsquare Method
Folding Method
Division Method
Truncation Method
This is the simplest method for computing address from a key.In this method we take only a part
of the key as address.
Example:
Let us take some 8 digit keys and find addresses for them. Let the table size is 100 and we have
to take 2 rightmost digits for getting the hash table address. Suppose the keys are.
62394572,87135565,93457271,45393225.
This method is easy to compute but chances of collision are more because last two digits can be
same in more than one keys.
Midsquare Method
In this method the key is squared and some digits from the middle of this square are taken as
address.
Example:
Folding Method
In this technique the key is divided into different part where the length of each part is same as
that of the required address, except possibly the last part.
Example:
Let key is 123945234 and the table size is 1000 then we will broke this key as follows
Now we will add these broken parts. 123+945+234=1302. The sum is 1302, we will ignore the
final carry 1, so the address for the key 123945234 is 302.
In Modulo-Division method the key is divided by the table size and the remainder is taken as the
address of the hash table.
H (k) =k mod n
Example
Let the keys are 123, 945,234 and table size is 11 then the address of these keys will be.
123 % 11=2
945%11=10
235%11=4
Note: - Collisions can be minimized if the table size is taken to be a prime number.
a) Linear Probing
b) Quadratic Probing
c) Double Hashing
4, 5, 6, 7, 0, 1, 2, 3
Example:
Let the keys are 28, 47, 20, 36, 43, 23, 25, 54 and table size is 11 then
Describe the following term in a tree.
a) Level b) Height c) Degree.
Level:
Level of any node is defined as the distance of that node from the root. The level of root node is
always zero. Node B, C, M, E are at level 1.Nodes K,G,H,I,J,F,L are at level 2.Nodes
A,N,O,P,D,S are at level 3.
Height:
Height is also known as depth of the tree. The height of root node is one. Height of a tree is equal
to one more than the largest level number of tree. The height of the above tree is 4.
Degree:
The number of children of a node is called its degree. The degree of node R is 4, the degree of
node B is 3.The degree of node S is 0.The degree of a tree is the maximum degree of the node of
the tree. The degree of the above given tree is 4.
4) If a binary tree contains n nodes then its maximum possible height is n and minimum height
possible is log2 (n+1).
5) If n is the total no of nodes and e is the total no of edges then e=n-1.The tree must be non-
empty binary tree.
6) If n0 is the number of nodes with no child and n2 is the number of nodes with 2 children, then
n0=n2+1.
Complete binary tree:In a complete binary tree all the levels have maximum number of nodes
except possibly the last level.
The minimum no of nodes in a complete binary tree is 2h-1and the maximum number of nodes
possible is (2h– 1).Where h is the height of the tree.
- malloc()
- calloc()
- realloc()
1. malloc()
Example:
int *ptr;
ptr=(int *)malloc(4*sizeof(int));
It allocates the memory space to hold four integer values and the address of first byte is stored in
the pointer variable ptr. The allocated memory contains garbage value.
2. calloc()
Example:
int *ptr;
ptr=(int *)calloc(4, sizeof(int));
It allocates 4 blocks of memory and each block contains 2 bytes.
3. realloc()
We can increase or decrease the memory allocated by malloc() or calloc() function. The realloc()
function is used to change the size of the memory block. It changes the memory block without
destroying the old data.
Example:
int *ptr;
ptr=(int *)malloc(4*sizeof(int));
ptr=(int *)realloc(ptr,newsize);
This function takes two argument, first is a pointer to the block of memory that was previously
allocated by malloc() or calloc() and second argument is the new size of memory block.
ptr=(int *)realloc(ptr, 4*sizeof(int)); // newsize
- calloc() function takes two parameters but malloc() function takes only one parameter.
- Memory allocated by calloc() is initialized to zero while memory allocated by malloc() contains
garbage value.
Q.3 How will you free the memory that is allocated at run
time?
Memory is one of the most important resources and it is limited. The dynamically allocated
memory is not automatically released; it will exist till the end of program. So it is programmer’s
responsibility to free the memory after completion. The free() function is used to release the
memory that is allocated at run time.
Example:
free(ptr);
Here ptr is a pointer variable that contains the base address of a memory block created by
malloc() or calloc() function.
- Function calls.
- Reversal of a string.
- Checking validity of an expression containing nested parenthesis.
- Conversion of infix expression to postfix.
- The total number of left parenthesis should be equal to the total number of right parenthesis in
the expression.
- For every right parenthesis there should be a left parenthesis of the same time.
5. After scanning all the symbols of expression, if stack is empty then expression is valid else it
is invalid because left parenthesis is more than right parenthesis.
Example:
For the leaf node 12, 40, 65 and 98 left and right subtrees are empty so difference of heights of
their subtrees is zero.
For node 20 height of left subtree is 2 and height of right subtree is 3 so difference is 1.
For node 15 height of left subtree is 1 and height of right subtree is 0 so difference is 1.
For node 57 height of left subtree is 1 and height of right subtree is 2 so difference is 1.
For node 78 height of left subtree is 1 and height of right subtree is 1 so difference is 0.
Each node of an AVL tree has a balance factor, which is defined as the difference between the
heights of left subtree and right subtree of a node.
Balance factor of a node=Height of its left subtree - Height of its right subtree.
In AVL tree possible values for the balance factor of any node are -1, 0, 1.
- Right Rotation
- Left Rotation
Fig: Right Rotation
Data structure interview questions - posted on June 27, 2013 at 15:55 PM by Kshipra Singh
Latest answer: The scheme of organizing related information is known as ‘data structure’. The
types of data structure are: Lists: A group of similar items with connectivity to the previous
or/and next data items.................
Read answer
Data structure interview test (50 questions) - contributed by Sunita Bangal, Professor IIMP
(MCA)
Data structure interview test (50 questions) - contributed by Sunita Bangal, Professor IIMP
(MCA)
Latest answer: Linear data structure: A linear data structure traverses the data elements
sequentially, in which only one data element can directly be reached. Ex: Arrays, Linked
Lists...............
Read answer
3.Define in brief an array. What are the types of array operations?
5.Define an algorithm. What are the properties of an algorithm? What are the types of algorithms?
Latest answer: Algorithm: A step by step process to get the solution for a well defined
problem..............
Read answer
Latest answer: The process of attempting for solving a problem which finds successive
approximations for solution, starting from an initial guess.............
Read answer
Latest answer: Recursive algorithm is a method of simplification that divides the problem into
sub-problems of the same nature. The result of one recursion is the input for the next
recursion...............
Read answer
Latest answer: In Huffman Algorithm, a set of nodes assigned with values if fed to the
algorithm................
Read answer
Latest answer: Quick sort employs the ‘divide and conquer’ concept by dividing the list of
elements into two sub elements............
Read answer
Latest answer: Stack – Represents the collection of elements in Last In First Out order.
Operations includes testing null stack, finding the top element in the stack, removal of top most
element and adding elements on the top of the stack..............
Read answer
Latest answer: A stack is represented as a pointer. The reason is that, it has a head pointer
which points to the top of the stack..............
Read answer
Latest answer: Recursion is an approach in which a function calls itself with an argument. Upon
reaching a termination condition, the control returns to the calling function...............
Read answer
Latest answer: Different elements can be inserted into a stack. This is possible by implementing
union / structure data type............
Read answer
Latest answer: A linked list is a dynamic data structure. It consists of a sequence of data
elements and a reference to the next record in the sequence. Stacks, queues, hash tables, linear
equations, prefix and post fix operations..................
Read answer
Latest answer: Step 1: Compare the current node in the unsorted list with every element in the
rest of the list. If the current element is more than any other element go to step 2 otherwise go to
step 3..............
Read answer
17.What is sequential search? What is the average number of comparisons in a sequential search?
Latest answer: Sequential search: Searching an element in an array, the search starts from the
first element till the last element..............
Read answer
Latest answer: Binary Search: Binary search is the process of locating an element in a sorted
list. The search starts by dividing the list into two parts...............
Read answer
Test your data structure knowledge with our multiple choice questions!
Data Structure interview - posted on September 30, 2009 at 15:50 AM by Vidya Sagar
19. What is a data structure? What are the types of data structures? Briefly explain them
The scheme of organizing related information is known as ‘data structure’. The types of data
structure are:
Lists: A group of similar items with connectivity to the previous or/and next data items.
Arrays: A set of homogeneous values
Records: A set of fields, where each field consists of data belongs to one data type.
Trees: A data structure where the data is organized in a hierarchical structure. This type of data
structure follows the sorted order of insertion, deletion and modification of data items.
Tables: Data is persisted in the form of rows and columns. These are similar to records, where
the result or manipulation of data is reflected for the whole table.
Linear data structure: A linear data structure traverses the data elements sequentially, in which
only one data element can directly be reached. Ex: Arrays, Linked Lists
Non-Linear data structure: Every data item is attached to several other data items in a way that
is specific for reflecting relationships. The data items are not arranged in a sequential structure.
Ex: Trees, Graphs
21. Define in brief an array. What are the types of array operations?
Arrays are used for storing the data until the application expires in the main memory of the
computer system. So that, the elements can be accessed at any time. The operations are:
- Adding elements
- Sorting elements
- Searching elements
- Re-arranging the elements
- Performing matrix operations
- Pre-fix and post-fix operations
A matrix is a representation of certain rows and columns, to persist homogeneous data. It can
also be called as double-dimensioned array.
Uses:
23. Define an algorithm. What are the properties of an algorithm? What are the types of
algorithms?
Algorithm: A step by step process to get the solution for a well defined problem.
Properties of an algorithm:
Types of algorithms:
The process of attempting for solving a problem which finds successive approximations for
solution, starting from an initial guess. The result of repeated calculations is a sequence of
approximate values for the quantities of interest.
Recursive algorithm is a method of simplification that divides the problem into sub-problems of
the same nature. The result of one recursion is the input for the next recursion. The repletion is in
the self-similar fashion. The algorithm calls itself with smaller input values and obtains the
results by simply performing the operations on these smaller values. Generation of factorial,
Fibonacci number series are the examples of recursive algorithms.
Quick sort employs the ‘divide and conquer’ concept by dividing the list of elements into two
sub elements.
Merge Sort: A comparison based sorting algorithm. The input order is preserved in the sorted
output.
Quick Sort: The best sorting algorithm which implements the ‘divide and conquer’ concept. It
first divides the list into two parts by picking an element a ’pivot’. It then arranges the elements
those are smaller than pivot into one sub list and the elements those are greater than pivot into
one sub list by keeping the pivot in its original place.
Operations include testing null queue, finding the next element, removal of elements and
inserting the elements from the queue.
A stack is represented as a pointer. The reason is that, it has a head pointer which points to the
top of the stack. The stack operations are performed using the head pointer. Hence, the stack can
be described as a pointer.
30. Explain the terms Base case, Recursive case, Binding Time, Run-Time Stack and Tail
Recursion.
Base case: A case in recursion, in which the answer is known when the termination for a
recursive condition is to unwind back.
Run-time Stack: A run time stack used for saving the frame stack of a function when every
recursion or every call occurs.
Tail Recursion: It is a situation where a single recursive call is consisted by a function, and it is
the final statement to be executed. It can be replaced by iteration.
A linked list is a dynamic data structure. It consists of a sequence of data elements and a
reference to the next record in the sequence. Stacks, queues, hash tables, linear equations, prefix
and post fix operations. The order of linked items is different that of arrays. The insertion or
deletion operations are constant in number.
Singly linked list: It has only head part and corresponding references to the next nodes.
Doubly linked list: A linked list which both head and tail parts, thus allowing the traversal in bi-
directional fashion. Except the first node, the head node refers to the previous node.
Circular linked list: A linked list whose last node has reference to the first node.
Step 1: Compare the current node in the unsorted list with every element in the rest of the list. If
the current element is more than any other element go to step 2 otherwise go to step 3.
Step 2: Position the element with higher value after the position of the current element. Compare
the next element. Go to step1 if an element exists, else stop the process.
Step 3: If the list is already in sorted order, insert the current node at the end of the list. Compare
the next element, if any and go to step 1 or quit.
35. What is sequential search? What is the average number of comparisons in a sequential
search?
Sequential search: Searching an element in an array, the search starts from the first element till
the last element.
The average number of comparisons in a sequential search is (N+1)/2 where N is the size of the
array. If the element is in the 1st position, the number of comparisons will be 1 and if the
element is in the last position, the number of comparisons will be N.
Fibonacci Search: Fibonacci search is a process of searching a sorted array by utilizing divide
and conquer algorithm. Fibonacci search examines locations whose addresses have lower
dispersion. When the search element has non-uniform access memory storage, the Fibonacci
search algorithm reduces the average time needed for accessing a storage location
37. What is the method to find the complexity of an algorithm?
Complexity of an algorithm can be found out by analyzing the resources like memory, processor,
etc. The computational time is also used to find the complexity of an algorithm. The running
time through which the program is processed requires the function of the size of the input. The
complexity is measured by number of steps that has to be executed for a particular input. The
space complexity and the time complexity are the two main methods which allow the user to
know the complexity of the algorithm and allow user to make it more optimized.
The space complexity defines the storage capacity for the input data. It defines the amount of
memory that is required to run a program to completion. The complexity like this depends on the
size of the input data and the function that is used for the input size 'n'.
The time complexity deals with the amount of time required by a program to complete the whole
process of execution. The time complexity allows creating optimized code and allowing user to
calculate it before writing their own functions. The time complexity can be made such that a
program can be optimized on the basis of the chosen method.
39. Write an algorithm to show the postfix expression with the input given as : a b + c d +*f ? .
The postfix expression deals with the expression where the operators are being written after their
operands. The evaluation of these operators is being done from left-to-right. The algorithm that is
used to show the input of a b + c d +*f ? is as follows:
40. Write an algorithm through which the inserting and deleting of elements can take place
in circular queue?
Circular queues are very important as it allows the element to circulate. In this queue rear end
reaches the end and the first element in the list will become the rear of that queue. In this queue
the front element can only become the rear element if and only if front has moved forward in the
array. The algorithm that is used to represent it is as follows:
insert(queue,n,front,rear,item)
This procedure inserts an element item into a queue.
1. If front = 1 and rear = n, or if front = rear
+ 1, then:
Write: overflow, and return
2. [find new value of rear]
If front = NULL , then : [queue initially empty.]
Set front = 1 and rear=1.
Else if rear = n, then:
Set rear=1.
Else:
Set rear = rear + 1.
[end of structure.]
3. Set queue[rear] = item. [this inserts new element.]
4.Return to the beginning.
Expression trees are made up of operands like constants and variable names. The nodes also
contain the operators. The tree is a binary tree on which all the binary operations are being
performed. It consists of all the nodes consisting of two children. It is possible for a node to
consist of only one child and other operators that can be used to evaluate the expression tree. The
operator looks at the root value that is obtained by recursive evaluation of the subtrees. The
expression tree is being handled to show the relationship between the operator and the operand.
42. How can a binary tree be represented using the rotation?
Binary tree can have rotations and it can be done by inserting a node in the
binary search tree. There is a balancing factor that is required and it will be
calculated like height of left subtree-height of right subtree. Each node in this
case has 0,1,-1 factor value and beyond that there will be no modification
possible to be done in the tree. If the balancing factor comes out to be either +2
or -2 then the tree becomes unbalanced. The rotation allows the tree to be
balanced and it can be done with the left rotation and right rotation. The
rotation also helps the searching to be quite faster than using any other tree.
Using the balance factor a tree can be managed and rotation can be applied to
the whole system to adjust and balance the tree.
43. What is the difference between B tree and Binary search tree?
Binary tree consists of only fixed number of keys and children, whereas B tree
consists of variable number of keys and children. Binary tree keys are stored in
decreasing order, whereas B tree consists of the keys and children in non-
decreasing order.
Binary tree doesn't consists of associated child properties whereas B tree consists
of keys has an association with all the nodes with the keys that are less than or
equal to the preceding key. Binary tree doesn't have minimization factor concept,
whereas B tree has the concept of minimization factor where each node has
minimum number of allowable children.
Threaded binary tree consists of a node that is in the binary tree and having no
left or right child. The child that comes in the end is also called as leaf node then
if there is no child present, it will be represented by the null pointers. The space
that is occupied by null entries can be used to store valuable information about
the node that is consisting of the child and the root node information. There is a
special pointer that is used to point to the higher node in the tree also called as
ancestor. These pointers are termed as threads and the whole representation is
called as threaded binary tree. The binary tree can be represented in in-order,
pre-order and post-order form. Every node in this type of tree doesn't have a
right child. This doesn't allow the recursion of the tree. The code that is used to
show the implementation is:
struct NODE
{
struct NODE *leftchild;
int node_value;
struct NODE *rightchild;
struct NODE *thread;
}
46. Explain the sorting algorithm that is most suitable to be used with single linked list?
The sorting algorithm that is most suitable with the single link list is the simple
insertion sort. This consists of an array and link of pointers, where the pointers
are pointing to each of the element in the array. For example: l[i] = i + 1 for 0 < =
i < n-1 and l[n-1] = -1.
The linear link list can be pointed by the external pointer which initialized it to 0.
To insert the nth element in the list the traversing time gets reduced and until the
list is being sorted out completely the process doesn't end. The array that has to
be traversed x[k] to sort the element and put them in the list. If the sorting is
done then it reduces the time of the insertion of an element and time for
searching for a particular element at proper position.
47. What are the standard ways in which a graph can be traversed?
There are two standard ways through which a graph can be traversed and these
are:
i. The depth-first traversal: allow the graph to be traversed from a given point
and then goes to the other points. The starting position is being defined as it
doesn't consist of any root so, there is a specific point that is chosen to begin the
traversing. In this the visits takes place at each vertex and then recursive action
is taken to visit all the vertices adjacent to the node that is being visited. The
graph can consists of cycles, but there is always a condition that the vertex has to
be visited only once.
ii. The breadth-first traversal: allow the graph to be traverse one level by
another level. Breadth-first visits all the nodes from the depth 0 and it consists of
a root. The vertex that has to be visited has to be specified that will be traversed.
The length of the vertex has to be defined to find the shortest path to the given
vertex. Breadth-first traverse the starting vertex and then all the vertices that is
been adjacent to it.
Abstract data type allows the user to write the code without even worrying about
the type of data being used. It is a tool that specifies the logical properties of the
data type. ADT is a type consisting set of operations that are called as interface.
This interface is the only mechanism through which the data type can be
accessed. It defines the new type of instance that is been created by operating on
different data types. There is always some additional information on which ADT
acts upon. It specifies the instance of the creation time. The abstract data type
can be declared as:
LIST<data type> variable name;
Max heap is also known as descending heap consisting of the objects in a heap
list with some keys. It is of size n and will be of the form of complete binary tree
that is also of nodes n. In this max-heap each node is less than or equal to the
content of its parent. It represents the sequential complete binary tree with the
formula to calculate as:
max[j] <= max[(j-1)/2] for 0 <= ((j-1)/2) < j <= n-1
Max-heap contains the root element as the highest element in the heap and from
there the descending elements will be shown on the children node. It will also be
traversed in an orderly manner and will be accessed by accessing the root first
then their children nodes.
Ordered list is a container holding the sequence of objects. In this each object is
having a unique position in a particular sequence. The operations that are being
provided and performed on the ordered list include:
FindPosition: is used to find the position of the object in an ordered list.
Operator[]: is used to access the position of the object in the ordered list.
withdraw(Position&): is used to remove the object from a given position in an
ordered list.
InsertAfter: is used to insert an object after some other object or on some
position in the ordered list.
InsertBefore: is used to insert the object in an ordered list at a defined position in
an array of the ordered list.
52. Write a program to show the insertion and deletion of an element in an array using the
position
To insert the element or delete the element, there is a requirement to find out the
exact location as array is a group of linear characters, so it is very important to
find the position of the element in an array before performing the actions on
them. The program explains the insertion and deletion operations performed on
an array of elements:
void insert ( int *arr, int pos, int num )
/* This inserts an element at a given position*/
{
int i ;
for ( i = MAX - 1 ; i > = pos ; i-- )
arr[i] = arr[i - 1] ;
arr[i] = num ;
// This tells about the shifting of an element to the right
}// function of the insertion ends here
void del ( int *arr, int pos )
/* This function is used to delete the element at a given position*/
{
int i ;
for ( i = pos ; i < MAX ; i++ )
arr[i - 1] = arr[i] ;
arr[i - 1] = 0 ;
}
53. Write an algorithm to show the procedure of insertion into a B-tree?
54. Write an algorithm that counts number of nodes in the circular linked list
Circular linked list is a list in which the insertion and deletion can be done in two
ways. There is a provision to count the number of nodes just by keeping a count
variable to count the data that is being inserted in the circular list. The algorithm
is given to show the count of the nodes in the circular linked list.