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

📄 asd.cpp

📁 以上一共五个在VC环境下编写的程序
💻 CPP
字号:
#include<iostream>
using namespace std;

typedef struct QNode{  //队列的定义
	char data;
	struct QNode *next;
}*QueuePtr;
typedef struct{
	QueuePtr front;
	QueuePtr rear;
}LinkQueue;

 LinkQueue ready;  //实例化队列
 QueuePtr p,q,t,l;
 LinkQueue block;
 char r=NULL; //以一个字符r表示处于运行态的进程,并且开始时此进程为空


void InitQueue(LinkQueue &Q,char c) //建立一个不带头节点的队列
{
	Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
	if(!Q.front)exit(0);
	Q.front->data=c;
	Q.front->next=NULL;
}

void EnQueue(LinkQueue &Q,char c) //节点值插入队列
{
	QueuePtr p;
	p=(QueuePtr)malloc(sizeof(QNode));
	if(!p) exit(0);
	p->data=c;p->next=NULL;
	Q.rear->next=p;
	Q.rear=p;
}

//-----------------------------------------------------------------
int OUTPUT(LinkQueue &Q)  //队列元素输出
{   q=Q.front; //指针保护
   if(Q.front->data==NULL)
   {cout<<"-----当前队列中已没有进程!-----"<<endl;}
   else {
	   while(Q.front!=Q.rear->next) 
	   {cout<<Q.front->data<<" ";
        Q.front=Q.front->next;
	   }
	     Q.front=q;  //恢复指针
         cout<<endl;
   }
	if(r==NULL){
		cout<<"-----当前运行态中没有进程!-----"<<endl;
        cout<<"----------------------------------------------"<<endl;
		return 0;}
	else{
	     cout<<"当前运行态中进程为:"<<r<<endl;   
         cout<<"----------------------------------------------"<<endl;}
}

//----------------------------------------------------------------------
int runover(char &r)  //执行运行态中的进程
{if(r!=NULL){
	cout<<"-----运行态中当前进程“"<<r<<"”执行完毕!-----"<<endl;
	cout<<"----------------------------------------------"<<endl;
	r=NULL;}
else {cout<<"-----运行态中没有进程!-----"<<endl;
      cout<<"----------------------------------------------"<<endl;
      return 0;}
}

//-----------------------------------------------------------------
void RDY_RUN(LinkQueue &Q)  //就绪=>运行
{cout<<"-----进程状态转换为::就绪=>运行-----"<<endl;
	 r=Q.front->data; //进程进入执行态
	 p=Q.front->next;
	 q=Q.front;
	 while(p!=NULL){  //就绪队列元素前移一个位置
		 q->data=p->data;
		 Q.rear=q;
		 p=p->next;
		 q=q->next;
	 }
	 Q.rear->next->data=NULL;
     cout<<"当前就绪队列中进程为:";
	 OUTPUT(Q); //将新就绪队列元素输出
}

//---------------------------------------------------------------------
void RUN_RDY(LinkQueue &Q)  //运行=>就绪
{cout<<"-----进程状态转换为::运行=>就绪-----"<<endl;  
	p=Q.front;
   while(p->data!=NULL)  
	  { p=p->next;}
	p->data=r;  //运行态中进程进入就绪队列尾部
	Q.rear=Q.rear->next;
	r=Q.front->data;  //就绪队列头进程进入运行态
if( Q.front!=Q.rear){
	 p=Q.front->next;
	 q=Q.front;
	 while(p!=NULL){  //就绪队列元素前移一个位置
		 q->data=p->data;
		 Q.rear=q;
		 p=p->next;
		 q=q->next;
	 }
	 Q.rear->next->data=NULL;
     cout<<"当前就绪队列中进程为:";
	 OUTPUT(Q); //将新就绪队列元素输出
   }
}

