Thursday, January 15, 2015

How to create,insert,delete and reverse Signly Circular linklist in C++?

//Implementation of Circular List
#include<conio.h>
#include<iostream>
#include<malloc.h>
using namespace std;
void creation();
void traversing();
void addatbeg();
void addafter(int, int);
void deletion(int);
struct node{
    int info;
    node *link;
   
}*last;
int n;
int main()
{
    last = NULL;
    int ch;
    while(1)
    {
        cout<<"1.Creation";
        cout<<endl;
        cout<<"2.Traversing";
        cout<<endl;
        cout<<"3.Insertion at start";
        cout<<endl;
        cout<<"4. Insertion any Where"<<endl;
        cout<<"5.Deletion";
        cout<<endl;
        cout<<"6.exit";
        //cout<<endl;
        cout<<"Enter Your Choice";
        cin>>ch;
   
    switch(ch)
    {
        case 1:
            int n;
            cout<<"enter number of nodes";
            cin>>n;
            for(int i=0;i<n;i++)
            creation();
            break;
            case 2:
                traversing();
                break;
                case 3:
                    
                    addatbeg();
                    break;
                    case 4:
                         int i;
                         cout<<"enter Position"<<endl;
                         cin>>i;
                         int data;
                         cout<<"Enter Data"<<endl;
                         cin>>data;
                        addafter(data,i);
                        break;
                        case 5:
                             int m;
                             cout<<"Enter data to be deleted"<<endl;
                            cin>>m;
                            deletion(m);
                            break;
                        case 6:
                             exit(0);
      default:
                            cout<<"Sorry!Wrong Choice :(";
                            cout<<endl;
                           
    }}
    getch();
    return(0);
}
void creation()
{
    struct node *temp;
    temp=(node*)malloc(sizeof(struct node));
    int data;
    cout<<"Enter Data ";
    cin>>data;
    temp->info=data;
    cout<<endl;
    if(last==NULL)
    {
        last=temp;
        last->link=last;
    }
    else
    {
        temp->link=last->link;
        last->link=temp;
        last=temp;
    }
}
void traversing()
{
    struct node *q;
    q=last->link;
    while(q!=last)
    {
        cout<<"data is "<<q->info;
        cout<<endl;
        q=q->link;
    }
    cout<<last->info;
    cout<<endl;
}
void addatbeg()
{
        int Data,k;
    struct node *tmp,*q;
    tmp=(node*)malloc(sizeof(struct node));
    cout<<"Enter Data";
    cin>>Data;
    cout<<endl;
    tmp->info=Data;
    tmp->link=last->link;
    last->link=tmp;
}
void addafter(int data, int pos)
{
     struct node *q,*tmp;
     int i;
     q=last->link;
     for(i=0;i<pos-1;i++)
     {
                         q=q->link;
                         if(q==last->link)
                         {
                                          cout<<"Less Elements "<<endl;
                                          return;
                         }
     }
                        
     tmp=(node*)malloc(sizeof(struct node));
     tmp->info=data;
     tmp->link=q->link;
     q->link=tmp;
     if(q==last)
     {
                last=tmp;
     }
}
void deletion(int data)
{
//    int chh,m,data;
        struct node *tmp,*q;
       
    if(last->link==last&&last->info==data)
            {
            tmp=last;
            last=NULL;
            free(tmp);
            return;
       
            }
           
                    q=last->link;
                    if(q->info==data)
                    {
                        tmp=q;
                        last->link=q->link;
                        free(tmp);
                        return;
                    }
                    while(q->link!=last)
                            {
                                if(q->link->info==data)
                                {
                                    tmp=q->link;
                                    q->link=tmp->link;
                                free(tmp);
                                return;
                            }
                                q=q->link;
   
                        }
                if(q->link->info==data)
                {
                    tmp=q->link;
                    q->link=last->link;
                    free(tmp);
                    last=q;
                    return;
                }
}

No comments:

Post a Comment