Read in your tongue here..

Friday, June 28, 2013

Doubly Linked List

#include<alloc.h>
struct list{
     int data;
     struct list *prev,*next;
}*head=NULL,*temp,*node;
void infirst(void), inpos(void), inlast(void), delfront(void), delpos(void), dellast(void), display(void), count(void);
int num,pos,empty(void);
char con;
int empty(void)
{
     if(head==NULL)
     {
           clrscr();
           printf("The list is empty!!");
           return 1;
     }
     return 0;
}

void main()
{
     printf("\nMain Menu\n1.Insert at first\n2.Insert at specified position\n3.Insert at last\n4.Delete first\n5.Delete specified position\n6.Delete from last\n7.Display\n8.Count number of nodes\n9.Exit\nEnter choice:");
     scanf("%d",&num);
     switch(num)
     {
           case 1:
                infirst();
                break;
           case 2:
                inpos();
                break;
           case 3:
                inlast();
                break;
          case 4:
                delfront();
                break;
           case 5:
                delpos();
                break;
           case 6:
                dellast();
                break;
           case 7:
                display();
                break;
           case 8:
                count();
                break;
           case 9:
                clrscr();
                exit();
           default:
                clrscr();
                puts("\nWRONG INPUT!!");
     }
     main();
}
void infirst(void)
{
     do
     {
           printf("\nEnter number:");
           scanf("%d",&num);
           temp=(struct list*)malloc(sizeof(struct list));
           temp->data=num;
           temp->next=head;
           temp->prev=NULL;
           head=temp;
           printf("\nContinue [y/n]?:");
           con=getche();
     }while(con=='y'||con=='Y');
}
void inpos(void)
{
     do
     {
           num=0;
           temp=head;
           printf("\nEnter position to insert at:");
           scanf("%d",&pos);
           while(temp->next!=NULL)
           {
                num++;
                if(num==pos-1)
                     break;
                temp=temp->next;
           }
           printf("\nEnter number:");
           scanf("%d",&num);
           node=(struct list*)malloc(sizeof(struct list));
           node->data=num;
           node->next=temp->next;
           node->prev=temp;
           temp->next=node;
           printf("\nContinue [y/n]?:");
           con=getche();
     } while(con=='y'||con=='Y');
}
void inlast(void)
{
     do
     {
           printf("\nEnter data:");
           scanf("%d",&num);
           temp=head;
           while(temp->next!=NULL)
                temp=temp->next;
           node=(struct list *)malloc(sizeof(struct list));
           node->data=num;
           node->next=NULL;
           node->prev=temp;
           temp->next=node;
           printf("\nContinue [y/n]?:");
           con=getche();
     } while(con=='y'||con=='Y');
}

void delfront(void)
{
     do
     {
           if(empty()==1)
                break;

           else
           {
                temp=head;
                head=temp->next;
                head->prev=NULL;
                free(temp);
                printf("\nContinue [y/n]?:");
                con=getche();
           }
     } while(con=='y'||con=='Y');
}
void delpos(void)
{
     do
     {
           if(empty()==1)
                break;

           else
           {
                num=0;
                temp=head;
                printf("\nEnter position:");
                scanf("%d",&pos);
                while(temp->next!=NULL)
                {
                num++;
                if(num==pos-1)
                     break;
                temp=temp->next;
                }
                node=temp->next->next;
                free(temp->next);
                temp->next=node;
                node->prev=temp;
                printf("\nContinue [y/n]?:");
                con=getche();
           }
     } while(con=='y'||con=='Y');
}
void dellast(void)
{
     do
     {
           if(empty()==1)
                break;

           else
           {
                temp=head;
                while(temp->next!=NULL)
                {
                     node=temp;
                     temp=temp->next;
                }
                node->next=NULL;
                free(temp);
                printf("\nContinue [y/n]?:");
                con=getche();
           }
     } while(con=='y'||con=='Y');
}
void display(void)
{
     if(empty()==1)
return;
     else
     {
           puts("The list is:");
           for(temp=head;temp!=NULL;temp=temp->next)
                printf("%d ",temp->data);
     }
}
void count(void)
{
     num=0;
     temp=head;
     while(temp!=NULL)
     {
           num++;
           temp=temp->next;
     }
     clrscr();
     printf("\nTotal number of nodes=%d",num);
}



No comments:

Post a Comment