You are on page 1of 8

DS UT2 QB

1. Explain linked list as an ADT

A linked list is a data structure that consists of a sequence of elements, each


containing a reference (or "link") to the next element in the sequence. The first
element is typically referred to as the "head" of the list, and the last element is the
"tail." Linked lists can be used to implement various abstract data types, such as
stacks, queues, and associative arrays. Some common operations on a linked list
include:

Insertion: Adding a new element to the list at a specified position

Deletion: Removing an element from the list at a specified position

Traversal: Visiting each element in the list in order

Search: Finding a specific element in the list

Reverse: Reversing the order of elements in the list.

One of the main advantages of linked lists is that they allow for constant-time
insertions and deletions at any position in the list, because only the references to the
surrounding elements need to be updated. However, they have a slower access time
than arrays, as the elements are not stored in contiguous memory locations.

2. Difference between singly linked list and doubly linked list

A singly linked list is a type of linked list where each element, or node, has a
reference to the next node in the sequence, but not to the previous one. It's called
singly because each node has one reference, to the next node in the list.

On the other hand, a doubly linked list is a type of linked list where each node has a
reference to both the next and the previous nodes in the sequence. It's called doubly
because each node has two references, one to the next and one to the previous
node in the list.
The main difference between these two types of linked lists is that doubly linked lists
allow for traversal in both directions, while singly linked lists can only be traversed in
one direction. This makes doubly linked list more efficient for certain types of
operations, such as traversing a list in reverse order or deleting a node given a
pointer to the previous node.

DS UT2 QB 1
Other differences are:

A singly linked list takes up less memory because each node only needs to store
a single reference.

A doubly linked list is slightly more complex to implement than a singly linked list,
as it requires additional logic to handle the references to previous elements.

Doubly linked list allows for constant-time insertions and deletions at any
position in the list, as you don't need to traverse the entire list to access the
previous node.

Some algorithms may be more efficient when implemented using doubly linked
lists.

In summary, singly linked list is used when memory is a concern and the operations
are simple, doubly linked list is used when the operations are more complex and
needs more flexibility such as traversing in both directions, or constant-time
insertions and deletions.

3. Explain basic operations performed on a linked list

A linked list is a data structure that consists of a sequence of elements, each


containing a reference (or "link") to the next element in the sequence. Some
common operations that can be performed on a linked list include:

1. Insertion: Adding a new element to the list at a specified position. This operation
typically involves allocating memory for the new element, setting the links for the
surrounding elements to include the new element, and updating the head or tail
pointers as necessary.

2. Deletion: Removing an element from the list at a specified position. This


operation typically involves updating the links for the surrounding elements to
exclude the element to be deleted, freeing the memory used by the element, and
updating the head or tail pointers as necessary.

3. Traversal: Visiting each element in the list in order. This operation typically
involves starting at the head of the list and following the links to each
subsequent element until the end of the list is reached.

4. Search: Finding a specific element in the list. This operation typically involves
starting at the head of the list and following the links until the desired element is
found or the end of the list is reached.

DS UT2 QB 2
5. Reverse: Reversing the order of elements in the list. This operation typically
involves swapping the links between elements and updating the head and tail
pointers.

6. Counting elements: Counting the total number of elements in the list. This
operation typically involves starting at the head of the list and following the links
until the end of the list is reached and counting the number of elements.

7. Find the nth element from the end: This operation typically involves traversing
the list twice, first to find the total number of elements and then again to find the
nth element from the end.

8. Sorting: Sorting the elements of the list in a specific order. This operation
typically involves applying sorting algorithms such as bubble sort or quick sort on
the elements of the list.

The efficiency of these operations can vary depending on the implementation of the
linked list and the specific operation being performed.

4. List various applications of a circular linked list

Circular linked list is a variation of linked list in which the last node of the list points
back to the first node, forming a circular loop. Here are some of the common
applications of circular linked lists:

1. Circular buffer: Circular linked lists can be used to implement circular buffers,
which are often used in real-time systems for storing and manipulating streaming
data.

