Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

( implemented in C) Please , Make The .c and makefile • The executable • A pdf d

ID: 3767711 • Letter: #

Question

( implemented in C)

Please ,

Make The .c   and   makefile

• The   executable

• A pdf document explaining your approach on how your solved the problem and   a    screenshot of   a   test   run   of   your   program

QUESTION:

Implement a   doubly   linked   list   and   the   following   methods:  

a. Insert

b. Delete

c. Add first  

d. Add last  

e. Get

f.   Deep   copy  

g. Size

The main should allow the user to enter three values to insert, a position to

delete,   a value   to   add   to   the   beginning    of    the   list,   a value   to   add   to   the   list,   a position to get, and your program   should print the resulting list after each   input.   Finally,   the   main   should   print   the   size   of   the   final   list   and   then   make   a   copy   printing out the name, pointer location, and memory location of each   list.

  

Explanation / Answer

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

struct node
{
    struct node *prev;
    int n;
    struct node *next;
}*h,*temp,*temp1,*temp2,*temp4;

void insert_begin();
void insert_end();
void insert_position();
void position_delete();
void Display_begin(int);
void sort();
void search();
void update();
void delete();

int count = 0;

void main()
{
    int ch;

    h = NULL;
    temp = temp1 = NULL;

    printf(" 1 - Insert at beginning");
    printf(" 2 - Insert at end");
    printf(" 3 - Insert at position i");
    printf(" 4 - Delete at i");
    printf(" 5 - Display from beginning");
    printf(" 6 - Display from end");
    printf(" 7 - Search for element");
    printf(" 8 - Sort the list");
    printf(" 9 - Update an element");
    printf(" 10 - Exit");

    while (1)
    {
        printf(" Enter choice : ");
        scanf("%d", &ch);
        switch (ch)
        {
        case 1:
            insert_begin();
            break;
        case 2:
            insert_end();
            break;
        case 3:
            insert_position();
            break;
        case 4:
            delete();
            break;
        case 5:
            position_delete();
            break;
        case 6:
            temp2 = h;
            if (temp2 == NULL)
                printf(" Error : List empty to display ");
            else
            {
                printf(" Reverse order of linked list is : ");
                Display_begin(temp2->n);
            }
            break;
        case 7:
            search();
            break;
        case 8:
            sort();
            break;
        case 9:
            update();
            break;
        case 10:
            exit(0);
        default:
            printf(" Wrong choice menu");
        }
    }
}

void create()
{
    int data;

    temp =(struct node *)malloc(1*sizeof(struct node));
    temp->prev = NULL;
    temp->next = NULL;
    printf(" Enter value to node : ");
    scanf("%d", &data);
    temp->n = data;
    count++;
}

void insert_begin()
{
    if (h == NULL)
    {
        create();
        h = temp;
        temp1 = h;
    }
    else
    {
        create();
        temp->next = h;
        h->prev = temp;
        h = temp;
    }
}

void insert_end()
{
    if (h == NULL)
    {
        create();
        h = temp;
        temp1 = h;
    }
    else
    {
        create();
        temp1->next = temp;
        temp->prev = temp1;
        temp1 = temp;
    }
}

void insert_position()
{
    int pos, i = 2;

    printf(" Enter position to be inserted : ");
    scanf("%d", &pos);
    temp2 = h;

    if ((pos < 1) || (pos >= count + 1))
    {
        printf(" Position out of range to insert");
        return;
    }
    if ((h == NULL) && (pos != 1))
    {
        printf(" Empty list cannot insert other than 1st position");
        return;
    }
    if ((h == NULL) && (pos == 1))
    {
        create();
        h = temp;
        temp1 = h;
        return;
    }
    else
    {
        while (i < pos)
        {
            temp2 = temp2->next;
            i++;
        }
        create();
        temp->prev = temp2;
        temp->next = temp2->next;
        temp2->next->prev = temp;
        temp2->next = temp;
    }
}

void delete()
{
    int i = 1, pos;

    printf(" Enter position to be deleted : ");
    scanf("%d", &pos);
    temp2 = h;

    if ((pos < 1) || (pos >= count + 1))
    {
        printf(" Error : Position out of range to delete");
        return;
    }
    if (h == NULL)
    {
        printf(" Error : Empty list no elements to delete");
        return;
    }
    else
    {
        while (i < pos)
        {
            temp2 = temp2->next;
            i++;
        }
        if (i == 1)
        {
            if (temp2->next == NULL)
            {
                printf("Node deleted from list");
                free(temp2);
                temp2 = h = NULL;
                return;
            }
        }
        if (temp2->next == NULL)
        {
            temp2->prev->next = NULL;
            free(temp2);
            printf("Node deleted from list");
            return;
        }
        temp2->next->prev = temp2->prev;
        if (i != 1)
            temp2->prev->next = temp2->next;    /* Might not need this statement if i == 1 check */
        if (i == 1)
            h = temp2->next;
        printf(" Node deleted");
        free(temp2);
    }
    count--;
}

void position_delete()
{
    temp2 = h;

    if (temp2 == NULL)
    {
        printf("List empty to display ");
        return;
    }
    printf(" Linked list elements from begining : ");

    while (temp2->next != NULL)
    {
        printf(" %d ", temp2->n);
        temp2 = temp2->next;
    }
    printf(" %d ", temp2->n);
}

void Display_begin(int i)
{
    if (temp2 != NULL)
    {
        i = temp2->n;
        temp2 = temp2->next;
        Display_begin(i);
        printf(" %d ", i);
    }
}

void search()
{
    int data, count = 0;
    temp2 = h;

    if (temp2 == NULL)
    {
        printf(" Error : List empty to search for data");
        return;
    }
    printf(" Enter value to search : ");
    scanf("%d", &data);
    while (temp2 != NULL)
    {
        if (temp2->n == data)
        {
            printf(" Data found in %d position",count + 1);
            return;
        }
        else
             temp2 = temp2->next;
            count++;
    }
    printf(" Error : %d not found in list", data);
}

void update()
{
    int data, data1;

    printf(" Enter node data to be updated : ");
    scanf("%d", &data);
    printf(" Enter new data : ");
    scanf("%d", &data1);
    temp2 = h;
    if (temp2 == NULL)
    {
        printf(" Error : List empty no node to update");
        return;
    }
    while (temp2 != NULL)
    {
        if (temp2->n == data)
        {

            temp2->n = data1;
            position_delete();
            return;
        }
        else
            temp2 = temp2->next;
    }

    printf(" Error : %d not found in list to update", data);
}

void sort()
{
    int i, j, x;

    temp2 = h;
    temp4 = h;

    if (temp2 == NULL)
    {
        printf(" List empty to sort");
        return;
    }

    for (temp2 = h; temp2 != NULL; temp2 = temp2->next)
    {
        for (temp4 = temp2->next; temp4 != NULL; temp4 = temp4->next)
        {
            if (temp2->n > temp4->n)
            {
                x = temp2->n;
                temp2->n = temp4->n;
                temp4->n = x;
            }
        }
    }
    position_delete();
}