Tuesday, 9 June 2015

Program of circular doubly link list with insert, append, delete, copy, reverse and display operations


Code for Program of circular doubly link list with insert, append, delete, copy, reverse and display operations in C++ Programming



 



 
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
struct doublylist
{
    int no;
    struct doublylist *next;
    struct doublylist *prev;
};
void display(struct doublylist *head);
struct doublylist* deletevalue(struct doublylist *head);
struct doublylist* insertmiddle(struct doublylist *head);
struct doublylist* insertfirst(struct doublylist *head);
struct doublylist* deletefirst(struct doublylist *head);
struct doublylist* append(struct doublylist *head);
struct doublylist* insertfirst_copy(struct doublylist *head,int key);
struct doublylist* append_copy(struct doublylist *head,int key);
struct doublylist* copy(struct doublylist *head);
void reverse(struct doublylist *head);
main()
{
    struct doublylist *first=NULL,*trav=NULL,*temp=NULL;
    char choice;
    first=new doublylist;
    trav=first;
    while(1)
    {
        cout<<"Enter the no : ";
        cin>>trav->no;
        cout<<"Do you continue [n/N] : ";
        cin>>choice;
        if(choice == 'n' || choice =='N')
            break;
        temp=new doublylist;
        trav->next=temp;
        temp->prev    =trav;
        temp->next=NULL;
        trav=trav->next;
    }
    first->prev=trav;
    trav->next=first;
    clrscr();
    while(1)
    {
        cout<<endl<<"1. Append";
        cout<<endl<<"2. Delete first";
        cout<<endl<<"3. Insert first";
        cout<<endl<<"4. Insert middle";
        cout<<endl<<"5. Delete by value";
        cout<<endl<<"6. Copy";
        cout<<endl<<"7. Reverse";
        cout<<endl<<"8.    Display";
        cout<<endl<<"9. Exit";
        cout<<endl<<"Enter the choice : ";
        cin>>choice;
        switch(choice)
        {
            case'1':
                first=append(first);
            break;
            case'2':
                first=deletefirst(first);
            break;
            case'3':
                first=insertfirst(first);
            break;
            case'4':
                first=insertmiddle(first);
            break;
            case'5':
                first=deletevalue(first);
            break;
            case'6':
                struct doublylist *first_copy;
                first_copy=copy(first);
                display(first_copy);
            break;
            case'7':
                reverse(first_copy);
            break;
            case'8':
                display(first);
                getch();
            break;
            case'9':
                return(0);

        }
    }
}
struct doublylist* append(struct doublylist *head)
{
    if(head==NULL)
    {
        head=new doublylist;
        cout<<"Enter the no : ";
        cin>>head->no;
        head->next=head;
        head->prev=head;
        return (head);
    }
    struct doublylist *trav=NULL,*temp=NULL;
    for(trav=head;trav->next!=head;trav=trav->next);
    temp=new doublylist;
    cout<<"Enter the no : ";
    cin>>temp->no;
    trav->next=temp;
    temp->prev=trav;
    temp->next=head;
    head->prev=temp;
    return(head);
}
struct doublylist* deletefirst(struct doublylist *head)
{
    struct doublylist *temp;
    if(head==NULL)
    {
        cout<<"empty list";
        return(NULL);
    }
    if(head->next==NULL)
    {
        delete head;
        return(NULL);
    }
    temp=head;
    struct doublylist *trav;
    for(trav=head;trav->next!=head;trav=trav->next);

    head=head->next;
    head->prev=trav;
    trav->next=head;
    delete temp;
    return(head);
}
struct doublylist* insertfirst(struct doublylist *head)
{
    if(head==NULL)
    {
        head=new doublylist;
        cout<<"Enter the no : ";
        cin>>head->no;
        head->next=head;
        head->prev=head;
        return (head);
    }
    struct doublylist *temp;
    struct doublylist *trav;
    for(trav=head;trav->next!=head;trav=trav->next);
    temp=new doublylist;
    cout<<"Enter the no : ";
    cin>>temp->no;
    temp->next=head;
    temp->prev=trav;
    head->prev=temp;
    trav->next=temp;
    return(temp);
}
struct doublylist* insertmiddle(struct doublylist *head)
{
    struct doublylist *temp;
    cout<<"Enter the position : ";
    int pos;
    cin>>pos;
    if(pos==1)
    {
        head=insertfirst(head);
        return(head);
    }
    int counter=1;
    struct doublylist*trav;
    for(trav=head;counter!=pos-1&&trav->next!=head;trav=trav->next,counter++);
    if(trav->next==head && counter!=pos)
    {
        cout<<"invalid postion";
        return(head);
    }
    if(trav->next==head && counter==pos)
    {
        temp=new doublylist;
        trav->next=temp;
        temp->next=head;
        temp->prev=trav;
        cout<<"Enter the no : ";
        cin>>temp->no;
        return(head);
    }
    temp=new doublylist;
    cout<<"Enter the no : ";
    cin>>temp->no;
    temp->next=trav->next;
    temp->prev=trav;
    temp->next->prev=temp;
    trav->next=temp;
    return(head);
}
struct doublylist* deletevalue(struct doublylist*head)
{
    cout<<"enter the value to be deleted : ";
    int key;
    cin>>key;
    if(head==NULL)
    {
        return(NULL);
    }
    if(head->no==key)
    {
        head=deletefirst(head);
        return(head);
    }
    struct doublylist *trav;
    for(trav=head;trav->next->no!=key&&trav->next!=head;trav=trav->next);
    if(trav->next==head)
    {
        cout<<"search key not found:";
        return(head);
    }
    struct doublylist *temp;
    temp=trav->next;
    temp->next->prev=trav;
    trav->next=temp->next;
    delete temp;
    return(head);
}
void display(struct doublylist*head)
{
    if(head==NULL)
    {
        cout<<"empty list";
        return;
    }
    struct doublylist *trav;
    trav=head;
    while(1)
    {
        cout<<endl<<"The element is : "<<trav->no;
        if(trav->next==NULL)
            break;
        trav=trav->next;
    }
}
void reverse(struct doublylist *head)
{
    struct doublylist *trav=head,*last;
    for(trav=head;trav->next!=NULL;trav=trav->next);
    last=trav;
    while(1)
    {
        cout<<endl<<"The element is  : "<<trav->no;
        if(trav->prev==last)
            break;
        trav=trav->prev;
    }
}
struct doublylist* copy(struct doublylist*head)
{
    struct doublylist *trav=head;
    struct doublylist *newhead=NULL;
    while(1)
    {
        newhead=append_copy(newhead,trav->no);
        if(trav->next==head)
        {
            break;
        }
        trav=trav->next;
    }
    return(newhead);
}
struct doublylist* append_copy(struct doublylist *head,int key)
{
    if(head==NULL)
    {
        head=new doublylist;
        head->no=key;
        head->next=head;
        head->prev=head;
        return (head);
    }
    struct doublylist *trav=NULL,*temp=NULL;
    for(trav=head;trav->next!=head;trav=trav->next);
    temp=new doublylist;
    temp->next=head;
    trav->next=temp;
    temp->prev=trav;
    head->prev=temp;
    temp->no=key;
    return(head);
}

No comments:

Post a Comment