Linked list all operation

/*Linked list all operation */
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

void delete();
void append();
int length();
void addatbegin();
void addatafter();
void display();

struct node
{
  int data;
  struct node* link;
};
struct node* root=NULL;

void main()
{
  int ch,len;
  clrscr();
  while(1)
  {
     printf("\n\n Single Linked list operations :");
     printf("\n 1.Append ");
     printf("\n 2.Add at Begin ");
     printf("\n3.Add at after ");
     printf("\n 4.Length ");
     printf("\n 5.Display ");
     printf("\n 6.Delete ");
     printf("\n 7.Quit ");

     printf("\n\n Enter your choice(1/2/3/4/5/6/7) = ");
     scanf("%d",&ch);

     switch(ch)
     {
case 1: append();
       break;

case 2: addatbegin();
       break;

       case 3: addatafter();
       break;

       case 4: len=length();
       printf("\n\n Length= %d",len);
       break;

       case 5: display();
       break;

       case 6: delete();
       break;

       case 7: exit(1);
       break;
      default: printf("\n Invalid Input");
     }
  }

  getch();
}

void append()
{
  struct node* temp;
  temp=(struct node*)malloc(sizeof(struct node));
  printf("\n Enter node data= ");
  scanf("%d",&temp->data);
  temp->link = NULL;

  if(root==NULL)
  {
      root=temp;
  }
  else
  {
    struct node* p;
    p=root;

    while(p->link != NULL)
    {
       p=p->link;
    }
    p->link=temp;

  }
}

int length()
{
   int count=0;
   struct node* temp;
   temp=root;

   while(temp!=NULL)
   {
     count++;
     temp=temp->link;
   }
   return count;
}

void addatbegin()
{
  struct node* temp;
  temp=(struct node*)malloc(sizeof(struct node));

  printf("\n Enter node data: ");
  scanf("%d",&temp->data);

  temp->link=NULL;

  if(root==NULL)
  {
    root=temp;
  }
  else
  {
    temp->link=root;
    root=temp;
  }
}

void addatafter()
{
  struct node *temp,*p;
  int loc,len,i=1;

  printf("\n\n Enter Location: ");
  scanf("%d",&loc);

  len=length();

  if(loc>len)
  {
    printf("\n\n Invalid Locations");
    printf("\n Currently list having %d nodes.",len);
  }
  else
  {
     p=root;

     while(i<loc)
     {
       p=p->link;
       i++;
     }
     temp=(struct node*)malloc(sizeof(struct node));

     printf("\n Enter node data: ");
     scanf("%d",&temp->data);

     temp->link=p->link;
     p->link=temp;
  }
}

void display()
{
    struct node* temp;
    temp=root;

    if(temp==NULL)
    {
      printf("\n No nodes in the list");
    }
    else
    {
       while(temp!=NULL)
       {
printf("\n %d",temp->data);
temp=temp->link;
       }
    }
}

void delete()
{
  struct node* temp;
  int loc;

  printf("\n Enter location to delete: ");
  scanf("%d",&loc);

  if(loc>length())
  {
    printf("\n Invalid Location");
  }
  else if(loc==1)
  {
     temp=root;
     root=temp->link;
     temp->link=NULL;
     free(temp);
  }
  else
  {
    struct node *p=root,*q;
    int i=1;

    while(i<loc-1)
    {
      p=p->link;
      i++;
    }
    q=p->link;
    p->link=q->link;
    q->link=NULL;
    free(q);
  }
}

Previous
Next Post »