Hi everybody,
I am currently working on an assignment on linked lists. I am stuck with parts of the project, and I would be very pleased if anyone could help me.
I am supposed to create a linked list of patient records. Each record is identified by a patient ID and contains patient name, age, and also blood glucose level. All of this is given via input from the user.
I have one main problem:
In this assignment, there should be functions for finding the highest and lowest age of the patients entered.
I can find the max and min ages - this works - BUT after having done that, the patient record for that particular patient need to be displayed, and this is where I get problems! How can I use the value of the new "max" to lookup the patient that has the maximum age? I have tried different ways of assigning max to temp->age and then trying to find ID - it does not give me any errors at compilation but it breaks down when I run the program.
NB I have omitted some of the functions in the code.
#include <iostream>
using namespace std;
#include <string>
// ------------- STRUCTURE -----------------------------
struct Patient_record // the basic building block of a linked list
{
int ID;
string name;
int age;
int glucose;
struct Patient_record* next;
};
typedef struct Patient_record* recordptr;
// define the type of the pointer to a node
// ---------- CLASS DEFINITION -----------------------------
class List
{
private:
recordptr head; // the head pointer of the linked list
public:
List();
~List();
bool IsListEmpty();
int Length();
bool ListInsert(int ID);
bool ListDelete(int ID);
recordptr ListRetrieve(int ID);
void PrintList();
void ListAvg();
void ListMax();
void ListMin();
};
// ---------- CONSTRUCTOR ----------------------------
List::List():head(NULL)
{
}
bool List::IsListEmpty()
{
return(head == NULL);
}
// ---------- DESTRUCTOR ----------------------------
List::~List()
{
recordptr temp = head;
while (temp!=NULL)
{
head = temp->next;
temp->next = NULL;
delete temp;
temp = head;
}
head = NULL;
}
// ---------- FUNCTION Length ----------------------------
int List::Length()
{
recordptr temp = head;
int counter=0;
while (temp!=NULL)
{
counter++;
temp=temp->next;
}
return (counter);
}
// ---------- FUNCTION ListInsert for adding patients ----------------
bool List::ListInsert(int patientID)
{ // start function
recordptr temp = new (struct Patient_record);
if (temp==NULL)
{
cout << "Not enough memory!" << endl;
return(0);
}
else
{
temp->ID=patientID;
temp->next=head;
head=temp;
cout<<"Enter name of patient: ";
cin>>temp->name;
cout<<"Enter age: ";
cin>>temp->age;
cout<<"Enter fasting blood glucose: ";
cin>>temp->glucose;
cout <<"\n\n";
return (1);
}
}
// ---------- FUNCTION PrintList --------------------------
void List::PrintList()
{
recordptr temp = head;
cout << "\n\n*******************" << endl;
cout << " List of patients:" << endl;
cout << "*******************" << endl;
while (temp!=NULL)
{
cout << "Patient ID: " << temp->ID << endl;
cout << "Name : " << temp->name << endl;
cout << "Age : " << temp->age << endl;
cout << "Glucose : " << temp->glucose << "\n\n";
temp=temp->next;
}
}
// ---------- FUNCTION ListMax -------------------------
void List::ListMax()
{
recordptr temp = head;
int max=0;
if(temp!=NULL)
max = temp->age;
temp = temp->next;
while (temp!=NULL)
{
max = (max > temp->age)?max:temp->age;
temp = temp->next;
}
cout << "Highest age: " << max << "\n";
// while (temp->age==max) I have tried adding this but it only
// gives me errors when I run the program
// cout << "The age is : " << temp->age;
}
and in main:
int main()
{
List l;
for(int i=0; i<3; i++)
l.ListInsert(i);
l.PrintList();
l.ListMax(); // invoke to check for minimum value for first print of list
return 0;
}
Thanks for your help,
Gro