Skip to main content

Doubly Linked List using C

Doubly Linked List program using C language

Operations: - Create List, insertion (beg, mid, end) deletion (beg, mid, end), Traverse

#include<stdio.h>

#include<conio.h>

 void inst_beg();
 void inst_mid();
 void inst_end();
 void del_beg();
 void del_mid();
 void del_end();
 void traverse();
 void reverse();
 int count();

 struct node
 { int num;
   struct node *next;
   struct node *prev;
 }*start=NULL,*last=NULL;

 typedef struct node node;
 typedef struct node* nptr;

 void main()
 { char choice;
   while(1)
   {
   clrscr();
   printf("-------LINKED LIST-------\n\n");
   printf(" 1.Insertion at begining\n");
   printf(" 2.Insertion at mid\n");
   printf(" 3.Insertion at end\n");
   printf(" 4.Deletion from begining\n");
   printf(" 5.Deletion from mid\n");
   printf(" 6.Deletion from end\n");
   printf(" 7.Traverse\n");
   printf(" 8.Traverse in reverse order\n");
   printf(" 9.Exit\n\n");
   printf(" Enter your choice: ");
   fflush(stdin);
   scanf("%c",&choice);
   switch(choice)
   { case '1': inst_beg();
    break;
     case '2': inst_mid();
    break;
     case '3': inst_end();
    break;
     case '4': del_beg();
    break;
     case '5': del_mid();
    break;
     case '6': del_end();
    break;
     case '7': traverse();
    break;
      case '8': reverse();
    break;
     case '9': exit(0);
     default: printf("\n\ninvalid choice");
   }
   getch();
 }
 }

  void inst_beg()
  { int item;
    nptr p;
    p=(nptr)malloc(sizeof(node));
    printf("\nenter the item: ");
    scanf("%d",&item);
    p->num=item;
    if(start==NULL)
    { start=last=p;
      p->prev=NULL;
      p->next=NULL;
    }
    else
    { p->next=start;
      start->prev=p;
      p->prev=NULL;
      start=p;
    }
  }

   void inst_end()
  { int item;
    nptr p;
    p=(nptr)malloc(sizeof(node));
    printf("\nenter the item: ");
    scanf("%d",&item);
    p->num=item;
    if(start==NULL)
    { start=last=p;
      p->prev=NULL;
      p->next=NULL;
    }
    else
    { p->next=NULL;
      p->prev=last;
      last->next=p;
      last=p;
    }
  }

   void inst_mid()
  { int item,i=1,pos,res;
    nptr p,q;
    p=(nptr)malloc(sizeof(node));
    printf("\n\nenter position for insertion: ");
    scanf("%d",&pos);
    res=count();
    if(pos<=1||pos>res)
    { printf("\n\ninsertion not possible");
    }
    else
    {
      printf("\nenter the item: ");
      scanf("%d",&item);
      p->num=item;
      q=start;
      while(i<pos-1)
      { q=q->next;
i++;
      }
      p->next=q->next;
      q->next=p;
      p->prev=q;
    }
  }

  int count()
  { int c=0;
    nptr p;
    p=start;
    while(p!=NULL)
    { p=p->next;
      c++;
    }
    return c;
  }

  void del_beg()
  { nptr p;
    if(start==NULL)
    { printf("\n\nlinked list is empty");
    }
    if(start==last)
    { p=start;
      start=last=NULL;
      printf("\n %d is deleted",p->num);
      free(p);
    }
    else
    { nptr p;
      p=start;
      start=start->next;
      start->prev=NULL;
      printf("\ndeleted node: %d",p->num);
      free(p);
    }
  }

   void del_end()
  { nptr p;
    if(start==NULL)
    { printf("\n\nlinked list is empty");
    }
    if(start==last)
    { p=start;
      start=last=NULL;
      printf("\n %d is deldeted",p->num);
      free(p);
    }
    else
    { p=last;
      last->prev->next=NULL;
      last=last->prev;
      printf("\n%d is deleted",p->num);
      free(p);
    }
  }

   void del_mid()
   {  int i=1,pos,res;
       nptr p,q;
     if(start==NULL)
     { printf("\n\nempty");
     }
     else
     {
     printf("\nenter position: ");
     scanf("%d",&pos);
     p=q=start;
    res=count();
    if(pos<=2||pos>=res)
    { printf("\n\nDeletion is not possible");
    }
    else
    {
     while(i<pos)
     {q=p;
      p=p->next;
      i++;
     }
     q->next=p->next;
     p->next->prev=q;
     printf("deleted node: %d",p->num);
     free(p);
    }
    }
   }

   void traverse()
   { if(start==NULL)
     { printf("\nempty");
     }
     else
     { nptr p;
       p=start;
       while(p!=NULL)
       { printf(" %d",p->num);
p=p->next;
       }
     }
   }

    void reverse()
   { if(start==NULL)
     { printf("\nempty");
     }
     else
     { nptr p;
       p=last;
       while(p!=NULL)
       { printf(" %d",p->num);
p=p->prev;
       }
     }
   }

Comments

Popular posts from this blog

Use Case Diagram for Online Book Store

Online Movie Ticket Booking Sequence Diagram

Linear search & Binary search using Template

Write a program to search an element from a list. Give user the option to perform Linear or Binary search. Use Template functions. #include<iostream> using namespace std; template <class T> void Lsearch(T *a, T item, int n) { int z=0; for(int i=0;i<n;i++) { if(a[i]== item) { z=1; cout<<"\n Item found at position = "<<i+1<<"\n\n"; } else if(z!=1) { z=0; } } if(z==0) cout<<"\n Item not found in the list\n\n"; } template <class T> void Bsearch(T *a, T item, int n) { int beg=0,end=n-1; int mid=beg+end/2; while((a[mid]!=item) && (n>0)) { if(item>a[mid]) beg=mid; else end=mid; mid=(beg+end)/2; n--; } if(a[mid]==item) cout<<"\n Item found at position = "<<mid+1<<"\n\n"; else cout<<"\n Item not found in the list\n\n"; } void main() { int iarr[10] = {2,42,56,86,87,99,323,546,767,886};