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

Thursday 22 September 2016

Singly Linked List: Insert at End

Singly Linked List: Insert at End


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

NODE getnode();
NODE insert_at_end(NODE first, int item);
void display( NODE first);

NODE getnode()
{
            NODE x;
            x = (NODE)malloc(sizeof(struct node));
            x->link = NULL;
            return x;
}
void display(NODE first)
{
            NODE cur;
            cur = first;
            printf("\nContents are:");
            if(cur == NULL)
                        printf("\nList is empty. Nothing to display.");
            else
            {
                        while(cur!=NULL)
                        {
                                    printf("%d  ", cur->data);
                                    cur = cur->link;
                        }
            }
}

NODE insert_at_end(NODE first, int item)
{
            NODE temp, cur;
            temp = getnode();
            temp->data = item;

            /*Case 1: List is empty*/        
            if(first == NULL)
                        return temp;
            /*Case 2: List has nodes: Traverse till the end of the list*/
            cur = first;
            while(cur->link != NULL)
            {
                        cur = cur->link;
            }
            /*Set the link field of last node to point to temp node*/
            cur->link = temp;
            return first;
}

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

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

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

~~MENU~~
1.Insert at end
2.Display
3.exit
Enter your choice: 2
Contents are: 11  12

~~MENU~~
1.Insert at end
2.Display
3.exit


Singly Linked List: Insert at Front

Singly Linked List Insert at Front


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

struct node
{
            int data;
            struct node *link;
};
typedef struct node * NODE;

NODE insert_at_front(NODE first, int item);
void display(NODE first);

NODE getnode()
{
            NODE x;
            x = (NODE)malloc(sizeof(struct node));
            x->link = NULL;
            return x;
}

NODE insert_at_front(NODE first, int item)
{
            NODE temp;
            temp = getnode();
            temp->data = item;

            /*Case 1: List is empty.*/
            if(first==NULL)
                        return temp;

            /*Case 2: List has nodes. Insert temp node in the front*/
            temp->link = first;
            return temp;
           

                                    /*
                                                            ( or )
                                                    if(first)
                                                                    temp->link = first;
                                                    return temp;
                                     */
}

void display(NODE first)
{
            NODE cur;
            cur = first;
            printf("\nContents are:");
            if(cur == NULL)
                        printf("\nList is empty. Nothing to display.");
            else
            {
                        while(cur!=NULL)
                        {
                                    printf("%d  ", cur->data);
                                    cur = cur->link;
                        }
            }
}

void main()
{
            int ch, item;
            NODE first = 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);
                                                            first = insert_at_front(first, item);
                                                            break;
                                    case 2:            display(first);
                                                            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: 1
Enter the value: 12

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

Wednesday 21 September 2016

Queue Using Singly Linked List

Queue Using Singly Linked List



#include<stdio.h>
#include<stdlib.h>
struct queue
{
            int data;
            struct queue *link;
};

typedef struct queue * NODE;

NODE front = NULL;
NODE rear = NULL;

NODE getnode()
{
            NODE x;
            x = (NODE)malloc(sizeof(struct queue));
            x->link = NULL;
}

void insert_rear(int item)
{
            int val;
            NODE temp, cur;
            temp = getnode();
            temp->data = item;

            /*Case 1: List is empty*/
            if(front == NULL)
            {
                        front = rear =temp;
            }
            else
            {
                        rear->link = temp;
                        rear = rear->link;
            }
}

NODE delete_front()
{
            NODE temp;
            if(front == NULL)
            {
                        printf("\nQueue underflow");
                        return NULL;
            }
            else
            {
                        temp = front;
                        front = front->link;
                        temp->link = NULL;
                        printf("\nItem got deleted is: %d", temp->data);
                        free(temp);
                        return front;
            }
}

void display()
{
            NODE cur;
            if(front == NULL)
            {
                        printf("\nQueue is empty");
             }
            else
            {
                        printf("\nQueue contents are:\n");
                        for(cur = front; cur != rear->link ; cur  = cur->link)
                                    printf("%d   ", cur->data);
            }
}
void main()
{
            int ch, item;
            while(1)
            {
                        printf("\n~~MENU~~");
                        printf("\n1.Insert operation");
                        printf("\n2.Delete operation");
                        printf("\n3.Display");
                        printf("\nEnter your choice: ");
                        scanf("%d",&ch);
                        switch(ch)
                        {
                                    case 1: printf("\nEnter the item to be inserted: ");
                                                scanf("%d", &item);
                                                insert_rear(item);
                                                display();
                                                break;
                                    case 2: front = delete_front();
                                                display();
                                                break;
                                    case 3: display();
                                                break;
                                    case 4: exit(0);
                        }
            }
}

Output
~~MENU~~
1.Insert operation
2.Delete operation
3.Display
Enter your choice: 1

Enter the item to be inserted: 11
Queue contents are:
11

~~MENU~~
1.Insert operation
2.Delete operation
3.Display
Enter your choice: 1

Enter the item to be inserted: 12
Queue contents are:
11        12

~~MENU~~
1.Insert operation
2.Delete operation
3.Display
Enter your choice: 1

Enter the item to be inserted: 13
Queue contents are:
11        12        13

~~MENU~~
1.Insert operation
2.Delete operation
3.Display
Enter your choice: 1

Enter the item to be inserted: 14
Queue contents are:
11        12        13         14

~~MENU~~
1.Insert operation
2.Delete operation
3.Display
Enter your choice: 2

Item got deleted is: 11
Queue contents are:
12        13        14

~~MENU~~
1.Insert operation
2.Delete operation
3.Display
Enter your choice: 2

Item got deleted is: 12
Queue contents are:
13        14

~~MENU~~
1.Insert operation
2.Delete operation
3.Display
Enter your choice: 2

Item got deleted is: 13
Queue contents are:
14

~~MENU~~
1.Insert operation
2.Delete operation
3.Display
Enter your choice: 2

Item got deleted is: 14
Queue is empty

~~MENU~~
1.Insert operation
2.Delete operation
3.Display
Enter your choice: 2

Queue underflow
Queue is empty

~~MENU~~
1.Insert operation
2.Delete operation
3.Display
Enter your choice: 4