CIRCULAR LINKED LIST _

SwatiHans10 109 views 19 slides Sep 22, 2024
Slide 1
Slide 1 of 19
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19

About This Presentation

ok


Slide Content

Circular Linked List

CIRCULAR LINKED LISTS In a circular linked list, the last node contains a pointer to the first node of the list. We can have a circular singly linked list as well as a circular doubly linked list. While traversing a circular linked list, we can begin at any node and traverse the list in any direction, forward or backward, until we reach the same node where we started. Thus, a circular linked list has no beginning and no ending.

Types of Circular Linked Lists Circular Singly Linked List In Circular Singly Linked List , each node has just one pointer called the “ next ” pointer. The next pointer of last node points back to the first node and this results in forming a circle. In this type of Linked list we can only move through the list in one direction.

Types of Circular Linked Lists 2. Circular Doubly Linked List: In circular doubly linked list, each node has two pointers prev and next, similar to doubly linked list. The prev pointer points to the previous node and the next points to the next node. Here, in addition to the last node storing the address of the first node, the first node will also store the address of the last node .

OPERATIONS ON CIRCULAR LINKED LIST INSERTION(ON BEGINNING,END AND AT SPECIFIC LOCATION) DELETION(FROM BEGINNING,END AND SPECIFIC LOCATION) TRAVERSAL

Inserting a Node at the Beginning of a Circular Linked List Algorithm F ollowing 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   i.e 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 ‘ ptr ' and initialize with ' head '. Step 5 -  Keep moving the ‘ ptr ' to its next node until it reaches to the last node (until ‘ ptr → next  ==  head '). Step 6 -  Set ' newNode → next  = head ', ' head  =  newNode ' and ‘ ptr → next  =  head ' Code void insertAtBeginning ( int value) { struct Node * newNode ; newNode = ( struct Node*) malloc ( sizeof ( struct Node)); newNode -> data = value; if(head == NULL) { head = newNode ; newNode -> next = head; } else { struct Node * ptr = head; while( ptr -> next != head) ptr = ptr -> next; newNode -> next = head; head = newNode ; ptr -> next = head; } printf ("\ nInsertion success !!!");}

Inserting a new node at the beginning of circular Linked List

Inserting a Node at the End of a Circular Linked List Algorithm 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 ptr  and initialize with  head . Step 5 -  Keep moving the  ptr  to its next node until it reaches to the last node in the list (until  ptr → next  ==  head ). Step 6 -  Set  ptr → next  =  newNode  and  newNode → next  =  head . Code void insertAtEnd ( int value) { struct Node * newNode ; newNode = ( struct Node*) malloc ( sizeof ( struct Node)); newNode -> data = value; if(head == NULL) { head = newNode ; newNode -> next = head; } else { struct Node * ptr = head; while( ptr -> next != head) ptr = ptr -> next; ptr -> next = newNode ; newNode -> next = head; } printf ("\ nInsertion success!!!"); }

Inserting a new node at the end in circular Linked List

Deleting a Node from the Beginning of a Circular Linked List Algorithm   Use 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 pointer ptr and initialize with  head . Step 4 -  Check whether list is having only one node ( ptr → next  ==  head ) Step 5 -  If it is  TRUE  then set  head  =  NULL  and delete  ptr  (Setting  Empty  list conditions) Step 6 -  If it is  FALSE  move the  ptr  until it reaches to the last node. (until  ptr → next  ==  head  ) Step 7 -  Then set temp=head,  head  =  head-> next , ptr → next = head  and delete  temp Code void deleteBeginning () { if(head == NULL) printf ("List is Empty!!! Deletion not possible!!!"); else { struct Node * temp,* ptr = head; if(temp -> next == head) { head = NULL; free(temp); } else { head = head -> next ; while( ptr ->next!=head) ptr = ptr ->next; ptr ->next=head; free(temp); } printf ("\ nDeletion success!!!"); }}

Deleting the First Node from a Circular Linked List temp temp

Deleting a Node from the end of a Circular Linked List Algorithm 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  ‘ preptr '  and ‘ ptr '  and initialize ‘ ptr ' with  head . Step 4 -  Check whether list has only one Node ( ptr → next  ==  head ) Step 5 -  If it is  TRUE . Then, set  head  =  NULL  and delete  ptr . And terminate from the function. (Setting  Empty  list condition) Step 6 -  If it is  FALSE . Then, set ‘ preptr = ptr   ' and move  ptr to its next node. Repeat the same until  ptr reaches to the last node in the list. (until  ptr → next  ==  head ) Step 7 -  Set  preptr → next  =  head  and delete  ptr . Code void deleteEnd () { if(head == NULL) printf ("List is Empty!!! Deletion not possible!!!"); else { struct Node * ptr = head, preptr ; if( ptr -> next == head) { head = NULL; free(temp1); } else{ while( ptr -> next != head){ preptr = ptr ; ptr = ptr -> next; } preptr -> next = head; free( ptr ); } printf ("\ nDeletion success!!!"); }}

Deleting the Last Node from a Circular Linked List

Applications of linked lists Polynomial representation Let us see how a polynomial is represented in the memory using a linked list. Consider a polynomial 6x3 + 9x2 + 7x + 1. Every individual term in a polynomial consists of two parts, a coefficient and a power. Here, 6, 9, 7, and 1 are the coefficients of the terms that have 3, 2, 1, and 0 as their powers respectively. Every term of a polynomial can be represented as a node of the linked list.

Generalized Linked List A Generalized Linked List L, is defined as a finite sequence of n>=0 elements, l 1 , l 2 , l 3 , l 4 , …, l n , such that l i are either item or the list of items. Thus L = (l 1 , l 2 , l 3 , l 4 , …, l n ) where n is total number of nodes in the list. To represent a list of items there are certain assumptions about the node structure. Flag = 1 implies that down pointer exists Flag = 0 implies that next pointer exists Data means the item. Down pointer is the address of node which is down of the current node Next pointer is the address of node which is attached as the next node

Why Generalized Linked List? Generalized linked lists are used because although the efficiency of polynomial operations using linked list is good but still, the disadvantage is that the linked list is unable to use multiple variable polynomial equation efficiently. It helps us to represent multi-variable polynomial along with the list of elements.  typedef struct node { char c; //Data int index; //Flag struct node *next, *down; //Next & Down pointer }GLL;

Thanks
Tags