2. Computer operating systems: Many operating systems use circular linked lists
for managing processes and scheduling tasks.

3. Audio and video playback: Circular linked lists can be used to implement circular
playlists for audio and video playback.

4. Virtual memory management: Circular linked lists can be used to implement


circular page replacement algorithms in virtual memory management.

5. Game development: Circular linked lists can be used to implement circular linked
lists for game development such as managing the game entities.

6. Hash tables: Circular linked lists can be used to implement open addressing in
hash tables, a method for resolving collisions.

DS UT2 QB 3
7. LRU Cache: Circular linked list can be used to implement Least Recently Used
(LRU) Cache.

8. Graphics: Circular linked lists can be used for storing and manipulating shapes
in computer graphics.

In summary, Circular linked lists can be useful in many real-world applications where
a circular loop of data needs to be handled, such as in scheduling and memory
management, audio/video playback, and game development.

5. Difference between array and linked list

An array and a linked list are both data structures that can be used to store and
manage a collection of data, but they have some key differences:

1. Memory layout: An array is a contiguous block of memory, where all elements


are stored in consecutive memory locations. A linked list, on the other hand,
consists of a sequence of elements, each with a reference (or "link") to the next
element in the sequence. The elements in a linked list do not need to be stored
in consecutive memory locations.

2. Size: The size of an array is fixed when it is created, and can not be changed. A
linked list can grow or shrink in size dynamically, as elements are added or
removed.

3. Access time: The time it takes to access an element in an array is constant, or


O(1), because the memory location of an element can be calculated by its index.
The time it takes to access an element in a linked list is linear, or O(n), because
the elements are not stored in consecutive memory locations and the element
must be found by traversing the list.

4. Insertion and deletion: Inserting or deleting an element from an array requires


moving all elements after the insertion or deletion point, which can be an
expensive operation. Insertion and deletion in a linked list is constant time, or
O(1) because only the links between elements need to be updated.

5. Memory usage: An array uses less memory than a linked list because it doesn't
require extra memory for storing references.

6. Random access: Random access is possible in an array because the memory


location of an element can be calculated by its index. Linked list does not
support random access as it requires traversing from the head of the list

DS UT2 QB 4
In summary, an array is best used when the size of the collection is known in
advance and when fast random access to elements is required. A linked list is best
used when the size of the collection may change frequently and when fast insertion
and deletion operations are required.

6. Define binary tree, what are the different types of binary trees

A binary tree is a tree data structure in which each node has at most two children,
which are referred to as the left child and the right child. The topmost node in a
binary tree is called the root. A binary tree can be empty, meaning it has no nodes.

There are several different types of binary trees, including:

1. Full Binary Tree: A full binary tree is a binary tree in which every node has
exactly zero or two children.

2. Complete Binary Tree: A complete binary tree is a binary tree in which every
level is completely filled, except for perhaps the last level, which is filled from left
to right.

3. Perfect Binary Tree: A perfect binary tree is a complete binary tree in which all
leaf nodes are at the same level and every parent has two children.

4. Balanced Binary Tree: A balanced binary tree is a binary tree in which the height
of the left and right subtrees of any node differ by at most 1. There are different
types of balanced binary tree such as AVL tree, Red-Black tree, etc.

5. Skewed Binary Tree: A skewed binary tree is a binary tree in which the left or
right subtree is empty or a leaf node. These can be of two types: Left-Skewed
and Right-Skewed.

6. Extended Binary Tree: An extended binary tree is a binary tree which can have
an arbitrary number of children for each node.

Binary trees are used in many applications including: searching and sorting
algorithms, expression parsing, file systems, and many other applications that
require fast searching and sorting.

In summary, Binary tree is a tree data structure in which each node has at most two
children, and it can be of different types such as full binary tree, complete binary
tree, perfect binary tree, balanced binary tree, skewed binary tree, extended binary
tree. Each type has its own characteristics and is suitable for different use cases.

DS UT2 QB 5
7. Explain B tree and B+ tree

