92 lines
2.1 KiB
C
92 lines
2.1 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
typedef struct Student {
|
|
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;
|
|
}
|
|
|
|
// 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 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;
|
|
}
|
|
|
|
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* find_highest(Student *head) {
|
|
if(head == NULL) { return NULL; } // Just exit if the list doesn't exist
|
|
|
|
Student *highest = head;
|
|
Student *temp = head;
|
|
|
|
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
|
|
|
|
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);
|
|
|
|
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;
|
|
}
|