Documents
Resources
Learning Center
Upload
Plans & pricing Sign in
Sign Out

Operations on a DLL_ doubly linked list.pdf

VIEWS: 1 PAGES: 5

Operations on a DLL_ doubly linked list.

More Info
									/*Operations on a DLL( doubly linked list) */
/* Details :
   Accept input as a string and construct a Doubly Linked List for the
input
   string with each node contains, as a data one character from the
string and
   perform :
   a) Insert b) delete c)Display forward d) Display backward
*/

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

typedef struct node
   { char data;
     struct node *next,*prev;
   }node;

node *create();
node *insert_b(node *head,char x);
node *insert_e(node *head,char x);
node *insert_in(node *head,char x);
node *delete_b(node *head);
node *delete_e(node *head);
node *delete_in(node *head);
void displayforward(node *head);
void displaybackward(node *head);
void main()
{ int op,op1;
  char x;
  node *head=NULL;
  clrscr();
  do
     { flushall();
       printf("\n\n1)create\n2)Insert\n3)Delete");
       printf("\n4)Display forward\n5)Display backward\n6)Quit");
       printf("\nEnter your Choice:");
       scanf("%d",&op);
       switch(op)
        { case 1:head=create();break;
        case 2:printf("\n\t1)Beginning\n\t2)End\n\t3)In between");
             printf("\nEnter your choice : ");
             scanf("%d",&op1);
             printf("\nEnter the data to be inserted : ");
             flushall();
             x=getchar();
             switch(op1)
              { case 1: head=insert_b(head,x);
                       break;
                 case 2: head=insert_e(head,x);
                       break;
                 case 3: head=insert_in(head, x);
                      break;
              }
            break;
       case 3:printf("\n\t1)Beginning\n\t2)End\n\t3)In between");
            printf("\nEnter your choice : ");
            scanf("%d",&op1);
            switch(op1)
             { case 1:head=delete_b(head);
                     break;
                case 2:head=delete_e(head);
                     break;
                case 3:head=delete_in(head);
                     break;
              }
             break;
       case 4:displayforward(head);break;
       case 5:displaybackward(head);break;
       }
    }while(op!=6);
}

node *create()
{ node *head,*p;
   char x;
   head=NULL;
   printf("\n Enter a string :");
   flushall();
   while((x=getchar())!='\n')
    {
       if(head==NULL)
        {
              head=p=(node*)malloc(sizeof(node));
              head->next=head->prev=NULL;
        }
       else
          {
              p->next=(node*)malloc(sizeof(node));
              p->next->prev=p;
              p=p->next;
              p->next=NULL;
          }
      p->data=x;
    }
  return(head);
}

node *insert_b(node *head,char x)
{   node *p;
    p=(node*)malloc(sizeof(node));
    p->data=x;
   if(head==NULL)
      {
            head=p;
            head->next=head->prev=NULL;
       }
    else
         {
             p->next=head;
             head->prev=p;
             p->prev=NULL;
             head=p;
        }
    return(head);
}
node *insert_e(node *head,char x)
{   node *p,*q;
    p=(node*)malloc(sizeof(node));
    p->data=x;
   if(head==NULL)
      {
            head=p;
            head->next=head->prev=NULL;
      }
   else
        {
            for(q=head; q->next != NULL ; q=q->next)
            ;
            q->next=p;
            p->prev=q;
            p->next=NULL;

        }
    return(head);
}


node *insert_in(node *head,char x)
{   node *p,*q;
    char y;
    p=(node*)malloc(sizeof(node));
    p->data=x;
    printf("\Insert after which character ? : ");
    flushall();
    y=getchar();
    //locate the lthe data 'y'
    for(q=head ; q != NULL && q->data != y; q=q->next)
    ;
    if(q->data==y)
      {
          p->next=q->next;
          p->prev=q;
          p->next->prev=p;
          p->prev->next=p;
      }
    else
       printf("\nData not found ");
    return(head);
}
node *delete_b(node *head)
{
  node *p,*q;
  if(head==NULL)
     {
        printf("\nUnderflow....Empty Linked List");
        return(head);
     }
  if(head->next==NULL)//delete the only node
    {
       p=head;
       free(p);
       head=NULL;
    }
  else
    {
       p=head;
       head=head->next;
       head->prev=NULL;
       free(p);
    }
  return(head);

}
node *delete_e(node *head)
{
  node *p;
  if(head==NULL)
     {
        printf("\nUnderflow....Empty Linked List");
        return(head);
     }
  if(head->next==NULL)//delete the only node
    {
        p=head;
        free(p);
        head=NULL;
    }
  else
    {
        for(p=head ; p->next != NULL ; p=p->next)
        ;
        p->prev->next=NULL;
        free(p);
    }
  return(head);

}

node *delete_in(node *head)
{
  node *p,*q;
  char x;
  if(head==NULL)
        {
         printf("\nUnderflow....Empty Linked List");
         return(head);
        }
     printf("\nEnter the data to be deleted : ");
     flushall();
     x=getchar();
     for(p=head ; p !=NULL && p->data != x ; p=p->next)
     ;

      if(p->data!=x)
        {
            printf("\nUnderflow.....data not found");
            return(head);
        }
    if(p==head)
     {
            head=head->next;
            if(head != NULL)
                 head->prev=NULL;
            free(p);
     }
    else
     {
          p->prev->next=p->next;
          p->next->prev=p->prev;
          free(p);
      }
    return(head);
}

void displayforward(node *head)
{ node *p;
  printf("\n");
  if(head != NULL)
     {
       for(p=head ;p!=NULL ; p=p->next)
            printf("%c",p->data);
     }
}
void displaybackward(node *head)
{ node *p;
  printf("\n");
  if(head != NULL)
     {   // go to the last node
       for(p=head ;p->next!=NULL ; p=p->next)
       ;
       for( ;p!=NULL ; p=p->prev)
            printf("%c",p->data);
     }
}

								
To top