Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  singly
Language: C/C++
Code:
#include <stdio.h>
#include<stdlib.h>
struct node
{
    int info;
    struct node *link;
};
void display(struct node *start);
void count(struct node *start);
void search(struct node *start,int data);
struct node *add_at_beg(struct node *start,int data);
struct node *add_at_end(struct node *start,int data);
struct node *add_after(struct node *start,int data,int item);
struct node *add_before(struct node *start,int data,int item);
struct node *add_at_pos(struct node *start,int data,int pos);
struct node *delete(struct node *start,int data);
struct node *reverse(struct node *start);

int main()
{ struct node *start=NULL;
  int data,item,pos,choice;
  while(1)
  { printf("1.display 2.count 3.search 4.add at begining 5.add at end 6.add after 7.add before 8.add at position 9.delete 10.reverse \n");
    scanf("%d",&choice);
    switch(choice)
    {
        case 1: display(start);
                break;
        case 2: count(start);
                break;
        case 3: printf("element to search");
                scanf("%d",&data);
                search(start,data);
                break;
        case 4: printf("enter element to be inserted");
                scanf("%d",&data);
                start=add_at_beg(start,data);
                break;
        case 5: printf("enter element to be inserted");
                scanf("%d",&data);
                start=add_at_end(start,data);
                break;
        case 6: printf("enter element to be inserted and before what");
                scanf("%d %d",&data,&item);
                start=add_before(start,data,item);
                break;
        case 7: printf("enter element to be inserted");
                scanf("%d %d",&data,&item);
                start=add_after(start,data,item);
                break;
        case 8: printf("enter element to be inserted and position");
                scanf("%d %d",&data,&pos);
                start=add_at_pos(start,data,pos);
                break;
        case 9: printf("enter element to be deleted");
                scanf("%d",&data);
                start=delete(start,data);
                break;
        case 10: start=reverse(start);
                 break;
        case 11: exit(0);
                 break;
        default :printf("wrong choice");         
    }
  }
}

void display(struct node *start)
{ struct node *p;
  if(start==NULL)
  {printf("empty");
  }
  p=start;
  printf("list is \n");
  while(p!=NULL)
  { printf("%d",p->info);
    p=p->link;
  }
    printf("\n");
}

void count(struct node *start)
{ struct node *p;
  int cnt=0;
  p=start;
  while(p!=NULL)
  { p=p->link;
    cnt++;
  }
    printf("%d \n",cnt);
}

void search(struct node *start,int data)
{ struct node *p;
  int pos=1;
  p=start;
  while(p!=NULL)
  { if(p->info==data)
      { printf("item found at %d",pos);
        return;
      }    
    p=p->link;
    pos++;
  }
    printf("Not found \n");
}

struct node *add_at_beg(struct node *start,int data)
{ struct node *tmp;
  tmp=(struct node *)malloc(sizeof(struct node));
  tmp->info=data;
  tmp->link=start;
  start=tmp;
  return start;    
}

struct node *add_at_end(struct node *start,int data)
{ struct node *p,*tmp;
  tmp=(struct node *)malloc(sizeof(struct node));
  tmp->info=data;
  p=start;
  while(p->link!=NULL)
  {  p=p->link;  
  }      
   p->link=tmp;
   tmp->link=NULL; 
  return start;
}

struct node *add_after(struct node *start,int data,int item)
{ struct node *p,*tmp;
  p=start;
  while(p!=NULL)
  {  if(p->info==item)
      {  tmp=(struct node *)malloc(sizeof(struct node));
         tmp->info=data;
         tmp->link=p->link;
         p->link=tmp; 
         return start;
      }
    p=p->link;
  }
  printf("not present");
 return start; 
}

struct node *add_before(struct node *start,int data,int item)
{ struct node *p,*tmp;
  if(start==NULL)
  {  printf("empty list");
     return start;
  }
  if(item==start->info)
  {  tmp=(struct node *)malloc(sizeof(struct node));
     tmp->info=data;
     tmp->link=start;
     start=tmp;
     return start;
  }
  p=start;
  while(p->link!=NULL)
  { if(p->link->info==item)
     {  tmp=(struct node *)malloc(sizeof(struct node));
        tmp->info=data;
        tmp->link=p->link;
        p->link=tmp;
        return start; 
     }
      p=p->link;
  }
  printf("not present");
  return start;
}

struct node *add_at_pos(struct node *start,int data,int pos)
{ struct node *p,*tmp;
  int i;
  tmp=(struct node *)malloc(sizeof(struct node));
  tmp->info=data;
  if(pos==1)
  {  tmp->link=start;
     start=tmp;
     return start;
  }
    p=start;
   for(i=0;i<pos-1&&p!=NULL;i++)
      p=p->link;
    if(p==NULL)
       printf("there are less elements %d",pos);
    else
    {  tmp->link=p->link;
       p->link=tmp;
    }
return start;    
}

struct node *delete(struct node *start,int data)
{ struct node *p,*tmp;
  if(start==NULL)
  {  printf("empty list");
     return start;
  }
  if(start->info==data)
  { tmp=start;
    start=start->link;
    free(tmp);
    return start;
  }
  p=start;
  while(p->link!=NULL)
  { if(p->link->info==data)
      {  tmp=p->link;
         p->link=tmp->link;
         free(tmp);
         return start;
      }      
      p=p->link;
  }  
  printf("not found");
  return start;
}

struct node *reverse(struct node *start)
{ struct node *prev,*ptr,*next;
  prev=NULL;
  ptr=start;
  while(ptr!=NULL)
  { next=ptr->link;
    ptr->link=prev;
    prev=ptr;
    ptr=next;
  }
  start=prev;
 return start;    
}
          
Comments: