0% found this document useful (0 votes)
2 views19 pages

Module 3 DSA

The document provides a comprehensive overview of linked lists, including their structure, types, and basic operations such as insertion, deletion, and display. It details the processes for managing both single and circular linked lists, outlining specific steps for various operations. Additionally, it explains the differences between simple, doubly, and circular linked lists, emphasizing their unique characteristics and functionalities.

Uploaded by

radhearcade2000
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views19 pages

Module 3 DSA

The document provides a comprehensive overview of linked lists, including their structure, types, and basic operations such as insertion, deletion, and display. It details the processes for managing both single and circular linked lists, outlining specific steps for various operations. Additionally, it explains the differences between simple, doubly, and circular linked lists, emphasizing their unique characteristics and functionalities.

Uploaded by

radhearcade2000
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

Module 3

Linked List
A linked list is a sequence of data structures, which are connected together via links.
Linked List is a sequence of links which contains items. Each link contains a
connection to another link. Linked list is the second most-used data structure after
array. Following are the important terms to understand the concept of Linked List.
● Link − Each link of a linked list can store a data called an element.
● Next − Each link of a linked list contains a link to the next link called Next.
● LinkedList − A Linked List contains the connection link to the first link called
First.

Linked List Representation


Linked list can be visualized as a chain of nodes, where every node points to the
next node.

As per the above illustration, following are the important points to be considered.
● Linked List contains a link element called first.
● Each link carries a data field(s) and a link field called next.
● Each link is linked with its next link using its next link.
● Last link carries a link as null to mark the end of the list.

Types of Linked List


Following are the various types of linked list.
● Simple Linked List − Item navigation is forward only.
● Doubly Linked List − Items can be navigated forward and backward.
● Circular Linked List − Last item contains link of the first element as next and
the first element has a link to the last element as previous.

Basic Operations
Following are the basic operations supported by a list.
● Insertion − Adds an element at the beginning of the list.
● Deletion − Deletes an element at the beginning of the list.
● Display − Displays the complete list.
● Search − Searches an element using the given key.
● Delete − Deletes an element using the given key.

Insertion Operation
Adding a new node in linked list is a more than one step activity. We shall learn this
with diagrams here. First, create a node using the same structure and find the
location where it has to be inserted.

Imagine that we are inserting a node B (NewNode), between A (LeftNode)


and C (RightNode). Then point [Link] to C −
[Link] −> RightNode;
It should look like this −

Now, the next node at the left should point to the new node.
[Link] −> NewNode;
This will put the new node in the middle of the two. The new list should look like this

Similar steps should be taken if the node is being inserted at the beginning of the
list. While inserting it at the end, the second last node of the list should point to the
new node and the new node will point to NULL.

Deletion Operation
Deletion is also a more than one step process. We shall learn with pictorial
representation. First, locate the target node to be removed, by using searching
algorithms.

The left (previous) node of the target node now should point to the next node of the
target node −
[Link] −> [Link];
This will remove the link that was pointing to the target node. Now, using the
following code, we will remove what the target node is pointing at.
[Link] −> NULL;

We need to use the deleted node. We can keep that in memory otherwise we can
simply deallocate memory and wipe off the target node completely.

Algorithm of Linked list : Insertion

Insertion
In a single linked list, the insertion operation can be performed in three ways. They are as follows...

1. Inserting At Beginning of the list


2. Inserting At End of the list
3. Inserting At Specific location in the list

Inserting At Beginning of the list


We can use the following steps to insert a new node at beginning of the single linked list...

● Step 1 - Create a newNode with given value.


● Step 2 - Check whether list is Empty (head == NULL)
● Step 3 - If it is Empty then, set newNode→next = NULL and head = newNode.
● Step 4 - If it is Not Empty then, set newNode→next = head and head = newNode.

Inserting At End of the list


We can use the following steps to insert a new node at end of the single linked list...

● Step 1 - Create a newNode with given value and newNode → next as NULL.
● Step 2 - Check whether list is Empty (head == NULL).
● Step 3 - If it is Empty then, set head = newNode.
● Step 4 - If it is Not Empty then, define a node pointer temp and initialize with head.
● Step 5 - Keep moving the temp to its next node until it reaches to the last node in the list
(until temp → next is equal to NULL).
● Step 6 - Set temp → next = newNode.

