Wednesday, 27 June 2012

Simple Linked List operations program


#include<stdio.h>
#include<malloc.h>
void create();
void traverse();
void search();
void reverse();
void del();
void sort();
int search2(int val);
typedef struct list
{
int number;
struct list *next;
}node;
node *head=NULL;
int main()
{
int i;
printf("*****************LINKED LIST********************");
while(i!=0)
{
printf("\nEnter \n1.Create linked list \n2.Traverse list\n3.search\n4.Reverse\n5.Delete\n6.Sort\n0.Exit:\n");
scanf("%d",&i);
switch(i)
{
case 1:
create();
break;
case 2:
traverse();
break;
case 3:
search();
break;
case 4:
                 reverse();
                 break;
            case 5:
                  del();
                  break;
case 6:
                 sort();
                 break;
            case 0:
exit(0);
break;
default:
printf("\n\tIncorrect value");
break;
}
}
return 0;

}
void create()//create linked list
{
int val;     //info of d node
node *p,*prev; // next node

    while(1)
{
printf(" Enter data (Enter -1 to exist) : ");
scanf("%d",&val);
if(val!=-1)
{
if(head==NULL)
{
p=(node*)malloc(sizeof(node)); // type of pointer=node, mem allocated for 1 node
p->next =NULL; //list ends
head=p; //makes it the first node
p->number =val; // puts d value
prev=p;
}
else
{
p=(node*)malloc(sizeof(node));

p->next=NULL;
prev->next=p;
                p->number =val; // put value
prev=p;
}
}
else
break;
}
}
void traverse()//traverse list
{
node *p=head;
while(p!=NULL)
{
printf(" %d " ,p->number );
if(p->next!=NULL){
p=p->next->next;}
}
}
void reverse()
{
     node *prev=NULL,*temp=NULL, *p=head;
     while(p!=NULL)
     {
                   if(p->next==NULL)
                   {head=p;}
      temp=p->next;
      p->next=prev;
      prev=p;
      p=temp;
                 
                   }
                 
     traverse();            
 }
void search()//search by value
{
     bool found=false;
node *p=head;
int i=0,val;
printf("Enter any number for search :");
scanf("%d",&val);
while(p!=NULL)
{
if(p->number ==val)
{
printf("\n\n\t\t\tThe value entered found at position %d\n\n\n",i);
found=true;
break;
}
else
{
i++;
p=p->next ;
//
//break;
}

}
if(!found)
{
printf("\n\n\t\tSearch ended Unsuccessfully. . . ! ! The value entered not found\n\n\n");}
}

int search2(int val)//search by value
{
     bool found=false;
node *p=head;
int i=0;
while(p!=NULL)
{
if(p->number ==val)
{
return(i);
}
else
{
i++;
p=p->next ;


}

}
if(!found)
{
              return -1;
}
}
void del()
{
 int num,pos;
     node *p,*temp=NULL,*prev=NULL;
    printf("Enter the number you want to delete: ");
    scanf("%d",&num);
    pos=search2(num);
    if(pos==-1)
    {printf("Number Not Found\n");
    return;
               }
               if(pos==0)
               {
                    p=head;
                    head=p->next;
                    free(p);  
                         }
               else
               {
                   p=head;
                   for(int i=0;i<pos;i++)
                   {
                        prev=p;
                        p=p->next;
                           }
                           prev->next=p->next;
                           free(p);
                   }        
 }

void sort()
{
     int temp=0;
     node *p,*nxt;
     p=head;
     while(p!=NULL)
     {
                   nxt=p->next;
                   while(nxt!=NULL)
                   {
                                   if(p->number>nxt->number)
                                   {temp=nxt->number;
                                   nxt->number=p->number;
                                   p->number=temp;}
                                   nxt=nxt->next;
                                                            }
                                   p=p->next;                        
                                   }
                   }