Read in your tongue here..

Showing posts with label Singly Linked List. Show all posts
Showing posts with label Singly Linked List. Show all posts

Friday, June 28, 2013

Singly Linked List

#include<alloc.h>
struct list{
     int data;
     struct list *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("\n\n\tMain 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;
           head=temp;
           printf("Continue [y/n]?:");
           con=getche();
     }while(con=='y'||con=='Y');
}
void inpos(void)
{
     do
     {
           num=0;
           temp=head;
           printf("Enter position to insert at:");
           scanf("%d",&pos);
           while(temp->next!=NULL)
           {
                num++;
                if(num==pos-1)
                     break;
                temp=temp->next;
           }
           printf("Enter number:");
           scanf("%d",&num);
           node=(struct list*)malloc(sizeof(struct list));
           node->data=num;
           node->next=temp->next;
           temp->next=node;
           printf("Continue [y/n]?:");
           con=getche();
     } while(con=='y'||con=='Y');
}
void inlast(void)
{
     do
     {
           printf("\nEnter number:");
           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;
           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;
                free(temp);
                printf("Continue [y/n]?:");
                con=getche();
           }
     } while(con=='y'||con=='Y');
}
void delpos(void)
{
     do{
           if(empty()==1)
                break;
           else
           {
                num=0;
                temp=head;
                printf("Enter 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;
                printf("Continue [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("Continue [y/n]?:");
                con=getche();
           }
     } while(con=='y'||con=='Y');
}
void display(void)
{
     if(empty()==1)
return;
     else
     {
           clrscr();
           printf("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("Total number of nodes=%d",num);
}