Inserting At Specific location in the list (After a Node)


We can use the following steps to insert a new node after a node in the single linked list...

● Step 1 - Create a newNode with given value.


● Step 2 - Check whether list is Empty (head == NULL)
● Step 3 - If it is Empty then, set newNode → next = NULL and head = newNode.
● Step 4 - If it is Not Empty then, define a node pointer temp and initialize with head.
● Step 5 - Keep moving the temp to its next node until it reaches to the node after which we
want to insert the newNode (until temp1 → data is equal to location, here location is the
node value after which we want to insert the newNode).
● Step 6 - Every time check whether temp is reached to last node or not. If it is reached to last
node then display 'Given node is not found in the list!!! Insertion not possible!!!' and
terminate the function. Otherwise move the temp to next node.
● Step 7 - Finally, Set 'newNode → next = temp → next' and 'temp → next = newNode'

Deletion
In a single linked list, the deletion operation can be performed in three ways. They are as follows...

1. Deleting from Beginning of the list


2. Deleting from End of the list
3. Deleting a Specific Node

Deleting from Beginning of the list


We can use the following steps to delete a node from beginning of the single linked list...

● Step 1 - Check whether list is Empty (head == NULL)


● Step 2 - If it is Empty then, display 'List is Empty!!! Deletion is not possible' and
terminate the function.
● Step 3 - If it is Not Empty then, define a Node pointer 'temp' and initialize with head.
● Step 4 - Check whether list is having only one node (temp → next == NULL)
● Step 5 - If it is TRUE then set head = NULL and delete temp (Setting Empty list conditions)
● Step 6 - If it is FALSE then set head = temp → next, and delete temp.

Deleting from End of the list


We can use the following steps to delete a node from end of the single linked list...

● Step 1 - Check whether list is Empty (head == NULL)


● Step 2 - If it is Empty then, display 'List is Empty!!! Deletion is not possible' and
terminate the function.
● Step 3 - If it is Not Empty then, define two Node pointers 'temp1' and 'temp2' and initialize
'temp1' with head.
● Step 4 - Check whether list has only one Node (temp1 → next == NULL)
● Step 5 - If it is TRUE. Then, set head = NULL and delete temp1. And terminate the function.
(Setting Empty list condition)
● Step 6 - If it is FALSE. Then, set 'temp2 = temp1 ' and move temp1 to its next node.
Repeat the same until it reaches to the last node in the list. (until temp1 → next == NULL)
● Step 7 - Finally, Set temp2 → next = NULL and delete temp1.

Deleting a Specific Node from the list


We can use the following steps to delete a specific node from the single linked list...

● Step 1 - Check whether list is Empty (head == NULL)


● Step 2 - If it is Empty then, display 'List is Empty!!! Deletion is not possible' and
terminate the function.
● Step 3 - If it is Not Empty then, define two Node pointers 'temp1' and 'temp2' and initialize
'temp1' with head.
● Step 4 - Keep moving the temp1 until it reaches to the exact node to be deleted or to the last
node. And every time set 'temp2 = temp1' before moving the 'temp1' to its next node.
● Step 5 - If it is reached to the last node then display 'Given node not found in the list!
Deletion not possible!!!'. And terminate the function.
● Step 6 - If it is reached to the exact node which we want to delete, then check whether list is
having only one node or not
● Step 7 - If list has only one node and that is the node to be deleted, then
set head = NULL and delete temp1 (free(temp1)).
● Step 8 - If list contains multiple nodes, then check whether temp1 is the first node in the list
(temp1 == head).
● Step 9 - If temp1 is the first node then move the head to the next node (head = head →
next) and delete temp1.
● Step 10 - If temp1 is not first node then check whether it is last node in the list (temp1 →
next == NULL).
● Step 11 - If temp1 is last node then set temp2 → next = NULL and
delete temp1 (free(temp1)).
● Step 12 - If temp1 is not first node and not last node then set temp2 → next = temp1 →
next and delete temp1 (free(temp1)).

Displaying a Single Linked List


We can use the following steps to display the elements of a single linked list...

● Step 1 - Check whether list is Empty (head == NULL)


