Created
January 29, 2015 03:58
-
-
Save anonymous/c57b7a8d66948c73af57 to your computer and use it in GitHub Desktop.
DLList - Remove Bug
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
typedef struct DLNode Node; | |
typedef struct DLNode | |
{ | |
int ID; | |
char *Fname; | |
char *Lname; | |
char *Dept; | |
float GPA; | |
Node * prev; | |
Node * next; | |
} Node; | |
typedef struct DLList | |
{ | |
Node * first; | |
Node * last; | |
} List; | |
void DLList_init(List * list) | |
{ | |
list->first = NULL; | |
list->last = NULL; | |
} | |
void DLList_add_node(List * list, int ID, char *Fname, char *Lname, char *Dept, float GPA) | |
{ | |
Node * newNode; | |
newNode = (Node *)malloc(sizeof(Node)); | |
if(!newNode) | |
{ | |
printf("Malloc failed, new node not created."); | |
exit(EXIT_FAILURE); | |
} | |
newNode->ID = ID; | |
newNode->Fname = Fname; | |
newNode->Lname = Lname; | |
newNode->Dept = Dept; | |
newNode->GPA = GPA; | |
if(list->last) | |
{ | |
list->last->next = newNode; | |
newNode->prev = list->last; | |
list->last = newNode; | |
} else { | |
list->first = newNode; | |
list->last = newNode; | |
} | |
} | |
void DLList_print(List * list, FILE *fout) //*fout HERE!!! | |
{ | |
Node * node; | |
for(node = list->first; node != NULL; node = node->next) | |
{ | |
fprintf(fout, "%d,%s,%s,%s,%f\n", node->ID, node->Fname, node->Lname, node->Dept, node->GPA); | |
} | |
} | |
void DLList_free(List * list) | |
{ | |
Node * node; | |
Node * holder; | |
for(node = list->first; node != NULL; node = node->next) | |
{ | |
holder = node->next; | |
free(node->Dept); | |
free(node->Lname); | |
free(node->Fname); | |
free(node); | |
node = holder; | |
} | |
} | |
Node * remove_node(List * list, Node * node){ | |
Node * temp3; | |
temp3 = node; | |
node->next->prev = node->prev; | |
node->prev->next = node->next; | |
return temp3; | |
} | |
void Insertion_sort(List * list) | |
{ | |
Node * index; | |
Node * node; | |
Node * temp; | |
Node * temp2; | |
for(index = list->first; index != NULL && index->next != NULL; index = index->next) | |
{ | |
if(index->ID > index->next->ID && &index->next->ID != NULL) | |
{ | |
node = remove_node(list, index->next); | |
temp = index; | |
while(temp->ID > node->ID) | |
{ | |
if(temp != list->first) | |
{ | |
temp = temp->prev; | |
} else { | |
break; | |
} | |
} | |
if(temp->ID < node->ID) | |
{ | |
temp2 = temp->next; | |
node->prev = temp; | |
node->next = temp2; | |
temp->next = node; | |
temp2->prev = node; | |
} else { | |
node->next = temp; | |
list->first = node; | |
temp->prev = node; | |
} | |
index = index->prev; | |
} | |
if(index == list->last) | |
break; | |
} | |
} | |
int main(int argc, char *argv[]) | |
{ | |
FILE *fin, *fout; | |
int ID; | |
char *Fname; | |
char *Lname; | |
char *Dept; | |
float GPA; | |
char *fin_path; | |
char *fout_path; | |
/*Setting up list*/ | |
List list; | |
DLList_init(& list); | |
/*Input & Output Files | |
if(argv[1] && argv[2]) | |
{ | |
fin_path = argv[1]; | |
fout_path = argv[2]; | |
} else { | |
printf("Input and output file names were not supplied!\n"); | |
return 1; | |
}*/ | |
/*Read file operations */ | |
fin = fopen("in.txt", "r"); | |
if(fin == NULL) | |
{ | |
printf("Can't open input file!\n"); | |
return 1; | |
} | |
while (fscanf(fin, "%d %ms %ms %ms %f", &ID, &Fname, &Lname, &Dept, &GPA) == 5) | |
{ | |
DLList_add_node(& list, ID, Fname, Lname, Dept, GPA); | |
} | |
fclose(fin); //closing read file | |
/*Insertion sort of list*/ | |
Insertion_sort(& list); | |
/* Write File Operations*/ | |
fout = fopen("out.txt", "w"); | |
if(fout == NULL) | |
{ | |
printf("Can't open output file!"); | |
return 1; | |
} | |
DLList_print(& list, fout); //printing list to output file | |
fclose(fout); //closing output file | |
DLList_free(& list); //freeing memory | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment