緩交作業--jobmanager

JobManager.cpp

#include<iostream>
#include"JobManager.h"
using namespace std;
JobManager* JobManager:: instance = NULL;
JobManager* JobManager:: getInstance() {
    if (!instance)
        instance = new JobManager;
    return instance;
}

bool JobManager:: deleteInstance() {
  if (instance) {
        delete instance;
        instance = NULL;
        return 1;
  }
  return 0;
}

void JobManager::addJob(int priority) {
  Job *n_job = new Job(priority);
  Job *find;
  if (!jobFrontPointer)
      jobFrontPointer = n_job;
  else { 
      find = jobFrontPointer;
      while(find->getNext()) 
          find = find->getNext();
      find->setNext(n_job);
  }
}

void JobManager::finishOneJob() {
  Job* d_job = jobFrontPointer;
  if (d_job) {
    jobFrontPointer = jobFrontPointer->getNext();
    delete d_job;
  }                                                                                                                                                                                                                 
}
void JobManager::sortJob() {
    Job* f_job = jobFrontPointer;//f_job表示外層, s_job表示內層,p_f表示f_job前一節點, p_s表示s_job前一節點
    Job* s_job = f_job->getNext();
    Job* p_f;
    Job* p_s;
    Job* temp;
    while (f_job) {
        s_job = f_job->getNext();
        p_s = f_job;  //此處一定要重新標記p_s, 否則p_s仍然留在末尾
        while (s_job) {
            if (f_job->getPriority() < s_job->getPriority() || f_job->getPriority() == s_job->getPriority() && f_job->getId() > s_job->getId()) {
                if (p_s == f_job) {
                    f_job->setNext(s_job->getNext());
                    s_job->setNext(f_job);
                    if (f_job == jobFrontPointer)
                        jobFrontPointer = s_job;
                    else
                        p_f->setNext(s_job);
                }
                else {
                    Job* n_f = f_job->getNext();
                    Job* n_s = s_job->getNext();
                    f_job->setNext(n_s);
                    s_job->setNext(n_f);
                    p_s->setNext(f_job);
                    if (f_job == jobFrontPointer)
                        jobFrontPointer = s_job;
                    else
                        p_f->setNext(s_job);
                }
                temp = f_job;
                f_job = s_job;
                s_job = temp;
            }
            p_s = s_job;
            s_job = s_job->getNext();
        }
        p_f = f_job;    
        f_job = f_job->getNext();
    }
}
void JobManager::printJob() {
    Job* f_job = jobFrontPointer;
    while (f_job) {
        cout << f_job->toString();
        if (f_job->getNext())
            cout << "->";
        else
            cout << endl;
        f_job = f_job->getNext();
    }
}
int JobManager::getNumOfJob() {
    int num = 0;
    Job* f_job = jobFrontPointer;
    while (f_job) {
        ++num;
        f_job = f_job->getNext();
    }
    return num;
}

void JobManager::clear() {
    Job* d_job;
    while (jobFrontPointer) {
        d_job = jobFrontPointer;
        jobFrontPointer = jobFrontPointer->getNext();
        delete d_job;
    }
    d_job = NULL;
    cout << "empty!\n";
}

JobManager::JobManager() {
    jobFrontPointer = NULL;
}

JobManager::~JobManager() {
    clear();
}

Job.cpp

#include<iostream>                                                                                                                                                                                                  
#include"Job.h"
#include<sstream>
int Job::number = 0;
Job::Job(int priority) {
  id = number;
  this->priority = priority;
  nextJob = NULL;
  ++number;
}

void Job::setId(int id) {
  this->id = id;
}

int Job::getId() const {
  return id;
}

void Job::setPriority(int priority) {
  this->priority = priority;
}

int Job::getPriority() const {
  return priority;
}

void Job::setNext(Job *job) {
  nextJob = job;
}

Job* Job::getNext() const {
  return nextJob;
}

string Job::toString() {
  stringstream s1;
  stringstream s2;
  s1 << id;
  string s_id = s1.str();
  s2 << priority;
  string s_priority = s2.str();
  string result = "[" + s_id + ":" + s_priority + "]";
  return result;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值