● Step 2 - If it is Empty then, display 'List is Empty!!!' and terminate the function.
● Step 3 - If it is Not Empty then, define a Node pointer 'temp' and initialize with head.
● Step 4 - Keep displaying temp → data with an arrow (--->) until temp reaches to the last
node
● Step 5 - Finally display temp → data with arrow pointing to NULL (temp → data --->
NULL).
Circular Linked List

What is Circular Linked List?


In single linked list, every node points to its next node in the sequence and the last node points
NULL. But in circular linked list, every node points to its next node in the sequence but the last node
points to the first node in the list.
A circular linked list is a sequence of elements in which every element has a link to its next
element in the sequence and the last element has a link to the first element.
That means circular linked list is similar to the single linked list except that the last node points to the
first node in the list

Example

Operations
In a circular linked list, we perform the following operations...

1. Insertion
2. Deletion
3. Display

Before we implement actual operations, first we need to setup empty list. First perform the following
steps before implementing actual operations.

● Step 1 - Include all the header files which are used in the program.
● Step 2 - Declare all the user defined functions.
● Step 3 - Define a Node structure with two members data and next
● Step 4 - Define a Node pointer 'head' and set it to NULL.
● Step 5 - Implement the main method by displaying operations menu and make suitable
function calls in the main method to perform user selected operation.

Insertion
In a circular linked list, the insertion operation can be performed in three ways. They are as follows...
1. Inserting At Beginning of the list
2. Inserting At End of the list
3. Inserting At Specific location in the list

Inserting At Beginning of the list


We can use the following steps to insert a new node at beginning of the circular linked list...

● Step 1 - Create a newNode with given value.


