⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c++.txt

📁 这是操作系统实验时所编写的一个模拟进程调度用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 + -