Sunday, April 1, 2012

singly linked list


#include< stdio.h>
typedef struct linked_list
{
 int data;
 struct linked_list *next;
}list;



void create(list *);
void traverse(list *);
void append(list *);
list *insert(list *);
list *delete_list(list *);
list *find(list *,int);
int count(list *);
int menu(list *);
int getdata(list *);



void main()
{
 list *head;
 int select;
 clrscr();

 head=(list *)malloc(sizeof(list));

 create(head);
 traverse(head);

 getch();
 while(1)
 {
  select=menu(head);
  switch(select)
  { case 1: head=insert(head);
    getch();
    break;
   case 2: head=delete_list(head);
    getch();
    break;
   case 3: printf("\n\nnumber of elements : %d",count(head));
    getch();
    break;
   case 4: append(head);
    break;
   case 5: traverse(head);
    getch();
    break;
   case 6: exit();
   default : printf("\ninvalid option... \n");getch();
  }
 }


}
int menu(list *start)
{
 int a=0;
 clrscr();
 printf("Your List : \n\n");
 traverse(start);
 printf("\n\nMENU\n-------------\n");
 printf("1. insert\n2. delete\n3. count\n4. append\n5. traverse\n6. exit\nenter an option : ");
 scanf("%d",&a);
 return a;
}

void create(list *start)
{
 printf("Enter element (Enter -1 to stop): ");
 scanf("%d",&start->data);
 if(start->data==-1)
  start->next=NULL;
 else
 {
  start->next=(list *)malloc(sizeof(list));
  create(start->next);
 }
}
int getdata(list *start)
{
 int element;
 while(1)
 {
  printf("\n\nenter element : ");
  scanf("%d",&element);
  if(element==-1)
  {
   printf("\noperation not allowed\n");
   getch();
   clrscr();
   printf("Your List : \n\n");
   traverse(start);
  }
  else
   return element;
 }
}

list *insert(list *start)
{
 int element,key;
 list *temp,*f;

 element=getdata(start);
 printf("enter the key element : ");
 scanf("%d",&key);

 if(start->data==key)
 {
  temp=(list *)malloc(sizeof(list));
  temp->data=element;
  temp->next=start;
  start=temp;
 }
 else
 {
  f=find(start,key);
  if(f==NULL)
   printf("\nkey not found\n");
  else
  {
   temp=(list *)malloc(sizeof(list));
   temp->data=element;
   temp->next=f->next;
   f->next=temp;
  }
 }
 return(start);
}

list *delete_list(list *start)
{
 int element;
 list *temp,*f;

 element=getdata(start);
 if(start->data==element)
 {
  temp=start->next;
  free(start);
  start=temp;
 }
 else
 {
  f=find(start,element);
  if(f==NULL)
   printf("\nelement not found\n");
  else
  {
   temp=f->next->next;
   free(f->next);
   f->next=temp;
  }
 }
 return (start);
}

list *find(list *start, int key)
{
 if(start->next->data==key)
  return (start);
 if(start->next->next==NULL)
  return NULL;
 else
  find(start->next,key);
}

int count(list *start)
{
 if(start->next!=NULL)
  return (1+count(start->next));
 else
  return 0;
}

void traverse(list *start)
{
 if(start->next!=NULL)
  printf("%3d ",start->data);
 else
  return;
 traverse(start->next);
}
void append(list *start)
{
 list *temp,*f;
 int element;
 element=getdata(start);

 f=find(start,-1);
 temp=(list *)malloc(sizeof(list));
 temp->data=element;
 temp->next=f->next;
 f->next=temp;
}

No comments:

Post a Comment