diff --git a/Q1.c b/Q1.c index dd8373a..f698cfa 100644 --- a/Q1.c +++ b/Q1.c @@ -3,83 +3,89 @@ #include typedef struct Student { - int id; - char name[30]; - double grades; - struct Student *next; + int id; + char name[30]; + double grades; + struct Student *next; } Student; // Create a student node Student *create_student(int id, char *name, double grades) { - Student *student = (Student*)malloc(sizeof(Student)); - student->id = id; - strcpy(student->name, name); - student->grades = grades; - student->next = NULL; - return student; + Student *student = (Student*)malloc(sizeof(Student)); + student->id = id; + strcpy(student->name, name); + student->grades = grades; + student->next = NULL; + return student; } // Insert student at end of the list Student* insert_student(Student *head, int id, char *name, double grades) { - Student *new_student = create_student(id, name, grades); - if(new_student == NULL) { - printf("Creation of Student failed\n"); - return new_student; - } + Student *new_student = create_student(id, name, grades); + // If the list is empty, the new student we are inserting becomes the start + if(head == NULL) { + return new_student; + } - // If the list is empty, the new student we are inserting becomes the start - if(head == NULL) { - return new_student; - } + Student *temp = head; + while(temp->next != NULL) { + temp = temp->next; + } - Student *temp = head; - while(temp->next != NULL) { - temp = temp->next; - } - - temp->next = new_student; - return head; + temp->next = new_student; + return head; } void print_students(Student *head) { - Student *temp = head; - while(temp != NULL) { - printf("Student ID: %d\n", temp->id); - printf("Student Name: %s\n", temp->name); - printf("Student Grades: %0.02f\n\n", temp->grades); - temp = temp->next; - } + Student *temp = head; + while(temp != NULL) { + printf("Student ID: %d\n", temp->id); + printf("Student Name: %s\n", temp->name); + printf("Student Grades: %0.02f\n\n", temp->grades); + temp = temp->next; + } } Student* find_highest(Student *head) { - if(head == NULL) { return NULL; } // Just exit if the list doesnt exist + if(head == NULL) { return NULL; } // Just exit if the list doesn't exist - Student *highest = head; - Student *temp = head; + Student *highest = head; + Student *temp = head; - while(temp != NULL) { - if(temp->grades > highest->grades) { - highest = temp; - } - temp = temp->next; - } - return highest; + while(temp != NULL) { + if(temp->grades > highest->grades) { + highest = temp; + } + temp = temp->next; + } + return highest; +} + +// To end the memory leaks +void free_student(Student *head) { + Student *temp; + while(head != NULL) { + temp = head; + head = head->next; + free(temp); + } } int main() { - Student *head = NULL; // Initialize the start of the linked list + Student *head = NULL; // Initialize the start of the linked list - head = insert_student(head, 1234, "John Doe", 88.5); - head = insert_student(head, 1357, "Robert W.", 91); - head = insert_student(head, 2468, "Jammie R.", 33); + head = insert_student(head, 1234, "John Doe", 88.5); + head = insert_student(head, 1357, "Robert W.", 91); + head = insert_student(head, 2468, "Jammie R.", 33); - print_students(head); + print_students(head); - Student *highest_student = find_highest(head); - printf("The highest student is %s, with a grade of: %0.02f", highest_student->name, highest_student->grades); + Student *highest_student = find_highest(head); + printf("The highest student is %s, with a grade of: %0.02f", highest_student->name, highest_student->grades); + free_student(head); - return 0; + return 0; }