using namespace std; typedef struct Process { int processID; int priority; int attitude; struct Process *next; }*ProcessNode;ProcessNode FindPosition(ProcessNode p,int priority) {//插入到返回节点的后面 while(1) { if( p->next == NULL || p->next->priority >= priority)//要注意先后否则会出错 return p; else p = p->next; } }
void Build(ProcessNode &p) {//建立并按照优先数排序 p = (ProcessNode)malloc(sizeof(ProcessNode)); ProcessNode q=p,position = NULL,newNode = NULL; int n=0; cout<<\"请输入要建立进程的数量:\"; cin>>n; for(int i = 0;i < n;i++) { cout<<\"请分别输入进程P\"<next = (ProcessNode)malloc(sizeof(ProcessNode)); cin>>q->next->processID>>q->next->priority>>q->next->attitude; q->next->next = NULL; } else {
newNode = (ProcessNode)malloc(sizeof(ProcessNode)); cin>>newNode->processID>>newNode->priority>>newNode->attitude; position = FindPosition(p,newNode->priority); newNode->next = position->next; position->next = newNode; } }
}
void Display(ProcessNode p) { p = p->next; while(p != NULL) { cout<<\"进程P\"<processID<<\"的进程号,优先数,运行状态为:\"<processID<<\" \"<priority<<\" \"<attitude<next; } }void Display1(ProcessNode p) { int i = 0; p = p->next; cout<<\"*****************************\"<processID; switch(p->attitude) { case 0:cout<<\"正在等待...\"<next; } cout<<\"*****************************\"<void BuildNew(ProcessNode &p) { cout<<\"请分别输入新建进程的进程号,优先数,运行状态:\"; ProcessNode newNode = (ProcessNode)malloc(sizeof(ProcessNode)); cin>>newNode->processID>>newNode->priority>>newNode->attitude; ProcessNode position = FindPosition(p,newNode->priority); newNode->next = position->next; position->next = newNode;cout<<\"新进程创建成功!\"<int FindNum(ProcessNode &p,int num){//找到进程号为num的进程并且修改它的状态为挂起 ProcessNode q = p->next; while(q != NULL) { if(q->processID == num) { switch(q->attitude) { case 0:q->attitude = 4;break; case 1:q->attitude = 3;break; case 2:q->attitude = 3;break; default:break; } cout<<\"进程P\"<processID<<\"成功挂起.\"<next; } return 0; }int FindNum1(ProcessNode &p,int num) {//找到进程号为num的进程并且解挂 ProcessNode q = p->next; while(q != NULL) { if(q->processID == num) { switch(q->attitude) { case 4:q->attitude = 0;break; case 3:q->attitude = 1;break; default:break; } cout<<\"进程P\"<processID<<\"成功解挂.\"<next; }return 0; }
int FindNum2(ProcessNode &p,int num)
{//找到进程号为num的进程并且修改它的优先数按优先数排序 ProcessNode r=p,q = p->next; while(q != NULL) { if(q->processID == num) { r->next = q->next; cout<<\"请输入修改的优先数:\"; cin>>q->priority; ProcessNode position = FindPosition(p,q->priority); q->next = position->next; position->next = q; cout<<\"进程P\"<processID<<\"优先数修改成功.\"<next; } } return 0; }int FindNum3(ProcessNode &p,int num) {//找到进程号为num的进程并且满足请求 ProcessNode q = p->next; while(q != NULL) { if(q->processID == num) { q->attitude = 1; cout<<\"进程P\"<processID<<\"请求成功满足.\"<next; } return 0; }int FindNum4(ProcessNode &p,int num) {//找到进程号为num的进程并且满足请求
ProcessNode q = p->next; while(q != NULL) { if(q->processID == num) { q->attitude = 5; cout<<\"进程P\"<processID<<\"被杀死.\"<next; } return 0; }void HungUp(ProcessNode &p) { int num; do { cout<<\"请输入要挂起的进程号:\"; cin>>num; }while(FindNum(p,num) != 1); Display1(p); }
void FreeHungUp(ProcessNode &p) { int num; do { cout<<\"请输入要解挂的进程号:\"; cin>>num; }while(FindNum1(p,num) != 1); Display1(p); }
void Amend(ProcessNode &p) { int num; do { cout<<\"请输入要修改的进程号:\"; cin>>num; }while(FindNum2(p,num) != 1);
Display1(p); }
void SatisfyWait(ProcessNode &p) { int num; do { cout<<\"请输入要满足的进程号:\"; cin>>num; }while(FindNum3(p,num) != 1); Display1(p); }
void ScanRun(ProcessNode &p) { ProcessNode q = p->next; while(q != NULL) { if(q->attitude == 2) { q->attitude = 6; } else q = q->next; } }
void ScanReady(ProcessNode &p) { ProcessNode q = p->next; while(q != NULL) { if(q->attitude == 1) { q->attitude = 2; } else q = q->next; } cout<<\"就绪队列为空,请满足等待进程.\"<void OrderingRun(ProcessNode &p) { ScanRun(p); ScanReady(p);Display1(p); }
void KillProcess(ProcessNode &p) { int num; do { cout<<\"请输入要杀死的进程号:\"; cin>>num; }while(FindNum4(p,num) != 1); Display1(p); }
int main() { int i = 0; ProcessNode p; cout<<\"进程状态:0:等待;1:就绪;2:执行.\"<>i; cout<<\"*****************************\"<