C++ Program to implement a doubly linked list.
C++ Program to implement a doubly linked list.
/**************************************************************
Author: Arun Vishnu M V
Web: www.arunmvishnu.com
Description: C++ Program to implement a doubly linked list.
***************************************************************/
#include<iostream.h>
#include<conio.h>
#include<process.h>
// Creating a NODE Structure
struct node
{
int data; // data
struct node *next,*back; // link to next node and previous node
};
// Creating a class LIST
class list
{
struct node *root,*end;
public:
void create(); // to create a list
void insert(); // insertion
void del(); // deletion
void show(); // show
};
// Creating a new node
void list::create()
{
struct node *nxt_node,*pre_node;
int value,no,i;
root=nxt_node=NULL;
cout<<"\nCREATING A NEW LIST.........\n\nHow many nodes : ";
cin>>no;
for(i=1;i<=no;i++)
{
cout<<"Enter the DATA: ";
cin>>value;
nxt_node=new node;
nxt_node->data=value;
nxt_node->next=NULL;
nxt_node->back=NULL;
if(root==NULL)
root=nxt_node;
else
{
pre_node->next=nxt_node;
nxt_node->back=pre_node;
}
pre_node=nxt_node;
}
end=nxt_node;
cout<<"\nThe list is created!";
show();
}
// Displaying LIST
void list::show()
{
struct node *ptr=root;
cout<<"\n\nThe List is (first to last order)\n";
cout<<"root -> ";
while(ptr!=NULL)
{
cout<< ptr->data << " -> ";
ptr = ptr->next;
}
cout<<"end";
ptr=end;
cout<<"\n\nThe List is (last to first order)\n";
cout<<"end <- ";
while(ptr!=NULL)
{
cout << ptr->data <<" <- ";
ptr= ptr-> back;
}
cout<<"root";
getch();
}
// Insert node at any position
void list::insert()
{
int position,dat;
struct node *ptr_b,*ptr_f,*ptr;
cout<<"\nInsertion of a new node \n";
cout<<"Enter the DATA after which the new node is to be inserted.\n";
cout<<"[ If the data is not found the new node will be";
cout<<" created at first ]\n\t->: ";
cin>>position;
cout<<"Enter the data to insert: ";
cin>>dat;
ptr_b=root;
ptr=new node;
ptr->data=dat;
while(ptr_b->next!=NULL && ptr_b->data!=position)
{
ptr_b=ptr_b->next;
}
if(ptr_b->next==NULL && ptr_b->data!=position)
//Insertion at first
{
root->back=ptr;
ptr->next=root;
ptr->back=NULL;
root=ptr;
}
else if(ptr_b->next==NULL && ptr_b->data==position)
//insertion at the end of list
{
ptr_b->next=ptr;
ptr->next=NULL;
ptr->back=ptr_b;
end=ptr;
}
else
//Insertion between two nodes
{
ptr_f=ptr_b->next;
ptr->next=ptr_b->next;
ptr->back=ptr_b;
ptr_b->next=ptr;
ptr_f->back=ptr;
}
cout<< "\nNew node is inserted!!";
getch();
} //End of insertion
//Delete node from any position
void list::del()
{
int position,dat;
struct node *ptr_b,*ptr_f,*ptr;
cout<<"Enter the data to be beleted: ";
cin>>position;
ptr=root;
while(ptr->next != NULL && ptr->data != position)
{
ptr=ptr->next;
}
if(ptr->next==NULL && ptr->data!=position)
//Data not found
{
cout<<"\nData not found!!";
getch();
return;
}
else if(ptr->next==NULL && ptr->data==position)
//Deletion from the end of list
{
ptr_b=ptr->back;
dat=ptr->data;
ptr_b->next=NULL;
end=ptr_b;
}
else
//Deletion between two nodes or first node
{
dat=ptr->data;
if(root==ptr) // delete first node
{
root=ptr->next;
ptr_f=root;
ptr_f->back=NULL;
}
else // Deletion between two nodes
{
dat = ptr->data;
ptr_b = ptr->back;
ptr_b->next = ptr->next;
ptr_f = ptr_b->next;
ptr_f->back = ptr_b;
}
}
delete ptr;
cout<<"\nThe node is deleted!!\nData= " << dat;
getch();
} //End of deletion
// Main function
int main()
{
clrscr();
list l;
l.create(); // to create a new node
int choice;
while(1)
{
cout<<"\n-----------------------------------------------------------";
cout<<"\n\t\tDOUBLY LINKED LIST\n\n";
cout<<"1:Insertion\n2:Deletion\n3:Display List\n4:Exit";
cout<<"\nEnter your choice(1-4): ";
cin>>choice;
switch(choice)
{
case 1: // Insertion
l.insert();
break;
case 2: // Deletion
l.del();
break;
case 3: // Display
l.show();
break;
case 4: // Exit
exit(0);
break;
default:
cout<<"Please enter correct choice(1-4)!!";
getch();
break;
}
}
return 0;
}
Thanks for de program!!