Server IP : 172.16.15.8 / Your IP : 18.189.143.1 Web Server : Apache System : Linux zeus.vwu.edu 4.18.0-553.27.1.el8_10.x86_64 #1 SMP Wed Nov 6 14:29:02 UTC 2024 x86_64 User : apache ( 48) PHP Version : 7.2.24 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON Directory (0705) : /home/grpatillo/ |
[ Home ] | [ C0mmand ] | [ Upload File ] |
---|
//Author: R.P. Patillo // File: gradelnklist.cpp. Contents: C++ source code for dynamic memory // allocation implementation of a list of grades. Each node in the list // contains a grade and the occurrence count for that grade. // The grades are stored in ascending order. // #include "gradelnklist.h" #include <iostream> #include <iomanip> using namespace std; // ---------- general list members first ---------- // -------------------------------------------------------------------- // GradeList constructor - initializes a list to empty // -------------------------------------------------------------------- // Accepts: nothing // Returns: nothing // -------------------------------------------------------------------- GradeList::GradeList() { head = NULL; } // -------------------------------------------------------------------- // GradeList destructor - deletes all nodes in list // -------------------------------------------------------------------- // Accepts: nothing // Returns: nothing // -------------------------------------------------------------------- GradeList::~GradeList() { NodeType* tmp; // temp ptr for deleting nodes while (head != NULL) // destroy nodes one by one { tmp = head; head = head->next; delete tmp; } } // -------------------------------------------------------------------- // IsEmpty - test for empty list // -------------------------------------------------------------------- // Accepts: nothing // Returns: true if the list is empty, false otherwise. // -------------------------------------------------------------------- bool GradeList::IsEmpty(void) { return (head == NULL); } // -------------------------------------------------------------------- // IsFull - test for full list // -------------------------------------------------------------------- // Accepts: nothing // Returns: false always, because, within the bounds of memory size, // the list never fills! // -------------------------------------------------------------------- bool GradeList::IsFull() { return false; } // ------------------------------------------------------------------- // Display - prints the grades in the list, one grade per line // ------------------------------------------------------------------- // Accepts: nothing // Returns: nothing // ------------------------------------------------------------------- void GradeList::Display() { NodeType* tmp = head; // temp ptr for traversing list if (IsEmpty()) cout << "\nThere are no grades\n\n"; else { cout << "\nGrades Num of Each \n\n"; while (tmp != NULL) { cout << setw(4) << tmp->grade << setw(14) << tmp->count << "\n"; tmp = tmp->next; } } } // ------------------------------------------------------------------- // Function to insert a new grade into the list in ascending order // ------------------------------------------------------------------- // Accepts: the new grade // Returns: nothing // ------------------------------------------------------------------- void GradeList::InsertGrade(int newgrade) { NodeType* curr = head; // temp ptr for traversing list NodeType* prev = NULL; // temp ptr for traversing list NodeType* tmp; // temp ptr to create new node while (curr != NULL && curr->grade < newgrade) // find place to insert { prev = curr; curr = curr->next; } if (curr != NULL && curr->grade == newgrade) // grade already here ... curr->count++; // ... simply inc. count else if (prev == NULL) // empty list or insert at beginning { tmp = new NodeType; tmp->grade = newgrade; tmp->count = 1; tmp->next = head; head = tmp; } else // insert in middle or at end { tmp = new NodeType; tmp->grade = newgrade; tmp->count = 1; tmp->next = curr; prev->next = tmp; } } // ------------------------------------------------------------------- // Function to delete the indicated grade from the list // ------------------------------------------------------------------- // Accepts: grade to delete // Returns: nothing // ------------------------------------------------------------------- void GradeList::DeleteGrade(int delgrade) { NodeType* curr = head; NodeType* prev = NULL; NodeType* tmp; while (curr != NULL && curr->grade < delgrade) //Locates desired grade for deletion. { prev = curr; curr = curr->next; } if (curr != NULL && curr->grade == delgrade) //Lowers grade count or deletes desired grade depending on location in { // linked list. curr->count--; if (curr->count == 0) { if(prev == NULL) { head = curr->next; delete curr; } else { tmp = curr->next; prev->next = tmp; delete curr; } } } } // ------------------------------------------------------------------- // Function to calculate the average of the grades in the list // ------------------------------------------------------------------- // Accepts: nothing // Returns: the average (0 if list is empty) // ------------------------------------------------------------------- float GradeList::CalculateAvg() { NodeType* curr = head; NodeType* prev = NULL; float totalsum = 0.0; int totalcount = 0; while (curr != NULL) // The while loop continues to calculate total sum and total count { // until curr equals NULL. totalsum+= (curr->grade * curr->count); totalcount+= curr->count; prev = curr; curr = curr->next; } if (totalcount!=0) return totalsum/totalcount; else return 0; } // ------------------------------------------------------------------- // DropLowestGrade - drops the lowest grade in the list, does nothing // if list is empty // ------------------------------------------------------------------- // Accepts: nothing // Returns: nothing // ------------------------------------------------------------------- void GradeList::DropLowestGrade() { NodeType* tmp = head; if(head!=NULL) // if head doesn't point to NULL then drops grade count by 1 or deletes it { if (tmp->count != 1) tmp->count--; else { head = tmp->next; delete tmp; } } } // ------------------------------------------------------------------- // HowManyofGrade - returns how many times this grade is in the list // ------------------------------------------------------------------- // Accepts: the grade to look for // Returns: the number of times the grade is in the list // ------------------------------------------------------------------- int GradeList::HowManyofGrade (int grade) { NodeType* curr = head; NodeType* prev = NULL; if (head == NULL) // returns zero if head point to NULL return 0; while (curr!=NULL && curr->grade < grade) // locates grade if present { prev = curr; curr = curr->next; } if (grade == curr->grade) // returns curr grade if equal to grade return curr->count; else return 0; // returns zero if grade is not present }