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

I HAVE THE CODE, I JUST NEED HELP TROUBLESHOOTING PLEASE Objective: Write a C pr

ID: 3622230 • Letter: I

Question

I HAVE THE CODE, I JUST NEED HELP TROUBLESHOOTING PLEASE

Objective:

Write a C program that takes as input a list of integers (in random order), stores the integers in a linked list, and orders the list using the MergeSort.

Specifications:

1. The program will read data from an input file and store the data in a doubly-linked list.

2. The program will order the data using the MergeSort algorithm.

3. The program will display the sorted data to the user.

4. The program will have an abstract data type (ADT) for the doublylinked list and will protect the struct by placing it in a List.c file, and having just a typedef for the struct in the List.h file.

5. All code associated with the ADT will be placed in separate files and included in the driver program. (Note: only include the .h file.)

6. The file that the program uses will have the following name: "Data.txt".

You will submit a zipped (compressed) file to the course dropbox. It will contain five files:

list.h, list.c, mergesort.h, mergesort.c, and proj5.c

This is what I have so far:

LIST.h

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

struct list                                        
{                                                  
       int data;                                   
       struct list *next;                          
       struct list *prev;                          
} *start, *trav, *temp, *right, *left, *t;         

FILE*Data;                                         
struct list *CreateList(FILE* Data);

LIST.c

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


struct list *CreateList(FILE* Data)               
{                                                 
    
     int i = 0, data = 0;
     if (Data == NULL)
     {
              printf(" Input file did not open. Please check it and try again. Program Terminating... ");
              system("PAUSE");
              exit(1);
     }
     else
     {
              printf(" Your Original List Is: ");
              while(!feof(Data))
              {
                      if (data == 0)
                      {
                              fscanf(Data, "%d", &temp);
                              temp -> next == NULL;
                              temp -> prev == NULL;
                              data = 1;
                      }
                      else
                      {                                              
                              printf(" %d ", temp);
                              fscanf(Data, "%d",&temp);        
                              temp -> next == NULL;
                              temp -> prev == NULL;
                              if (start == NULL)
                              {
                                        start = temp;
                                        left = temp;
                                        right = temp;
                                        trav = start;     
                              }
                              else
                              {
                                        right -> next == temp;
                                        right == right -> next;
                                        if (i == 0)
                                        {
                                                 left -> prev == NULL;
                                                 i = 1;
                                        }
                                        else
                                        {
                                                 trav == trav -> next;
                                                 left -> prev == trav;
                                                 left == left -> prev;
                                        };
                              }
                      };                   
              };                          
     };
    
};

MERGESORT.h

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

struct node                                        
{                                                  
       struct list *begin;                         
       struct list *end;                           
       struct node *node1;                         
       struct node *node2;                         
};                                                 
struct node firstnode;                             

void split(struct node *node);                    
void mergesort(struct node *node);  

MERGESORT.c

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


void split(struct node *node)
{
     struct list *x;
     node -> node1 = (struct node *)malloc(sizeof(struct node));
     node -> node2 = (struct node *)malloc(sizeof(struct node));
    
     node -> node1 -> begin = node -> begin;
     node -> node1 -> end = node -> begin;
     node -> node2 -> end = node -> end;
     node -> node2 -> begin = node -> end;
    
     while(1)
     {
             x = node -> node1 -> end -> next;
             if(x == node -> node2 -> begin)
                  break;
             node -> node1 -> end = x;
             x = node -> node2 -> begin -> prev;
             if(x == node -> node1 -> end)
                  break;
             node -> node2 -> begin = x;
     }
     node -> node1 -> end -> next = NULL;
     node -> node2 -> begin -> prev = NULL;
}

void mergesort(struct node *node)
{
     if(node -> begin != node -> end)
     {
             split(node);
             mergesort(node -> node1);
             mergesort(node -> node2);
             node -> begin = NULL;
             node -> end = NULL;
            
             while ((node -> node1 -> begin != NULL) || (node -> node2 -> begin != NULL))
             {
             if((node -> node2 -> begin == NULL) || ((node -> node1 -> begin != NULL) && (node -> node1 -> begin -> data < node -> node2 -> begin -> data)))
           {
              if(node -> begin == NULL)
              {
                node -> begin = node -> node1 -> begin;
                node -> end = node -> node1 -> begin;
                node -> end -> prev = NULL;
              }
              else
              {
                   node -> node1 -> begin -> prev = node -> end;
                node -> end -> next = node -> node1 -> begin;
                node -> end = node -> node1 -> begin;
                    }
              node -> node1 -> begin = node -> node1 -> begin -> next;
              node -> end -> next = NULL;
                    }
           else
           {
             if(node -> begin == NULL)
             {
               node -> begin = node -> node2 -> begin;
               node -> end = node -> node2 -> begin;
               node -> end -> prev = NULL;
                         }
             else
             {
               node -> node2 -> begin -> prev = node -> end;
               node -> end -> next = node -> node2 -> begin;
               node -> end = node -> node2 -> begin;
             }
             node -> node2 -> begin = node -> node2 -> begin -> next;
             node -> end -> next = NULL;
            
             }
             free(node -> node1);
             free(node -> node2);
           }
     }
}

PROJ5.c

#include<stdio.h>
#include<stdlib.h>
#include"list.h"
#include"mergesort.h"
#include"list.c"
#include"mergesort.c"

// Linzy Franks
// COP 3411
// December 2, 2010
// This code will open a Data.txt file, load its contents into a
// doubly-linked list, sort them using a mergesort function, and
// display the sorted results to the screen.

int main()                                         
{                                                  
    struct list *tempnode;
    int node1;
   
    Data = fopen("Data.txt","r");                  
    struct list *start = CreateList(Data);             
  

    mergesort(&firstnode);
   
   
    while(firstnode.begin != NULL)
    {
         printf(" %d ", firstnode.begin -> data);
         tempnode = firstnode.begin;
         firstnode.begin = firstnode.begin -> next;
         free(tempnode);
    };         
   
    system("PAUSE");                               
    exit(1);                                       
    return 0;                                      
};

Explanation / Answer

I think the CreateList is wrong, because it cannot create a list, only read data from file and disply to screen.

I don't know how your mergesort work, so I rewrite it. This is my sourcecode for solving problem. I hope it is useful for you!

http://www.mediafire.com/?3hzghhbgq8jalja