#include #include typedef char ipaddr[18]; typedef struct node { int arrive; int length; int priority; int start; int end; ipaddr ip; struct node *next; } request; int main () { ifstream infile; char filename[30]; request *order = new(request); request *pick; request *lead; request *toAdd; int time = 0; cout << "Request file name: "; cin >> filename; order->start = 0; order->end = 0; order->arrive = 0; order->priority = 10000; order->next = order; infile.open(filename); toAdd = new(request); infile >> toAdd->arrive >> toAdd->priority >> toAdd->ip >> toAdd->length; while (infile) { pick = order; while (pick->next != order) { lead = pick->next; if (toAdd->arrive > lead->start) pick = lead; else { if (toAdd->priority <= lead->priority) pick = lead; else break; } } if (toAdd->arrive < pick->end) toAdd->start = pick->end; else toAdd->start = toAdd->arrive; toAdd->end = toAdd->start + toAdd->length; toAdd->next = pick->next; pick->next = toAdd; pick = toAdd; while (pick->next != order) { lead = pick->next; lead->start = pick->end; lead->end = lead->start + lead->length; pick = lead; } toAdd = new(request); infile >> toAdd->arrive >> toAdd->priority >> toAdd->ip >> toAdd->length; } infile.close(); cout << endl << " IP Address Start End" << endl; pick = order->next; while (pick != order) { if (time < pick->start) cout << "** Idle time **" << setw(8) << time << setw(8) << pick->start << endl; cout << setw(18) << pick->ip << setw(8) << pick->start << setw(8) << pick->end << endl; time = pick->end; pick = pick->next; } cout << endl; return 0; }