A B-tree and a B+ tree are both types of self-balancing search trees, which are used
to efficiently store and retrieve data in a large, randomly-accessed file. They are
similar in many ways, but have some key differences:

1. B-Tree: A B-tree is a multi-level index structure that keeps data sorted and
allows searches, sequential access, insertions, and deletions in logarithmic time.
The number of children per node in a B-tree is limited to a range, usually
between d and 2d, where d is known as the order of the B-tree. This allows the
tree to remain balanced and avoid the worst-case performance of a simple
binary search tree. B-trees are commonly used in databases and file systems to
store large amounts of data.

2. B+ Tree: A B+ tree is a variation of B-tree where all the data is stored in the leaf
nodes and leaf nodes are linked together to form a doubly linked list. This allows
for efficient sequential access of the data. B+ trees are typically used in
databases and file systems to index large amounts of data.

3. B-tree is mainly used for storage on disk, where each node of the tree is stored
on a separate block on the disk. B+ tree is mainly used for in-memory storage,
where each node of the tree is stored in memory

4. In B-tree, each internal node has a variable number of keys and children, while
in B+ tree, each internal node has a fixed number of keys and children

5. In B-Tree, all the data is stored in both leaf and non-leaf nodes, while in B+ tree,
all data is only stored in leaf nodes.

In summary, Both B-tree and B+ tree are self-balancing search trees which are used
to efficiently store and retrieve data in a large, randomly-accessed file. B-tree is
mainly used for storage on disk, while B+ tree is mainly used for in-memory storage.
B-tree stores data in both leaf and non-leaf nodes, while B+ tree stores data only in
leaf nodes.

8. Explain Huffman encoding with an example

Huffman encoding is a lossless data compression technique that assigns unique


binary code to each character in the input data, with the length of the code being
inversely proportional to the frequency of the character. It uses a specific type of
binary tree called a Huffman tree, to represent the relative frequencies of the
characters. The characters that appear more frequently in the input data are

DS UT2 QB 6
assigned shorter codes, while characters that appear less frequently are assigned
longer codes. The Huffman encoded string is usually shorter than the original string,
it is commonly used in text data compression.

Example:
Input String: "aaabbbccc"

1. Calculate the frequency of each character:


a: 3
b: 3
c: 3

2. Create a leaf node for each character:


a: 3
b: 3
c: 3

3. Build the Huffman tree:

*
/
* c
/
a b

1. Assign binary code to each character:


a: 0
b: 10
c: 11

2. Compress the input string:


Original: "aaabbbccc"
Encoded: "000110011"

In this example, the Huffman encoded string is shorter than the original string, as the
most frequent characters are assigned shorter codes.

9. Explain various rotations in an AVL tree

An AVL tree is a self-balancing binary search tree, where the difference between the
heights of left and right subtrees for every node is at most 1. When the balance
factor of a node becomes greater than 1 or less than -1, the tree becomes

DS UT2 QB 7
unbalanced and a rotation is needed to restore the balance. There are four types of
rotations in AVL tree:

1. Left Rotation: It is performed when the right subtree of a node is taller than the
left subtree. In this rotation, the right child of the node becomes the new root,
and the node is added as the left child of the new root. This operation helps to
balance the tree by moving the heavy subtree to the left.

2. Right Rotation: It is performed when the left subtree of a node is taller than the
right subtree. In this rotation, the left child of the node becomes the new root,
and the node is added as the right child of the new root. This operation helps to
balance the tree by moving the heavy subtree to the right.

3. Left-Right Rotation (or Double Left Rotation): It is performed when the left
subtree of the right child of a node is taller than the right subtree. This rotation
consists of a left rotation on the right child of the node, followed by a right
rotation on the node.

4. Right-Left Rotation (or Double Right Rotation): It is performed when the right
subtree of the left child of a node is taller than the left subtree. This rotation
consists of a right rotation on the left child of the node, followed by a left rotation
on the node.

Each of these rotations helps to restore the balance of the tree, ensuring that the
height of the tree remains logarithmic and the search, insert and delete operations
can be performed efficiently.

DS UT2 QB 8

You might also like