📄 c++.txt
字号:
#include<iostream>
#include<malloc.h>
using namespace std;
//----------结点---------
typedef struct LNode
{
char pName[20]; //进程名
int fNum; //优先数
int ndTime; //需要时间
int ruTime; //运行时间
char ruState; //运行状态
struct LNode*next;//指针域
}LNode,*LinkList;
int n;//定义进程数
int sum;
//--------------进程的排序---------------
int Inset(LinkList &L,int n)
{
LinkList first,p,back,q;
int k=1; // 计数计
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL; //将指针域赋值为空
p=(LinkList)malloc(sizeof(LNode)); //开辟第一个结点空间
p->next=NULL; //将指针域赋值为空
first=L;
//插入第一个结点
cout<<"输入进程号No."<<k<<"进程名:";
cin>>p->pName;
cout<<endl;
cout<<"输入该进程优先数:";
cin>>p->fNum;
cout<<endl;
cout<<"输入该进程需要运行的时间:";
cin>>p->ndTime;
cout<<endl;
p->ruTime=0;
L->next=p;
back=p;
sum=sum+p->ndTime;
//优先数从大到小插入结点
for(int i=0;i<n-1;i++)
{
k++;
if(!(q=(LinkList)malloc(sizeof(LNode))))
return -1;
cout<<"输入进程号No."<<k<<"进程名:";
cin>>q->pName;
cout<<endl;
cout<<"输入该进程优先数:";
cin>>q->fNum;
cout<<endl;
cout<<"输入该进程需要运行的时间:";
cin>>q->ndTime;
cout<<endl;
sum=sum+q->ndTime;
q->ruTime=0;
//新插入的结点与已经排好序的结点的优先数进行比较
for(int j=0;j<k-1;j++)
{
if(q->fNum>=back->fNum)
{
q->next=first->next;
first->next=q;
}
else
{
if(back->next==NULL) //如果先前只有一个结点,而要插入的结点又比该结点小时直接将新结点插入该结点后面
back->next=q;
else
{
first=back;
back=back->next;
}
}
}
first=L;
back=L->next;
}
return 0;
}
//----------进程的输出------------------------
int Run(LinkList &L,int n)
{
LinkList p,q;
char t[20]; //中间变量
int t1,t2,t3; //中间变量
p=L->next;
q=p;
int continue1;
//将进程按要求输出
for(int i=1;i<=sum;i++)
{ cout<<"--------------------------------"<<endl;
p->ruTime=p->ruTime+1;
p->ruState='R';
cout<<"正在运行的进程是:"<<endl;
cout<<"进程名 优先数 需要运行时间 已经运行时间 运行状态"<<endl;
cout<<p->pName<<" "<<p->fNum<<" "<<p->ndTime<<" "<<p->ruTime<<" "<<p->ruState<<endl;
cout<<endl;
cout<<"正在等待的进程是:"<<endl;
for(int j=1;j<n;j++)
{
q=q->next;
q->ruState='W';
cout<<"进程名 优先数 需要运行时间 已经运行时间 运行状态"<<endl;
cout<<q->pName<<" "<<q->fNum<<" "<<q->ndTime<<" "<<q->ruTime<<" "<<q->ruState<<endl;
}
//当结点数大于一时
if(p->next!=NULL)
{
q=p->next;
if(p->ruTime!=p->ndTime)
{
p->fNum--;
if(p->fNum<q->fNum) //按优先数大的优先原则
{
strcpy(t,p->pName);
strcpy(p->pName,q->pName);
strcpy(q->pName,t);
t1=p->fNum;
p->fNum=q->fNum;
q->fNum=t1;
t2=p->ndTime;
p->ndTime=q->ndTime;
q->ndTime=t2;
t3=p->ruTime;
p->ruTime=q->ruTime;
q->ruTime=t3;
}
q=p;
}
else
{
cout<<p->pName<<"进程已经完成!"<<endl;
p=q;
L->next=q;
n=n-1;
}
}
//当只有一个结点时
else
{
if(p->ruTime!=p->ndTime)
{p->fNum--;}
else
{ cout<<p->pName<<"进程已经完成!";
L=NULL;
n=n-1;
cout<<endl;
return 0;
}
}
cout<<endl;
cout<<"输入1继续,输入其他数字结束,请选择:";
cin>>continue1;
if(continue1!=1)
return 0;
}
return 0;
}
void main()
{
cout<<" ******************************** " <<endl;
cout<<" 欢迎使用 " <<endl;
cout<<" ******************************** " <<endl;
cout<<" 名称:进程的调度 " <<endl;
cout<<" ******************************** " <<endl;
LinkList L;
cout<<"请输入进程数:";
cin>>n;
Inset(L,n); //调用进程排序函数
Run(L,n); //调用进程输出函数
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -