All types of Linked List Operations


All types of Linked List Operations

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>
#include<dos.h>
void disp(struct node*);
struct node *addbeg(struct node *,int);
void addend(struct node *,int);
void sortlist(struct node*,int);
struct node *addbef(struct node *,int);
void addaft(struct node *,int);
void addbet(struct node *,int,int);
struct node *del(struct node *,int);
struct node *befdel(struct node *,int);
void aftdel(struct node *,int);
void betdel(struct node *,int,int);
void update(struct node *,int);
void search(struct node *,int);
struct node *reverse(struct node *);
struct node{ int n;
         struct node *next;
       } ;
void main()
{ char ch,boolc1,boolc2,boolc3,boolc4,boolc5,boolc6,boolc7;
  int
i,num,no,addb,adde,befadd,aftadd,fnode,snode,cut,befcut,aftcut,prnode,succ
node,change,find;
  struct node *head,*tail,*ptr;
  clrscr();
  printf("THIS IS A PROGRAM ABOUT LINKED LIST
");
  printf("supply no. of elements in the linked list
");
  scanf("%d",&num);
  head=tail=ptr=NULL;
  for(i=0;i<num;i++)
  { printf("supply new node
");
    scanf("%d",&no);
    ptr=(struct node*)malloc(sizeof(struct node));
    if(tail==NULL)
    { head=tail=ptr;
      ptr->n=no;
      ptr->next=NULL;
    }
    else
    { tail->next=ptr;
      ptr->n=no;
      ptr->next=NULL;
      tail=ptr;
    }
  }
  disp(head);
  printf("node you want to add before
");
  scanf("%d",&addb);
  if(addb>=0)
  { head=addbeg(head,addb);
  printf("Now");
  disp(head);
 }
 else  printf("ayou don't! OK
");
  printf("node you want to add end
");
  scanf("%d",&adde);
  if(adde>=0)
  { addend(head,adde);
  printf("Now");
  disp(head);
  }
  else  printf("ayou don't! OK
");
  printf("before which node you want to add?
");
  scanf("%d",&befadd);
  head=addbef(head,befadd);
  printf("Now");
  disp(head);
  printf("after which node you want to add?
");
  scanf("%d",&aftadd);
  addaft(head,aftadd);
  printf("Now");
  disp(head);
  printf("between which two nodes you want to add?
");
  fflush(stdin);
  scanf("%d %d",&fnode,&snode);
  addbet(head,fnode,snode);
  printf("Now");
  disp(head);
  printf("want to delete any node? (y/n)
");
  fflush(stdin);
  scanf("%c",&boolc1);
  if(boolc1=='y')   {  printf("supply node to be deleted
");
               scanf("%d",&cut);
               head=del(head,cut);
               printf("Now");
               disp(head);
           }
  else     printf("OK. list remains same
");
   printf("want to delete before any node? (y/n)
");
  fflush(stdin);
  scanf("%c",&boolc2);
  if(boolc2=='y')   { printf("supply that node
");
              scanf("%d",&befcut);
              head=befdel(head,befcut);
               printf("Now");
               disp(head);
           }
  else     printf("OK. list remains same
");
  printf("want to delete after any node? (y/n)
");
  fflush(stdin);
  scanf("%c",&boolc3);
  if(boolc3=='y')   { printf("supply that node
");
              scanf("%d",&aftcut);
              aftdel(head,aftcut);
               printf("Now");
               disp(head);
           }
  else     printf("OK. list remains same
");
  printf("want to delete node between any two node? (y/n)
");
  fflush(stdin);
  scanf("%c",&boolc4);
  if(boolc4=='y')    { printf("supply those nodes
");
               scanf("%d %d",&prnode,&succnode);
               betdel(head,prnode,succnode);
               printf("Now");
               disp(head);
             }
  else    printf("OK. list remains same
");
  printf("want to update any node? (y/n)
");
  fflush(stdin);
  scanf("%c",&boolc5);
  if(boolc5=='y')  {  printf("supply node to be updated
");
             scanf("%d",&change);
             update(head,change);
             printf("Now");
             disp(head);
           }
  else    printf("OK. list remains same
");
  printf("want to search any node? (y/n)
");
  fflush(stdin);
  scanf("%c",&boolc6);
  if(boolc6=='y')  { printf("node to be searched
");
             scanf("%d",&find);
             search(head,find);
           }
  else    printf("OK. list remains same
");
  printf("want to display the list in reverse order? (y/n)
");
  fflush(stdin);
  scanf("%c",&boolc7);
  if(boolc7=='y')  { printf("In reverse order");
             head=reverse(head);
             disp(head);
           }
  else    printf("OK. list remains same
");
  printf("wish to sort the list? (y/n)
");
  fflush(stdin);
  scanf("%c",&ch);
  if(ch=='y')
  { sortlist(head,num);
  printf("after sorting");
  disp(head); }
  else{ printf("Finally");
    disp(head); }
  getch();
}
 void disp(struct node *head)
 {  struct node *p;
    p=head;
    printf(" entire linked list is
");
    while(p->next!=NULL)
    { printf("%d->",p->n);
      p=p->next;
      if (p->next==NULL)
       printf("%d
",p->n);
    }
   return;
 }
 void sortlist(struct node *head,int num)
 {  struct node *temp,*q;
    int i,j;
    q=head;
    temp=(struct node *)malloc(sizeof(struct node));
    for(i=0;i<num;i++)
     for(j=0;j<num-1;j++)
     { while(q->next!=NULL)
       { if((q->n)>(q->next->n))
     { temp->n=q->n;
       q->n=q->next->n;
       q->next->n=temp->n;
     }
     q=q->next;
       }
    if(q->next==NULL && i<num)
      q=head;
     }
   q=head;
   return;
 }
 struct node *addbeg(struct node *head,int addn)
 { struct node *p;
   p=(struct node *)malloc(sizeof(struct node));
   p->n=addn;
   p->next=head;
   head=p;
   return head;
 }
 void addend(struct node *head,int addn)
 { struct node *p,*q;
   p=(struct node *)malloc(sizeof(struct node));
   q=head;
   while(q->next!=NULL)
    q=q->next;
   q->next=p;
   p->n=addn;
   p->next=NULL;
   return;
 }
 struct node *addbef(struct node *head,int befadd)
 { struct node *p,*q,*r;
   int addp;
   printf("new node
");
   scanf("%d",&addp);
   p=(struct node *)malloc(sizeof(struct node));
   p->n=addp;
   q=r=head;
   while(q->n!=befadd)
   { r=q;
     q=q->next;
     if(q==NULL) break;
   }
   if(q==NULL) {  printf("anode %d not found
",befadd);
          delay(1000);
          return head;
           }
   if(q==head) {  p->next=q;
          head=p;
          return head;
           }
   r->next=p;
   p->next=q;
   return head;
 }
 void addaft(struct node *head,int aftadd)
 {  struct node *p,*q;
    int addp;
    printf("new node
");
    scanf("%d",&addp);
    p=(struct node *)malloc(sizeof(struct node));
    p->n=addp;
    q=head;
    while(q->n!=aftadd)
    { q=q->next;
      if(q==NULL)  break;
    }
   if(q==NULL) {  printf("anode %d not found
",aftadd);
          delay(1000);
          return;
           }
    p->next=q->next;
    q->next=p;
    return;
 }
 void addbet(struct node *head,int no1,int no2)
 {  struct node *p,*q,*r,*s;
    int addp;
   // printf("%d %d
",*no1,*no2);
    printf("new node
");
    scanf("%d",&addp);
    p=(struct node *)malloc(sizeof(struct node));
    p->n=addp;
    r=head;
    q=r;
    if(q->n!=no1)
      { r=q;
    q=q->next;
      }
    else
   { if (q->next->n!=no2)
    {      s=q->next;
           while(s!=NULL) { s=s->next;
                if(s->n==no2)
                  { printf("anodes are not successive
");
                delay(1000);
                return;
                  }
                  }
           printf("aillegal node selection
");
           delay(1000);
           return;
    }
     else { q=q->next;
        r->next=p;
        p->next=q;
        return;
      }
   }
   while(r->n!=no1 || q->n!=no2)
    {  r=q;
       q=q->next;
       if(q==NULL)
       { printf("aillegal node selection
");
     delay(1000);
     return;
       }
    }
     r->next=p;
     p->next=q;
     return;
 }
struct node *del(struct node *head,int cut)
 { struct node *p,*q;
   p=head;
   q=p;
   while(p->n!=cut)
   { q=p;
     p=p->next;
     if(p==NULL)  { printf("anode %d not found
",cut);
            delay(1000);
            return head;
          }
   }
   if(p==head) {  head=q->next;
          q=head;
          free(p);
          return head;
           }
   q->next=p->next;
   free(p);
   return head;
 }
 struct node *befdel(struct node *head,int befcut)
 { struct node *p,*q;
   p=head;
   q=p;
   while(p->next->n!=befcut)
   { q=p;
     p=p->next;
     if(p==NULL) {  printf("anode %d not found
",befcut);
            delay(1000);
            return head;
         }
   }
   if(p==head) { head=q->next;
         q=head;
         free(p);
         return head;
           }
   q->next=p->next;
   free(p);
   return head;
 }
void aftdel(struct node *head,int aftcut)
{ struct node *p,*q;
  p=head;
  q=p;
  while(q->n!=aftcut)
  { q=p;
    p=p->next;
    if(p==NULL) { if(q->next==NULL)  printf("ano node after node
%d
",aftcut);
          else      printf("anode %d not found
",aftcut);
          delay(1000);
          return;
        }
  }
  if(q==head) p=q->next;
  q->next=p->next;
  free(p);
  return;
 }
void betdel(struct node *head,int prnode,int succnode)
{ struct node *p,*q,*r,*s;
  p=head;
  q=p;
  if(p->n!=prnode)
  { q=p;
    p=p->next;
  }
  else { r=p->next;
     if(r->next->n!=succnode)
     { s=r->next;
       while(s!=NULL) { s=s->next;
                if(s->n==succnode)
                { printf("amore nodes between those nodes
");
                  delay(1000);
                  return;
                }
              }
       printf("aillegal node selection
");
       delay(1000);
       return;
     }
     else   { q->next=r->next;
          free(r);
          return;
        }
       }
  while(q->n!=prnode || p->next->n!=succnode)
  { q=p;
    p=p->next;
    if(p->next==NULL)  { printf("aillegal node selection
");
             delay(1000);
             return;
               }
   }
    q->next=p->next;
    free(p);
    return;
 }
 void update(struct node *head,int change)
 { struct node *p;
   int upd;
   p=head;
   printf("updated node
");
   scanf("%d",&upd);
   while(p->n!=change)
   { p=p->next;
     if(p==NULL) { printf("anode %d not found
",change);
         delay(1000);
         return;
           }
   }
   p->n=upd;
   return;
  }
 void search(struct node *head,int find)
 { struct node *p;
   int j=1;
   p=head;
   while(p->n!=find)
   { p=p->next;
     j++;
     if(p==NULL) { printf("
SORRY. node %d is not present
",find);
           delay(1000);
           return;
         }
   }
   printf("aYES! the node %d is present in the %dth
position
",find,j);
   delay(1000);
   return;
 }
 struct node *reverse(struct node *head)
 { struct node *t1,*t2;
  t1=head->next;
  t2=t1->next;
  head->next=NULL;
  while(t1!=NULL)
  { t1->next=head;
    head=t1;
    t1=t2;
    t2=t2->next;
  }
   return head;
 }

 


Advertisements