Saturday, 24 September 2016

Circular Doubly Linked List: Insert at Front

Circular Doubly Linked List: Insert at Front


#include<stdio.h>
#include<stdlib.h>
struct node
{
                int data;
                struct node *llink;
                struct node *rlink;
};
typedef struct node* NODE;

NODE getnode();
NODE insert_at_front(NODE last, int item);
void display(NODE last);

NODE getnode()
{
                NODE x;
                x =(NODE) malloc(sizeof(struct node));
                return x;
}
NODE insert_at_front(NODE last, int item)
{
                NODE temp;
                temp = getnode();
                temp->data = item;
                if(last == NULL)                /*Case 1: List is empty*/
                {
                                last = temp;
                }
                else                                      /*Case 2: If not empty*/
                {
                                temp->rlink = last->rlink;
                                last->rlink->llink = temp;
                }
                temp->llink = last;
                last->rlink = temp;
                return last;
}
void display(NODE last)
{
                NODE cur;
                printf("\nContents are:\n");
                if(last == NULL)
                                printf("\nList is empty. Nothing to display.");
                else
                {
                                cur = last->rlink;
                                while(cur != last)
                                {
                                                printf("|%d | %d | %d | ==>  ", cur->llink, cur->data, cur->rlink);
                                                cur = cur->rlink;
                                }
                                printf("| %d | %d | %d |  ", cur->llink, cur->data, cur->rlink);
                 }
}

void main()
{
                int ch, item;
                NODE last = NULL;
                while(1)
                {
                                printf("\n\n~~MENU~~");
                                printf("\n1.Insert at front");
                                printf("\n2.Display");
                                printf("\n3.exit");
                                printf("\nEnter your choice: ");
                                scanf("%d",&ch);
                                switch(ch)
                                {
                                                case 1:   printf("\nEnter the value: ");
                                                              scanf("%d", &item);
                                                              last = insert_at_front(last, item);
                                                              break;
                                                case 2:   display(last);
                                                              break;
                                                case 3:   exit(0);
                                }
                }
}

Output:


~~MENU~~
1.Insert at front
2.Display
3.exit
Enter your choice: 1
Enter the value: 11

~~MENU~~
1.Insert at front
2.Display
3.exit
Enter your choice: 2
Contents are:
| 70920 | 11 | 70920 |

~~MENU~~
1.Insert at front
2.Display
3.exit
Enter your choice: 1
Enter the value: 12

~~MENU~~
1.Insert at front
2.Display
3.exit
Enter your choice: 2
Contents are:
|70920 | 12 | 70920 | ==>  | 70944 | 11 | 70944 |


~~MENU~~
1.Insert at front
2.Display
3.exit
Enter your choice: 1
Enter the value: 13

~~MENU~~
1.Insert at front
2.Display
3.exit
Enter your choice: 2
Contents are:
|70920 | 13 | 70944 | ==>  |70968 | 12 | 70920 | ==> | 70944 | 11 | 70968 |

~~MENU~~
1.Insert at front
2.Display
3.exit
Enter your choice: 3