Showing posts with label Circular Linked List. Show all posts
Showing posts with label Circular Linked List. Show all posts

Tuesday, 12 July 2011

Search a circularly Linked List..

void srch(node *start)
{
    int userdata;                    /* Data to be searched */
    node *current;              /* Node for travelling the linked list*/
    current=start;
    printf("\nEnter the data to search\n");
    scanf("%d",&userdata);
    while(current->next!=start)
    {
        if(current->data==userdata)
            printf("\n %d  %s  %f\n",current->data);
        current=current->next;
    }
    if(current->next==start && current->data==userdata)
        printf("\n %d  %s  %f\n",current->data);
}

Delete a Node..

node* del(node *start)
{
    int userdata;                    /* Data for deleting a node*/
    node *delnode;          /* Node to be deleted */
    node *current;              /* Node for travelling the linked list*/
    printf("\nEnter the roll number whose node you want to delete\n");
    scanf("%d",&userdata);
    current=start;
    if(current->data==userdata)
    {
        /***  Checking condition for deletion of first node  ***/
        delnode=current; /*  Unnecessary step  */
        while(current->next!=start)
            current=current->next;
        current->next=start->next;
        start=start->next;
        free(delnode);
        return(start);
    }
    else
    {
        while(current->next->next!=start)
        {
            /***  Checking condition for deletion of   ***/
            /*** all nodes except first and last node  ***/
            if(current->next->data==userdata)
            {
                delnode=current->next;
                current->next=current->next->next;
                free(delnode);
                return(start);
            }
            current=current->next;
        }
        if(current->next->next==start && current->next->data==userdata)
        {
            /***  Checking condition for deletion of last node  ***/
            delnode=current->next;
            free(delnode);
            current->next=start;
            return(start);
        }
    }
    printf("\nMatch not found\n");
    return(start);
}

Insert Before..

node* ins_bef(node *start)
{
    int userdata;                    /* Data for inserting a node*/
    node *newnode;              /* New inputed node*/
    node *current;              /* Node for travelling the linked list*/
    newnode=(node*)malloc(sizeof(node));
    current=start;
    printf("\nEnter the data before which you want to insert a node\n");
    scanf("%d",&userdata);
    if(current->data==userdata)
    {
        newnode->next=start;
        while(current->next!=start)
        current=current->next;
        current->next=newnode;
        start=newnode;
        return(start);
    }
    while(current->next!=start)
    {
        if(current->next->data==userdata)
        {
            newnode->next=current->next;
            current->next=newnode;
            return(start);
        }
        current=current->next;
    }
    /*
    If the function does not return from any return statement.
    There is no match to insert before the input  roll number.
    */

    printf("\nMatch not found\n");
    return(start);
}

Insert After..

void ins_aft(node *start)
{
    int userdata;                    /* Data for inserting a node*/
    int flag=0;
    node *newnode;              /* New inputed node*/
    node *current;              /* Node for travelling the linked list*/
    newnode=(node*)malloc(sizeof(node));
    printf("\nEnter the Data after which you want to insert a node\n");
    scanf("%d",&userdata);
    current=start;
    while(current->next!=start)
    {
        /***  Insertion checking for all nodes except last  ***/
        if(current->data==userdata)
        {
            newnode->next=current->next;
            current->next=newnode;
            flag=1;
        }
        current=current->next;
    }
    if(flag==0 && current->next==start && current->data==userdata)
    {
        /***  Insertion checking for last nodes  ***/
        newnode->next=current->next;    /** start is copied in newnode->next**/
        current->next=newnode;
        flag=1;
    }
    if(flag==0 && current->next==start)
        printf("\nNo match found\n");
}

Creating Circular Linked List !!!

struct list{
    int data;
    struct list *next;
};

/*****  Redefining struct list as node  *****/
typedef struct list node;



void init(node *start)
{
    printf("\nEnter Data\n");
    scanf("%d",&start->data);
    start->next=start;
}