C++. Given the following class declaration: struct Student { char * name; float
ID: 3697963 • Letter: C
Question
C++. Given the following class declaration:
struct Student
{
char * name;
float gpa;
};
class StudentList
{
public:
bool remove(const char name[], Student& aStudent);
void findHighestGpa(Student& aStudent) const;
bool get(int index, Student& aStudent) const;
…
private:
struct Node
{
Student data;
Node * next;
};
Node * head;
int size;
};
Implement the function:
void StudentList::findHighestGpa(Student& aStudent) const; - function passes back the student with highest gpa through “aStudent.” You may assume each student has unique gpa.
Explanation / Answer
/
bool StudentList::remove(const char name[], Student& aStudent)
{
Node * curr; // Points to the node to be deleted
Node * trailCurr; // Points to the node just before the node pointed to by curr
bool found;
curr = head;
trailCurr = NULL;
found = false;
while (curr != NULL && !found)
{
// If found a match
if (strcmp(name, curr->data.name) == 0)
{
found = true;
// Pass student to be removed back through aStudent
aStudent.name = curr->data.name;
aStudent.gpa = curr->data.gpa;
// If item to be deleted is the head
if (head == curr)
{
head = head->next;
delete curr;
}
// If item is somewhere else in the list
else
{
trailCurr->next = curr->next;
delete curr;
}
size--;
}
// Keep searching if not found
else
{
trailCurr = curr;
curr = curr->next;
}
}
// Return false if student not found
if (!curr)
return false;
else
return true;
}
void StudentList::findHighestGpa(Student& aStudent) const
{
Node * curr;
float highestGPA = 0;
for (curr = head; curr != NULL; curr = curr->next)
{
if (highestGPA < curr->data.gpa)
{
// Assign if current gpa is higher than highest GPA value
highestGPA = curr->data.gpa;
// Pass student with highest GPA back through aStudent
aStudent.name = curr->data.name;
aStudent.gpa = curr->data.gpa;
}
else
{
continue;
}
}
}
bool StudentList::get(int index, Student& aStudent) const
{
if (index < 0 || index >= size)
return false;
// Traverse to the position
Node * curr = head;
for (int i = 0; i < index; i++)
{
curr = curr->next;
}
// Pass student at index back through aStudent
aStudent.name = curr->data.name;
aStudent.gpa = curr->data.gpa;
return true;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.