UNIT-VII Data Structures
UNIT-VII Data Structures
Data structure is a method of organizing a large amount of data more efficiently so that any operation on that data
becomes easy
Based on the organizing method of data structure, data structures are divided into two types.
If a data structure organizes the data in sequential order, then that data structure is called a Linear Data Structure.
Example
1. Arrays
2. List (Linked List)
3. Stack
4. Queue
If a data structure organizes the data in random order, then that data structure is called as Non-Linear Data Structure.
Example
1. Tree
2. Graph
3. Dictionaries
4. Heaps
5. Tries, Etc.
Linked List
When we want to work with an unknown number of data values, we use a linked list data structure to organize that
data. The linked list is a linear data structure that contains a sequence of elements such that each element links to its
next element in the sequence. Each element in a linked list is called "Node".
Single linked list is a sequence of elements in which every element has link to its next element in the sequence.
In any single linked list, the individual element is called as "Node". Every "Node" contains two fields, data field, and
the next field. The data field is used to store actual value of the node and next field is used to store the address of next
node in the sequence. The graphical representation of a node in a single linked list is as follows...
Operations on Single Linked List
The following operations are performed on a Single Linked List
Insertion
Deletion
Display
Before we implement actual operations, first we need to set up an 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 single linked list, the insertion operation can be performed in three ways. They are as follows...
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.
Deletion
In a single linked list, the deletion operation can be performed in three ways. They are 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...
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.
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.
Stack
Stack is a linear data structure in which the insertion and deletion operations are performed at only one end. In a stack, adding
and removing of elements are performed at a single position which is known as "top". That means, a new element is added at top
of the stack and an element is removed from the top of the stack. In stack, the insertion and deletion operations are performed
based on LIFO (Last In First Out) principle.
In a stack, the insertion operation is performed using a function called "push" and deletion operation is performed using a
function called”pop”
In the figure, PUSH and POP operations are performed at a top position in the stack. That means, both the insertion and deletion
operations are performed at one end (i.e., at Top)
Stack is a linear data structure in which the operations are performed based on LIFO principle.
Stack can also be defined as
"A Collection of similar data items in which both insertion and deletion operations are performed based on LIFO
principle".
Example
If we want to create a stack by inserting 10,45,12,16,35 and 50. Then 10 becomes the bottom-most element and 50 is the topmost
element. The last inserted element 50 is at Top of the stack as shown in the image below...
Operations on a Stack
The following operations are performed on the stack...
Stack data structure can be implemented in two ways. They are as follows...
1. Using Array
2. Using Linked List
When a stack is implemented using an array, that stack can organize an only limited number of elements. When a stack is
implemented using a linked list, that stack can organize an unlimited number of elements.
A stack data structure can be implemented using a one-dimensional array. But stack implemented using array stores only a fixed
number of data values. This implementation is very simple. Just define a one dimensional array of specific size and insert or
delete the values into that array by using LIFO principle with the help of a variable called 'top'. Initially, the top is set to -1.
Whenever we want to insert a value into the stack, increment the top value by one and then insert. Whenever we want to delete a
value from the stack, then delete the top value and decrement the top value by one.
Before implementing actual operations, first follow the below steps to create an empty stack.
Step 1 - Include all the header files which are used in the program and define a constant 'SIZE' with specific value.
Step 2 - Declare all the functions used in stack implementation.
Step 3 - Create a one dimensional array with fixed size (int stack[SIZE])
Step 4 - Define a integer variable 'top' and initialize with '-1'. (int top = -1)
Step 5 - In main method, display menu with list of operations and make suitable function calls to perform operation
selected by the user on the stack.
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.
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 4 - Implement the main method by displaying Menu with list of operations and make suitable function calls in