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

Program: Read in a file of positive integers ( > 0) from \'\'integer.dat\'\' (pe

ID: 3759937 • Letter: P

Question

Program: Read in a file of positive integers ( > 0) from ''integer.dat'' (perform file validation - e.g. file exists, empty file, etc.) and create a doubly linked list of integers in ascending sorted order - print out any error messages to the screen and to a file ''log.txt'' if the integer is 0) or delete integers from the list and print the entire list or the even number list in ascending or descending order. The action will be written to the screen and to the log file. Notify the user with a message if the number to add is already in the list or if the number is not in the list if they to delete a number not in the list.

Explanation / Answer

struct node
{
    struct node *prev;
    int number;
    struct node *next;
}

void Initialize(int number)
{
    temporary =(struct node *)malloc(1*sizeof(struct node));
    temporary->prev = NULL;
    temporary->next = NULL;
    temporary->number = number;
    count++;
}

void add(int number)
{
    if (h == NULL)
    {
        Initialize();
        h = temporary;
        temporary1 = h;
    }
    else
    {
        Initialize(number);
        temporary->next = h;
        h->prev = temporary;
        h = temporary;
    }
}


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

    printf(" Enter position to be deleted : ");
    scanf("%d", &pos);
    temporary2 = 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)
        {
            temporary2 = temporary2->next;
            i++;
        }
        if (i == 1)
        {
            if (temporary2->next == NULL)
            {
                printf("Node has been deleted from list");
                free(temporary2);
                temporary2 = h = NULL;
                return;
            }
        }
        if (temporary2->next == NULL)
        {
            temporary2->prev->next = NULL;
            free(temporary2);
            printf("Node has been deleted from list");
            return;
        }
        temporary2->next->prev = temporary2->prev;
        if (i != 1)
            temporary2->prev->next = temporary2->next;  
        if (i == 1)
            h = temporary2->next;
        printf(" Node deleted");
        free(temporary2);
    }
    count--;
}

void traversebeg()
{
    temporary2 = h;

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

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

void traverseend(int i)
{
    if (temporary2 != NULL)
    {
        i = temporary2->number;
        temporary2 = temporary2->next;
        traverseend(i);
        printf(" %d ", i);
    }
}

void search()
{
    int number, count = 0;
    temporary2 = h;

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


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

    temporary2 = h;
    temp4 = h;

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

    for (temporary2 = h; temporary2 != NULL; temporary2 = temporary2->next)
    {
        for (temp4 = temporary2->next; temp4 != NULL; temp4 = temp4->next)
        {
            if (temporary2->number > temp4->number)
            {
                x = temporary2->number;
                temporary2->number = temp4->number;
                temp4->number = x;
            }
        }
    }
    traversebeg();
}


void main()
{

//read integers and put in a file "integer.dat"
File *fp=new File("integer.dat");
printf("Enter your numbers..enter "99999999999" to quit");
int integer;
scanf("%d",&integer);
while(integer!=99999999999)
{
write_integer(fp,integer);  //write to file
add(integer);     // add to list
}
//To print list in ascending
sort();
traversebeg();

//To print list in descending
sort();
traverseend();

// To delete a number from list
remove();

//To check before adding or deleting a number, call the search function.
}

void write_integer(FILE * out, int number) {
   if (NULL==out) {
       fprintf(stderr, "There is an error");
       exit(EXIT_FAILURE);
   }
   fwrite(&number,sizeof(int),1, out);
   if(ferror(out)){
      perror(__func__);
      exit(EXIT_FAILURE);
   }
}