● Step 2 - Check whether list is Empty (head == NULL)
● Step 3 - If it is Empty then, set head = newNode and newNode→next = head .
● Step 4 - If it is Not Empty then, define a Node pointer 'temp' and initialize with 'head'.
● Step 5 - Keep moving the 'temp' to its next node until it reaches to the last node (until 'temp
→ next == head').
● Step 6 - Set 'newNode → next =head', 'head = newNode' and 'temp → next = head'.

Inserting At End of the list


We can use the following steps to insert a new node at end of the circular linked list...

● Step 1 - Create a newNode with given value.


● Step 2 - Check whether list is Empty (head == NULL).
● Step 3 - If it is Empty then, set head = newNode and newNode → next = head.
● Step 4 - If it is Not Empty then, define a node pointer temp and initialize with head.
● Step 5 - Keep moving the temp to its next node until it reaches to the last node in the list
(until temp → next == head).
● Step 6 - Set temp → next = newNode and newNode → next = head.

Inserting At Specific location in the list (After a Node)


We can use the following steps to insert a new node after a node in the circular linked list...

● Step 1 - Create a newNode with given value.


● Step 2 - Check whether list is Empty (head == NULL)
● Step 3 - If it is Empty then, set head = newNode and newNode → next = head.
● Step 4 - If it is Not Empty then, define a node pointer temp and initialize with head.
● Step 5 - Keep moving the temp to its next node until it reaches to the node after which we
want to insert the newNode (until temp1 → data is equal to location, here location is the
node value after which we want to insert the newNode).
● Step 6 - Every time check whether temp is reached to the last node or not. If it is reached to
last node then display 'Given node is not found in the list!!! Insertion not
possible!!!' and terminate the function. Otherwise move the temp to next node.
● Step 7 - If temp is reached to the exact node after which we want to insert the newNode
then check whether it is last node (temp → next == head).
● Step 8 - If temp is last node then set temp → next = newNode and newNode →
next = head.
● Step 8 - If temp is not last node then set newNode → next = temp → next and temp →
next = newNode.
Deletion
In a circular linked list, the deletion operation can be performed in three ways those are as follows...

1. Deleting from Beginning of the list


2. Deleting from End of the list
3. Deleting a Specific Node

Deleting from Beginning of the list


We can use the following steps to delete a node from beginning of the circular linked list...

● Step 1 - Check whether list is Empty (head == NULL)


● Step 2 - If it is Empty then, display 'List is Empty!!! Deletion is not possible' and
terminate the function.
● Step 3 - If it is Not Empty then, define two Node pointers 'temp1' and 'temp2' and initialize
both 'temp1' and 'temp2' with head.
● Step 4 - Check whether list is having only one node (temp1 → next == head)
● Step 5 - If it is TRUE then set head = NULL and delete temp1 (Setting Empty list
conditions)
● Step 6 - If it is FALSE move the temp1 until it reaches to the last node. (until temp1 →
next == head )
● Step 7 - Then set head = temp2 → next, temp1 → next = head and delete temp2.

Deleting from End of the list


We can use the following steps to delete a node from end of the circular linked list...

● Step 1 - Check whether list is Empty (head == NULL)


● Step 2 - If it is Empty then, display 'List is Empty!!! Deletion is not possible' and
terminate the function.
● Step 3 - If it is Not Empty then, define two Node pointers 'temp1' and 'temp2' and initialize
'temp1' with head.
● Step 4 - Check whether list has only one Node (temp1 → next == head)
● Step 5 - If it is TRUE. Then, set head = NULL and delete temp1. And terminate from the
function. (Setting Empty list condition)
● Step 6 - If it is FALSE. Then, set 'temp2 = temp1 ' and move temp1 to its next node.
Repeat the same until temp1 reaches to the last node in the list. (until temp1 →
next == head)
● Step 7 - Set temp2 → next = head and delete temp1.

Deleting a Specific Node from the list


We can use the following steps to delete a specific node from the circular linked list...

● Step 1 - Check whether list is Empty (head == NULL)


● Step 2 - If it is Empty then, display 'List is Empty!!! Deletion is not possible' and
terminate the function.
● Step 3 - If it is Not Empty then, define two Node pointers 'temp1' and 'temp2' and initialize
'temp1' with head.
● Step 4 - Keep moving the temp1 until it reaches to the exact node to be deleted or to the last
node. And every time set 'temp2 = temp1' before moving the 'temp1' to its next node.
● Step 5 - If it is reached to the last node then display 'Given node not found in the list!
Deletion not possible!!!'. And terminate the function.
● Step 6 - If it is reached to the exact node which we want to delete, then check whether list is
having only one node (temp1 → next == head)
● Step 7 - If list has only one node and that is the node to be deleted then
set head = NULL and delete temp1 (free(temp1)).
● Step 8 - If list contains multiple nodes then check whether temp1 is the first node in the list
(temp1 == head).
● Step 9 - If temp1 is the first node then set temp2 = head and keep moving temp2 to its next
node until temp2 reaches to the last node. Then set head = head → next, temp2 → next
= head and delete temp1.
● Step 10 - If temp1 is not first node then check whether it is last node in the list (temp1 →
next == head).
● Step 1 1- If temp1 is last node then set temp2 → next = head and
delete temp1 (free(temp1)).
● Step 12 - If temp1 is not first node and not last node then set temp2 → next = temp1 →
next and delete temp1 (free(temp1)).

Displaying a circular Linked List


We can use the following steps to display the elements of a circular linked list...

● Step 1 - Check whether list is Empty (head == NULL)


● Step 2 - If it is Empty, then display 'List is Empty!!!' and terminate the function.
● Step 3 - If it is Not Empty then, define a Node pointer 'temp' and initialize with head.
● Step 4 - Keep displaying temp → data with an arrow (--->) until temp reaches to the last
node
● Step 5 - Finally display temp → data with arrow pointing to head → data.

Double Linked List

What is Double Linked List?


In a single linked list, every node has a link to its next node in the sequence. So, we can traverse
from one node to another node only in one direction and we can not traverse back. We can solve
this kind of problem by using a double linked list. A double linked list can be defined as follows...
Double linked list is a sequence of elements in which every element has links to its previous
element and next element in the sequence.

In a double linked list, every node has a link to its previous node and next node. So, we can traverse
forward by using the next field and can traverse backward by using the previous field. Every node in
a double linked list contains three fields and they are shown in the following figure...
Here, 'link1' field is used to store the address of the previous node in the sequence, 'link2' field is
used to store the address of the next node in the sequence and 'data' field is used to store the
actual value of that node.

Example

Operations on Double Linked List


In a double linked list, we perform the following operations...

1. Insertion
2. Deletion
3. Display

Insertion
In a double linked list, the insertion operation can be performed in three ways as follows...

1. Inserting At Beginning of the list


2. Inserting At End of the list
3. Inserting At Specific location in the list

Inserting At Beginning of the list


We can use the following steps to insert a new node at beginning of the double linked list...

● Step 1 - Create a newNode with given value and newNode → previous as NULL.
● Step 2 - Check whether list is Empty (head == NULL)
● Step 3 - If it is Empty then, assign NULL to newNode → next and newNode to head.
● Step 4 - If it is not Empty then, assign head to newNode → next and newNode to head.
Inserting At End of the list
We can use the following steps to insert a new node at end of the double linked list...

● Step 1 - Create a newNode with given value and newNode → next as NULL.
● Step 2 - Check whether list is Empty (head == NULL)
● Step 3 - If it is Empty, then assign NULL to newNode → previous and newNode to head.
● Step 4 - If it is not Empty, then, define a node pointer temp and initialize with head.
● Step 5 - Keep moving the temp to its next node until it reaches to the last node in the list
(until temp → next is equal to NULL).
● Step 6 - Assign newNode to temp → next and temp to newNode → previous.

Inserting At Specific location in the list (After a Node)


We can use the following steps to insert a new node after a node in the double linked list...

● Step 1 - Create a newNode with given value.


● Step 2 - Check whether list is Empty (head == NULL)
● Step 3 - If it is Empty then, assign NULL to both newNode → previous & newNode →
next and set newNode to head.
● Step 4 - If it is not Empty then, define two node pointers temp1 & temp2 and
initialize temp1 with head.
● Step 5 - Keep moving the temp1 to its next node until it reaches to the node after which we
want to insert the newNode (until temp1 → data is equal to location, here location is the
node value after which we want to insert the newNode).
● Step 6 - Every time check whether temp1 is reached to the last node. If it is reached to the
last node then display 'Given node is not found in the list!!! Insertion not
possible!!!' and terminate the function. Otherwise move the temp1 to next node.
● Step 7 - Assign temp1 → next to temp2, newNode to temp1 → next, temp1 to newNode
→ previous, temp2 to newNode → next and newNode to temp2 → previous.

Deletion
In a double linked list, the deletion operation can be performed in three ways as follows...

1. Deleting from Beginning of the list


2. Deleting from End of the list
3. Deleting a Specific Node

Deleting from Beginning of the list


We can use the following steps to delete a node from beginning of the double linked list...

● Step 1 - Check whether list is Empty (head == NULL)


● Step 2 - If it is Empty then, display 'List is Empty!!! Deletion is not possible' and
terminate the function.
● Step 3 - If it is not Empty then, define a Node pointer 'temp' and initialize with head.
● Step 4 - Check whether list is having only one node (temp → previous is equal to temp →
next)
● Step 5 - If it is TRUE, then set head to NULL and delete temp (Setting Empty list
conditions)
● Step 6 - If it is FALSE, then assign temp → next to head, NULL to head → previous and
delete temp.

Deleting from End of the list


We can use the following steps to delete a node from end of the double linked list...

● Step 1 - Check whether list is Empty (head == NULL)


● Step 2 - If it is Empty, then display 'List is Empty!!! Deletion is not possible' and
terminate the function.
● Step 3 - If it is not Empty then, define a Node pointer 'temp' and initialize with head.
● Step 4 - Check whether list has only one Node (temp → previous and temp → next both
are NULL)
● Step 5 - If it is TRUE, then assign NULL to head and delete temp. And terminate from the
function. (Setting Empty list condition)
● Step 6 - If it is FALSE, then keep moving temp until it reaches to the last node in the list.
(until temp → next is equal to NULL)
● Step 7 - Assign NULL to temp → previous → next and delete temp.

Deleting a Specific Node from the list


We can use the following steps to delete a specific node from the double linked list...

● Step 1 - Check whether list is Empty (head == NULL)


● Step 2 - If it is Empty then, display 'List is Empty!!! Deletion is not possible' and
terminate the function.
● Step 3 - If it is not Empty, then define a Node pointer 'temp' and initialize with head.
● Step 4 - Keep moving the temp until it reaches to the exact node to be deleted or to the last
node.
● Step 5 - If it is reached to the last node, then display 'Given node not found in the list!
Deletion not possible!!!' and terminate the fuction.
● Step 6 - If it is reached to the exact node which we want to delete, then check whether list is
having only one node or not
● Step 7 - If list has only one node and that is the node which is to be deleted then
set head to NULL and delete temp (free(temp)).
● Step 8 - If list contains multiple nodes, then check whether temp is the first node in the list
(temp == head).
● Step 9 - If temp is the first node, then move the head to the next node (head = head →
next), set head of previous to NULL (head → previous = NULL) and delete temp.
● Step 10 - If temp is not the first node, then check whether it is the last node in the list ( temp
→ next == NULL).
● Step 11 - If temp is the last node then set temp of previous of next to NULL (temp →
previous → next = NULL) and delete temp (free(temp)).
● Step 12 - If temp is not the first node and not the last node, then
set temp of previous of next to temp of next (temp → previous → next = temp →
next), temp of next of previous to temp of previous (temp → next → previous = temp →
previous) and delete temp (free(temp)).
Displaying a Double Linked List
We can use the following steps to display the elements of a double linked list...

● Step 1 - Check whether list is Empty (head == NULL)


● Step 2 - If it is Empty, then display 'List is Empty!!!' and terminate the function.
● Step 3 - If it is not Empty, then define a Node pointer 'temp' and initialize with head.
● Step 4 - Display 'NULL <--- '.
● Step 5 - Keep displaying temp → data with an arrow (<===>) until temp reaches to the last
node
● Step 6 - Finally, display temp → data with arrow pointing to NULL (temp → data --->
NULL).

Linked List vs. Array

Linked List vs. Array in Time Complexity

Linked
Operation list Array

Random Access O(N) O(1)

Insertion and deletion at beginning O(1) (N)


Linked
Operation list Array

Insertion and deletion at end O(N) O(1)

Insertion and deletion at a random position O(N) O(N)

Advantages of Linked Lists:


● Dynamic nature: Linked lists are used for dynamic memory allocation.
● Memory efficient: Memory consumption of a linked list is efficient as its size
can grow or shrink dynamically according to our requirements, which means
effective memory utilization hence, no memory wastage.
● Ease of Insertion and Deletion: Insertion and deletion of nodes are easily
implemented in a linked list at any position.
● Implementation: For the implementation of stacks and queues and for the
representation of trees and graphs.
● The linked list can be expanded in constant time.
Disadvantages of Linked Lists:
● Memory usage: The use of pointers is more in linked lists hence, complex
and requires more memory.
● Accessing a node: Random access is not possible due to dynamic memory
allocation.
● Search operation costly: Searching for an element is costly and requires
O(n) time complexity.
● Traversing in reverse order: Traversing is more time-consuming and
reverse traversing is not possible in singly linked lists.
Applications of Linked List:
Here are some of the applications of a linked list:
● Linear data structures such as stack, queue, and non-linear data structures
such as hash maps, and graphs can be implemented using linked lists.
● Dynamic memory allocation: We use a linked list of free blocks.
● Implementation of graphs: Adjacency list representation of graphs is the
most popular in that it uses linked lists to store adjacent vertices.
● In web browsers and editors, doubly linked lists can be used to build a
forwards and backward navigation button.
● A circular doubly linked list can also be used for implementing data structures
like Fibonacci heaps.
Applications of Linked Lists in real world:
● The list of songs in the music player is linked to the previous and next songs.
● In a web browser, previous and next web page URLs are linked through the
previous and next buttons.
● In the image viewer, the previous and next images are linked with the help of
the previous and next buttons.
● Switching between two applications is carried out by using “alt+tab” in
windows and “cmd+tab” in mac book. It requires the functionality of a circular
linked list.
● In mobile phones, we save the contacts of people. The newly entered contact
details will be placed at the correct alphabetical order.
● This can be achieved by a linked list to set contact at the correct alphabetical
position.
● The modifications that we made in the documents are actually created as
nodes in doubly linked list. We can simply use the undo option by
pressing Ctrl+Z to modify the contents. It is done by the functionality of a
linked list.

Stack Representation Using Linked List


The major problem with the stack implemented using an array is, it works only for a fixed number of
data values. That means the amount of data must be specified at the beginning of the
implementation itself. Stack implemented using an array is not suitable, when we don't know the size
of data which we are going to use. A stack data structure can be implemented by using a linked list
data structure. The stack implemented using linked list can work for an unlimited number of values.
That means, stack implemented using linked list works for the variable size of data. So, there is no
need to fix the size at the beginning of the implementation. The Stack implemented using linked list
can organize as many data values as we want.

In linked list implementation of a stack, every new element is inserted as 'top' element. That means
every newly inserted element is pointed by 'top'. Whenever we want to remove an element from the
stack, simply remove the node which is pointed by 'top' by moving 'top' to its previous node in the
list. The next field of the first element must be always NULL.
Example

In the above example, the last inserted node is 99 and the first inserted node is 25. The order of
elements inserted is 25, 32,50 and 99.

Stack Operations using Linked List


To implement a stack using a linked list, we need to set the following things before implementing
actual operations.

● Step 1 - Include all the header files which are used in the program. And declare all the user
defined functions.
● Step 2 - Define a 'Node' structure with two members data and next.
● Step 3 - Define a Node pointer 'top' and set it to NULL.
● Step 4 - Implement the main method by displaying Menu with list of operations and make
suitable function calls in the main method.

push(value) - Inserting an element into the Stack


We can use the following steps to insert a new node into the stack...

● Step 1 - Create a newNode with given value.


● Step 2 - Check whether stack is Empty (top == NULL)
● Step 3 - If it is Empty, then set newNode → next = NULL.
● Step 4 - If it is Not Empty, then set newNode → next = top.
● Step 5 - Finally, set top = newNode.

pop() - Deleting an Element from a Stack


We can use the following steps to delete a node from the stack...
● Step 1 - Check whether stack is Empty (top == NULL).
● Step 2 - If it is Empty, then display "Stack is Empty!!! Deletion is not possible!!!" and
terminate the function
● Step 3 - If it is Not Empty, then define a Node pointer 'temp' and set it to 'top'.
● Step 4 - Then set 'top = top → next'.
● Step 5 - Finally, delete 'temp'. (free(temp)).

Queue Using Linked List


The major problem with the queue implemented using an array is, It will work for an only fixed
number of data values. That means, the amount of data must be specified at the beginning itself.
Queue using an array is not suitable when we don't know the size of data which we are going to use.
A queue data structure can be implemented using a linked list data structure. The queue which is
implemented using a linked list can work for an unlimited number of values. That means, queue
using linked list can work for the variable size of data (No need to fix the size at the beginning of the
implementation). The Queue implemented using linked list can organize as many data values as we
want.

In linked list implementation of a queue, the last inserted node is always pointed by ' rear' and the
first node is always pointed by 'front'.

Example

In above example, the last inserted node is 50 and it is pointed by 'rear' and the first inserted node is
10 and it is pointed by 'front'. The order of elements inserted is 10, 15, 22 and 50.

Operations
To implement queue using linked list, we need to set the following things before implementing actual
operations.

● Step 1 - Include all the header files which are used in the program. And declare all the user
defined functions.
● Step 2 - Define a 'Node' structure with two members data and next.
● Step 3 - Define two Node pointers 'front' and 'rear' and set both to NULL.
● Step 4 - Implement the main method by displaying Menu of list of operations and make
suitable function calls in the main method to perform user selected operation.

enQueue(value) - Inserting an element into the


Queue
We can use the following steps to insert a new node into the queue...
● Step 1 - Create a newNode with given value and set 'newNode → next' to NULL.
● Step 2 - Check whether queue is Empty (rear == NULL)
● Step 3 - If it is Empty then, set front = newNode and rear = newNode.
● Step 4 - If it is Not Empty then, set rear → next = newNode and rear = newNode.

deQueue() - Deleting an Element from Queue


We can use the following steps to delete a node from the queue...

● Step 1 - Check whether queue is Empty (front == NULL).


● Step 2 - If it is Empty, then display "Queue is Empty!!! Deletion is not possible!!!" and
terminate from the function
● Step 3 - If it is Not Empty then, define a Node pointer 'temp' and set it to 'front'.
● Step 4 - Then set 'front = front → next' and delete 'temp' (free(temp)).

display() - Displaying the elements of Queue


We can use the following steps to display the elements (nodes) of a queue...

● Step 1 - Check whether queue is Empty (front == NULL).


● Step 2 - If it is Empty then, display 'Queue is Empty!!!' and terminate the function.
● Step 3 - If it is Not Empty then, define a Node pointer 'temp' and initialize with front.
● Step 4 - Display 'temp → data --->' and move it to the next node. Repeat the same until
'temp' reaches to 'rear' (temp → next != NULL).
● Step 5 - Finally! Display 'temp → data ---> NULL'.

You might also like