//-----------------------------------------------------------------------
int BLK_RDY(LinkQueue &B,LinkQueue &R)  //等待=>就绪
{cout<<"-----进程状态转换为::等待=>就绪-----"<<endl;
 l=B.front;
 if(B.front->data==NULL){
	 cout<<"等待队列中没有进程,无法完成操作!"<<endl;
     cout<<"----------------------------------------------"<<endl;
	 return 0;
 }

 t=R.front;
 while(t->data!=NULL){
	 t=t->next;
     if(t==NULL){
	      cout<<"就绪队列为满,不能完成转换!"<<endl;
          cout<<"----------------------------------------------"<<endl;
	      return 0;
	 }
 }
     t->data=l->data;  //插入就绪队列尾部
     R.rear=t;
     cout<<"当前就绪队列中进程为:";
     OUTPUT(R); //将新就绪队列元素输出

	 p=B.front->next;
	 q=B.front;
	 while(p!=NULL){  //等待队列元素前移一个位置
		 q->data=p->data;
		 B.rear=q;
		 p=p->next;
		 q=q->next;
	 }
	 B.rear->next->data=NULL;
     cout<<"当前等待队列中进程为:";
	 OUTPUT(B); //将新等待队列元素输出
 }

//-----------------------------------------------------------------------
int RUN_BLK(LinkQueue &B,LinkQueue &R) //运行=>等待
{cout<<"-----进程状态转换为::运行=>等待-----"<<endl;
 l=B.front;
 while(l->data!=NULL){
	 l=l->next;
     if(l==NULL){
	      cout<<"等待队列为满,不能完成转换!"<<endl;
	      return 0;
	 }
 }
      l->data=r;
      B.rear=l;
      r=NULL;
      cout<<"当前等待队列中进程为:";
      OUTPUT(B); //将新等待队列元素输出

 t=R.front;
 if(t->data==NULL){
	 cout<<"当前就绪队列为空,无法完成操作!"<<endl;
     cout<<"----------------------------------------------"<<endl;
	 return 0;
 }
 else {r=R.front->data;
	   p=R.front->next;
	   q=R.front;
	   while(p!=NULL){  //就绪队列元素前移一个位置
		   q->data=p->data;
		   R.rear=q;
		   p=p->next;
		   q=q->next;
	   }
	 R.rear->next->data=NULL;
     cout<<"当前就绪队列中进程为:";
	 OUTPUT(R);
 }
}

//-----------------------------------------------------------------------
void initiate()  //队列初始化
{int i,n;
 char data;
 cout<<"请输入就绪队列元素个数:";
 cin>>n;
 cout<<"请输入该队列元素内容:";
 cin>>data;
 InitQueue(ready,data);  //队列不存在空的头节点
 for(i=2;i<=n;i++)
 {cin>>data;
  EnQueue(ready,data);
 }
 cout<<"就绪队列中进程输出为:";
 OUTPUT(ready);  //调用子函数输出队列元素

 cout<<"请输入等待队列元素个数:";
 cin>>n;
 cout<<"请输入该队列元素内容:";
 cin>>data;
 InitQueue(block,data);  //队列不存在空的头节点
 for(i=2;i<=n;i++)
 {cin>>data;
  EnQueue(block,data);
 }
 cout<<"等待队列中进程输出为:";
 OUTPUT(block); //调用子函数输出队列元素
}

//==================================================================
void main()
{char w;
 cout<<endl;
 cout<<"                       ********************"<<endl;
 cout<<"                       *进程状态转换控制台*"<<endl;
 cout<<"                       ********************"<<endl;
 cout<<"                                   ======计0306,20032969,曾庚卓"<<endl;
 cout<<"    ***********************************************************"<<endl;
 cout<<"     1===>>队列初始化  2===>>执行运行态进程   3===>>就绪=>运行"<<endl;
 cout<<"     4===>>运行=>就绪  5===>>等待=>就绪       6===>>运行=>等待  "<<endl;
 cout<<"    ***********************************************************"<<endl;
 cout<<"Press enter to continue,if you want to exit please press Q"<<endl;
 getchar();
do
{
	cout<<"请按键选择:";
 cin>>w;
 switch(w)
 {case '1':initiate();break;
  case '2':runover(r);break;
  case '3':RDY_RUN(ready);break;
  case '4':RUN_RDY(ready);break;
  case '5':BLK_RDY(block,ready);break;
  case '6':RUN_BLK(block,ready);break;
}}
	while(w!='Q');
 cout<<"  -----------结束任务!-------------"<<endl;
}
//==================================================================
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -