Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  linked list
Language: C/C++
Code:
#include<stdio.h>
#include<stdlib.h>
/* STRUCTURE CONTANING A DATA PART AND A LINK PART */
   struct node
 {
   int data;
   struct node *next;
 }*p;
/* P IS A GLOBAL POINTER CONTAINS THE ADRESS OF THE FIRST NODE IN 
LIST
*/
/*THIS FUNCTION DELETES A NODE FROM THE LIST*/
     delnode(int num)
    {
           struct node *temp, *m;
            temp=p;
            while(temp!=NULL)
           {
                   if(temp->data==num)
                {
                           if(temp==p)
                          {
                                 p=temp->next;
                                 free(temp);
                                 return;
                          }
                      else
                         {
                                m->next=temp->next;
                              free(temp);
                              return;
                     }
          }
        else
           {
                          m=temp;
                         temp= temp->next;
           }
}
    printf(" ELEMENT %d NOT FOUND\n ", num);
}
/*THIS FUNCTION ADD AN ELEMENT AT END*/
append( int num )
 {
        struct node *temp,*r;
        temp= (struct node *)malloc(sizeof(struct node));
       temp->data=num;
       r=(struct node *)p;
      if (p == NULL)
     {
                  p=temp;
                  p->next =NULL;
     }
  else
     {
             while( r->next != NULL)
                          r=r->next;
             r->next =temp;
             r=temp;
             r->next=NULL;
     }
  }
/*THIS FUNCTION ADDS A NODE AT BEGINNING*/
addbeg( int num )
   {
/*  CREATING A NODE AND INSERTING VALUE TO IT  */
        struct node *temp;
        temp=(struct node *)malloc(sizeof(struct node));
        temp->data=num;
       /* IF LIST IS NULL ADD AT BEGINNING  */
        if ( p== NULL)
       {
          p=temp;
          p->next=NULL;
       }
    else
      {
          temp->next=p;
          p=temp;
      }
   }
/*THIS FUNCTION ADDS A NODE AFTER A POSITION*/
addafter(int num, int loc)
  {
          int i;
          struct node *temp,*t,*r;
          r=p;
           if(loc > count()+1 || loc <= 0)
        {
                   printf(" \ninsertion is not possible :\n ");
                      return;
        }
             if (loc == 1)/* if list is null then add at beginning */
              {
                     addbeg(num);
                     return;
              }
           else
      {
                 for(i=1;i<loc;i++)
                   {
                            t=r;   /* t will be holding previous value */
                            r=r->next;
                    }
                   temp=(struct node *)malloc(sizeof(struct node));
                   temp->data=num;
                   t->next=temp;
                   t=temp;
                   t->next=r;
                  return;
       }
}
/* THIS FUNCTION DISPLAYS THE CONTENTS OF THE LINKED LIST */
display(struct node *r)
  {
           r=p;
           if(r==NULL)
          {
                 printf("\nNO ELEMENT IN THE LIST :\n");
                 return;
          }
       /* traverse the entire linked list */
       while(r!=NULL)
      {
           printf(" -> %d ",r->data);
           r=r->next;
     }
          printf("\n");
  }
//THIS FUNCTION COUNTS THE NUMBER OF ELEMENTS IN THE LIST
count()
 {
        struct node *n;
        int c=0;
        n=p;
         while(n!=NULL)
        {
               n=n->next;
               c++;
        }
       return(c);
 }
//THIS FUNCTION REVERSES A LINKED LIST
reverse(struct node *q)
{
        struct node *m, *n,*l,*s;
        m=q;
        n=NULL;
       while(m!=NULL)
 {
             s=n;
             n=m;
            m=m->next;
            n->next=s;
      }
             p=n;
}
/* THIS IS THE MAIN PROGRAM  */
int main() {
                  int i;
               system("clear");
             p=NULL;
             while(1) /* this is an indefinite loop */
           {
              printf(" 1.INSERT A NUMBER AT BEGINNING;\n");
              printf(" 2.INSERT A NUMBER AT LAST:\n");
              printf(" 3.INSERT A NUMBER AT A PARTICULAR LOCATION INlIST:\n");
              printf(" 4.PRINT THE ELEMENTS IN THE LIST :\n");
              printf(" 5.PRINT THE NUMBER OF ELEMENTS IN THE LIST\n");
              printf(" 6.DELETE A NODE IN THE LINKED LIST:\n");
              printf(" 7.REVERSE A LINKED LIST :\n");
              printf(" 8.GET OUT OF LINKED LIST (BYEE BYEE):\n");
              printf(" PLEASE, ENTER YOUR CHOICE:\n");
              scanf("%d",&i); /* ENTER A VALUE FOR SWITCH  */
             switch(i)
              {
                        case 1:
                     {
                            int num;
                            printf(" \nPLEASE ENTER THE NUMBER :-");
                            scanf("%d",&num);
                            addbeg(num);
                            break;
                     }
                         case 2:
                      {
                             int num;
                             printf(" \nPLEASE ENTER THE NUMBER :-");
                             scanf("%d",&num);
                             append(num);
                             break;
                     }
     case 3:
                   {
                          int num, loc,k;
                         printf(" \nPLEASE ENTER THE NUMBER :-");
                          scanf("%d",&num);
                          printf("\nPLEASE ENTER THE LOCATION NUMBER :-");
                          scanf("%d",&loc);
                          addafter(num,loc);
                          break;
              }  
case 4:
                {
                             struct node *n;
                             printf("\n THE  ELEMENTS IN THE LIST ARE :\n");
                             display(n);
                             break;
                }
             case 5:
             {
                          struct node *n;
                          display(n);
                          printf(" \nTOTAL NO OF ELEMENTS IN THE LSIT ARE %d",count());
                          break;
             } 
case 6:
              {
                             int    num;
                     printf(" \nPLEASE ENTER A NUMBER FROM THE LIST :");
                     scanf("%d",&num);
                     delnode(num);
                    break;
              }
             case 7:
              {
                     reverse(p);
                       display(p);
                       break;
              }
            case 8:
           {
                 exit(0);
}
         }/* end if switch */
    }/*end of while*/
}
                          
Comments: