|
A doubly Linked list is a special type of linked list where the nodes contain three fields i.e one data field and two link fields . The data Field contains the data element and the two link fields contains two pointers i.e prev and next . The pointer prev points to the previous node or points to a NULL value if it is the first node in the list . The pointer next points to the next node or points to a NULL value of it is the last node in the list .
2. Linked List can be easily reversed when compared to Single Linked List .
3. We can traverse to any node in a Doubly linked list But in Single Linkedlist previous node cannot be reached .
Also check : Program for Queue in C++
Double Linked List can be Implemented in similar way as Single Linked List . Operations involved in Doubly Linked List are :
1. Insertion
2. Deletion
3. Searching
Advantages of Doubly Linked List :
1. The Main advantage of using double linked list is that , the list can be traversed in forward as well as backward direction .2. Linked List can be easily reversed when compared to Single Linked List .
3. We can traverse to any node in a Doubly linked list But in Single Linkedlist previous node cannot be reached .
Also check : Program for Queue in C++
Disadvantages of Doubly Linked List :
1. It takes more space in Doubly Linked List than in Single Linked list because of an extra pointer .Double Linked List can be Implemented in similar way as Single Linked List . Operations involved in Doubly Linked List are :
1. Insertion
2. Deletion
3. Searching
Insertion :
Insertion operation in a Double Linked List refers to Inserting an element Following cases arise while performing Insertion in a Doubly Linked List .- Inserting an element when Doubly Linked List is empty .
- Insertion at beginning of the Doubly Linked List .
- Insertion at the end of Double Linked List .
- Inserting an element in between the last and first nodes .
Deletion :
Deletion operation in a Doubly Linked List refers to Deleting an element permanently from the List . Following cases arise when deleting an element in Double linked list .- If the List is empty - Underflow Exception
- Deleting a node which is at end of the Doubly Linked list
- Deleting other nodes in between first node and Last of the Double Linked List .
Program for Doubly Linked List in C++
#include<iostream> using namespace std; template <class T> class doublylinkedlist { private : struct node { T data; node *prev; node *next; }; node *head; node *tail; public : doublylinkedlist() { head=tail=NULL; } void createlist(T[] , int); void insertfirst(T); void insertlast(T); void insertafter(T,T); void deletenode(T); void displayforward(); void displaybackward(); }; //creating doubly linked list template<class T> void doublylinkedlist<T>::createlist(T x[], int n) { node *q; node *p=new node; //create first node p->data=x[0]; p->next=NULL; p->prev=NULL; for(int i=1;i<n;i++) { q=p; p=p->next=new node; p->data=x[i]; p->next=NULL; p->prev=q; } tail=p; } // Inserting new node at start of doubly linked list template<class T> void doublylinkedlist<T>::insertfirst(T item) { node *p=new node; p->data=item; p->prev=NULL; head->prev=p; } //Inserting new node at last of Double Linkedlist template<class T> void doublylinkedlist<T>::insertlast(T item) { node *p=new node; p->data=item; p->prev=tail; p->next=NULL; tail=p; } //Insert item after key template<class T> void doublylinkedlist<T>::insertafter(T item,T key) { node *q=head; while(q!=NULL) { if(q->data==key) break; q=q->next; } if(q==NULL) { cout<<key<<"key not found"<<endl; return; } node *p=new node; p->data=item; p->next=q->next; p->prev=q; q->next=p; } //deleting item from double linked lisr template<class T> void doublylinkedlist<T>::deletenode(T item) { if(head==NULL) { cout<<"List is empty"<<endl; return; } if(head->data==item) { head=head->next; head->prev=NULL; return; } if(tail->data==item) { tail=tail->prev; tail->next=NULL; return; } node *p=head->next; while(p!=NULL) { if(p->data==item) break; p=p->next; } if(p==NULL) { cout<<item<<"not found "<<endl; return; } (p->prev)->next=p->next; (p->next)->prev=p->prev; return; } //diaplaying list elements in forward direction template<class T> void doublylinkedlist<T>::displayforward() { node *p=head; cout<<"\n Doubly linked list (Forward)"; while(p!=NULL) { cout<<p->data<<""; p=p->next; } } //displaying list elements in reverse direction template<class T> void doublylinkedlist<T>::displaybackward() { node *p=tail; cout<<"\n Doubly linked list (Backward)"; while(p!=NULL) { cout<<p->data<<""; p=p->prev; } } int main() { int x[2]={33,44}; doublylinkedlist<int> dlist; dlist.createlist(x,2); dlist.displayforward(); dlist.displaybackward(); dlist.insertfirst(22); dlist.displayforward(); dlist.displaybackward(); dlist.insertlast(55); dlist.displayforward(); dlist.displaybackward(); dlist.insertafter(66,33); dlist.displayforward(); dlist.displaybackward(); dlist.deletenode(22); dlist.displayforward(); dlist.displaybackward(); dlist.deletenode(55); dlist.displayforward(); dlist.displaybackward(); dlist.deletenode(66); dlist.displayforward(); dlist.displaybackward(); return 0; }
Program for doubly Linked list is lengthy . Download source code for Doubly Linked list program .
Also check : Program for Binary search
0 comments:
Post a Comment