Tuesday, November 2, 2010

Link List Program

#include<stdio.h>
#include<conio.h>
#include<alloc.h>

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

struct node *start,*temp;

void addbeg(int);
void addend(int);
void addinside(int,int);

void deletenode(int);
void modifynode(int,int);

void displaynode();

int countnode();

void main()
 {
 int ch,ele,c,pos;
 clrscr();
 do
  {
  printf("\n1.Add beg\n");
  printf("2.Add end\n");
  printf("3.Add anywhere\n");
  printf("4.Delete node\n");
  printf("5.Modify node\n");
  printf("6.Count node\n");
  printf("7.Display \n");
  printf("8.Exit\n");
  printf("Enter your choice :-");
  scanf("%d",&ch);
  switch(ch)
   {
   case 1:
    printf("Enter element :-");
    scanf("%d",&ele);
    addbeg(ele);
    break;
   case 2:
    printf("Enter element :-");
    scanf("%d",&ele);
    addend(ele);
    break;
   case 3:
    printf("Enter element :-");
    scanf("%d",&ele);
    printf("Enter position number :-");
    scanf("%d",&pos);
    addinside(ele,pos);
    break;
   case 4:
    printf("Enter position number for modify:-");
    scanf("%d",&pos);
    deletenode(pos);
    break;
   case 5:
    printf("Enter element :-");
    scanf("%d",&ele);
    printf("Enter position number for modify:-");
    scanf("%d",&pos);
    modifynode(ele,pos);
    break;
   case 6:
    c=countnode();
    printf("Total number of node :- %d",c);
    break;
   case 7:
    displaynode();
    break;
   case 8:
    printf("Program end <press enter to exit>");
    break;
   default:
    printf("Invalid option select...\n");
   }
  }while(ch != 8);
 getch();
 }

int countnode()
 {
 int c=0;
 temp=start;
 while(temp!=NULL)
  {
  c++;
  temp=temp->next;
  }
 return(c);
 }

void displaynode()
 {
 temp=start;
 while(temp!=NULL)
  {
  printf("%d\t",temp->data);
  temp=temp->next;
  }
 printf("\n");
 }

void addbeg(int ele)
 {
 temp=(node *)malloc(sizeof(struct node));
 temp->data=ele;
 if(start == NULL)
  {
  temp->next=NULL;
  }
 else
  {
  temp->next=start;
  }
 start=temp;
 }

void addend(int ele)
 {
 struct node *t1;
 temp=(node *)malloc(sizeof(struct node));
 temp->data=ele;
 temp->next=NULL;
 if(start == NULL)
  {
  start=temp;
  }
 else
  {
  t1=start;
  while(t1->next != NULL)
   {
   t1=t1->next;
   }
  t1->next=temp;
  }
 }

void addinside(int ele,int pos)
 {
 struct node *t1;
 int c,i;
 c=countnode();
 if(pos>1 && pos<c)
  {
  t1=start;
  temp=(node *)malloc(sizeof(struct node));
  temp->data=ele;
  for(i=1;i<=pos-2;i++)
   {
   t1=t1->next;
   }
  temp->next=t1->next;
  t1->next=temp;
  }
 else
  {
  printf("Invalid position number.......");
  }
 }


void modifynode(int ele,int pos)
 {
 struct node *t1;
 int c,i;
 c=countnode();
 if(pos>=1 && pos<=c)
  {
  t1=start;
  for(i=1;i<=pos-1;i++)
   {
   t1=t1->next;
   }
  t1->data=ele;
  printf("List update...........\n");
  }
 else
  {
  printf("Invalid position number.......");
  }
 }


void deletenode(int pos)
 {
 struct node *t1,*prev;
 int c,i;
 c=countnode();
 t1=start;
 if(pos>=1 && pos<=c)
  {
  if(pos == 1)
   {
   start=start->next;
   }
  else if(pos == c)
   {
   while(t1->next != NULL)
    {
    prev=t1;
    t1=t1->next;
    }
   prev->next=NULL;
   }
  else
   {
   for(i=1;i<=pos-1;i++)
    {
    prev=t1;
    t1=t1->next;
    }
   prev->next=t1->next;
   }
  printf("Delete element %d\n",t1->data);
  free(t1);
  }
 else
  {
  printf("Invalid position number.......");
  }
 }


No comments: