Friday 19 September 2014

C++ program to implement doubly linear linked list

C++ program to implement doubly linear linked list.


C++ program to implement doubly linear linked list

#include<stdio.h>
#include<conio.h>
#include<iostream>
using namespace std;
struct links
{
int data;
links *next;
links *prev;
};
class linkedlist
{
    links *start;
public:
    linkedlist()
    {
        start=NULL;
    }
    void create();
    void insert();
    void display();
    void revdisplay();
    void delet();
    void search();
    void count();
    void erase(links *);
    links *getstart()
    {
        return start;
    }
    void setstart()
    {
        start=NULL;
    }
};
void linkedlist::create()
{
    int take;
    links *temp,*ne;
    char ch;
    cout<<"Enter the element ";
    cin>>take;
    start=new links;
    start->data=take;
    start->next=NULL;
    start->prev=NULL;
    temp=start;
    cout<<"Want to enter more elements (Y/N)\n";
    ch=getch();
    while(ch!='n'&&ch!='N')
    {
        cout<<"Enter the element ";
        cin>>take;
        ne=new links;
        temp->next=ne;
        ne->prev=temp;
        temp=ne;
        temp->data=take;
        temp->next=NULL;
        cout<<"Want to enter more elements (Y/N)\n";
        ch=getch();
    }
}
void linkedlist::insert()
{
    int a,da;
    links *ne,*temp=start;
    cout<<"Enter the element to be inserted ";
    cin>>da;
    ne=new links;
    ne->data=da;
    if(start!=NULL)
    {
        cout<<"Enter your choice\n 1.Insert as a first node\n 2.Insert as a last node\n 3.Insert between node ";
        cin>>a;
        switch(a)
        {
        case 1:
            start->prev=ne;
            ne->next=start;
            start=ne;
            start->prev=NULL;
            break;
        case 2:
            ne->next=NULL;
            while(temp->next!=NULL)
                 temp=temp->next;
            temp->next=ne;
            ne->prev=temp;
            break;
        case 3:
            cout<<"Enter the element after which element to be inserted ";
            cin>>da;
            while(temp->data!=da)
                temp=temp->next;
            ne->prev=temp;
            ne->next=temp->next;
            temp->next=ne;
            temp=ne->next;
            temp->prev=ne;
            break;
        default:
            cout<<"Sorry wrong choice\n";
            break;
        }
    }
    else
    {
        start=ne;
        start->next=NULL;
        start->prev=NULL;
    }
}
void linkedlist::delet()
{
    int a;
    links *temp=start;
    display();
    cout<<"Enter the element to be deleted ";
    cin>>a;
    while(temp->data!=a)
    {
         if(temp->next==NULL)
         {
            cout<<"Entered element is not present";
            return ;
         }

         temp=temp->next;
    }
    if(temp==start)
    {
        if(start->next==NULL)
        {
            delete temp;
            setstart();
        }
        else
        {
            start=temp->next;
            start->prev=NULL;
            delete temp;
        }
    }
    else if(temp->next==NULL)
    {
        (temp->prev)->next=NULL;
        delete temp;
    }
    else
    {
        (temp->prev)->next=temp->next;
        (temp->next)->prev=temp->prev;
        delete temp;
    }
    display();
}
void linkedlist::display()
{
    links *temp=start;
    while(temp!=NULL)
    {
        cout<<temp->data<<"-> ";
        temp=temp->next;
    }
    cout<<"NULL\n";
}
void linkedlist::revdisplay()
{
    links *temp=start;
    while(temp->next!=NULL)
        temp=temp->next;
    cout<<"NULL<- ";
    while(temp->prev!=NULL)
    {
        cout<<temp->data<<"<- ";
        temp=temp->prev;
    }
    cout<<temp->data<<endl;
}
void linkedlist::search()
{
    int a;
    links *temp=start;
    cout<<"Enter the element to be searched ";
    cin>>a;
    while(temp->data!=a)
    {
        if(temp->next==NULL)
        {
            cout<<"Element is not present"<<endl;
            return;
        }
        temp=temp->next;
    }
    cout<<"Element is present"<<endl;
}
void linkedlist::count()
{
    int c=0;
    links *temp=start;
    if(temp==NULL)
        cout<<"Linked List is Empty"<<endl;
    else
    {
        while(temp->next!=NULL)
        {
            temp=temp->next;
            c++;
        }
        cout<<"Total no. of nodes in linked list "<<c+1<<endl;
    }
}
void linkedlist::erase(links *temp)
{
    if(temp==NULL)
        return ;
    else
    {
        temp=temp->next;
        erase(temp);
        delete temp;
    }
}
int main()
{
    int a,flag=1;
    linkedlist linklist;
    while(flag)
    {
        cout<<"Main Menu\n\t1.) Creation\n\t2.) Display\n\t3.) Display in reverse order \n\t4.) Insert\n\t5.) Delete\n\t6.) Search\n\t7.) Count Nodes\n\t8.) Erase Linked List\n\t9.) Exit";
        cout<<"\nEnter your choice ";
        cin>>a;
        switch(a)
        {
        case 1:
            linklist.create();
            break;
        case 2:
            linklist.display();
            break;
        case 3:
            linklist.revdisplay();
            break;
        case 4:
            linklist.insert();
            break;
        case 5:
            linklist.delet();
            break;
        case 6:
            linklist.search();
            break;
        case 7:
            linklist.count();
            break;
        case 8:
            linklist.erase(linklist.getstart());
            linklist.setstart();
            break;
        case 9:
            flag=0;
            break;
        default:
            cout<<"Sorry Wrong choice";
        }
    }
}

No comments:

Post a Comment