📄 作业1.cpp
字号:
#include <iostream.h>
typedef struct node
{
int data;
struct node *next;
}ListNode;
typedef ListNode * LinkList;
/*-------------------------------------*/
LinkList CreateList(int Num)
{
int i;
LinkList head = new ListNode();
ListNode *s,*r;
r=head;
for(i=0;i<Num;i++)
{
s=new ListNode();
r->next=s;
r=s;
}
r->next = NULL;
return head;
}
/*-------------------------------------*/
/*-------------------------------------*/
void ShowList(LinkList head)
{
head = head->next;
while(head!=NULL)
{
cout<<" "<<head->data;
head=head->next;
}
}
/*-------------------------------------*/
int main()
{
char cmd;
int Name,flag=0;
LinkList FreeP;
LinkList ReadyP;
LinkList ExeP;
LinkList BlockP;
cout<<"******************************"<<endl;
cout<<" 欢迎使用此系统——进程控制"<<endl;
cout<<"******************************"<<endl;
FreeP=CreateList(10);
ReadyP=CreateList(0);
ExeP=CreateList(0);
BlockP=CreateList(0);
cout<<"请输入你的command:"<<endl;
cout<<">";
cin>>cmd;
while(1)
{
switch(cmd)
{
case 'c':
case 'C':
cout<<"请输入一个进程名:"<<endl;
cin>>Name;
if(ExeP->next==NULL)
{
flag=0;
}
if(flag==0)
{
ListNode t;
t.data=Name;
t.next = NULL;
ExeP->next=&t;
flag=1;
cout<<"创建进程"<<Name<<"成功"<<endl;
}
else
{
if(FreeP->next != NULL)
{
LinkList p,q;
p=FreeP->next;
FreeP->next=p->next;
p->data=Name;
q=ReadyP;
while(q->next != NULL)
q=q->next;
q->next=p;
p->next=NULL;
cout<<"创建进程"<<Name<<"成功"<<endl;
}
else
cout<<"错误:不能创建进程,已经没有资源!"<<endl;
}
break;
case 'e':
case 'E':
if(ExeP->next!=NULL)
{
LinkList p,q,r;
p=new ListNode();
Name=ExeP->next->data;
p->data=ExeP->next->data;
p->next=NULL;
q=FreeP;
while(q->next != NULL)
q=q->next;
q->next=p;
cout<<"结束进程"<<Name<<"成功!"<<endl;
if(ReadyP->next!=NULL)
{
r=ReadyP->next;
ReadyP->next=r->next;
ExeP->next->data=r->data;
ExeP->next->next=NULL;
}
else
{
ExeP->next=NULL;
cout<<"没有就绪进程,不能再执行!"<<endl;
}
}
else
{
cout<<"没有在执行的进程!"<<endl;
}
break;
case 'b':
case 'B':
if(ExeP->next!=NULL)
{
LinkList p,q;
q=new ListNode();
Name=ExeP->next->data;
q->data=ExeP->next->data;
q->next=NULL;
p=BlockP;
while(p->next!=NULL)
p=p->next;
p->next=q;
cout<<"阻塞进程"<<Name<<"成功!"<<endl;
if(ReadyP->next!=NULL)
{
p=ReadyP->next;
ReadyP->next=p->next;
ExeP->next->data=p->data;
ExeP->next->next=NULL;
}
else
{
ExeP->next=NULL;
cout<<"没有就绪进程,不能再执行!"<<endl;
}
}
else
{
cout<<"没有在执行的进程,不能进行阻塞!"<<endl;
}
break;
case 'w':
case 'W':
if(BlockP->next!=NULL)
{
LinkList p,q;
p=BlockP->next;
Name=p->data;
BlockP->next=p->next;
if(ExeP->next==NULL)
{
ExeP->next=new ListNode();
ExeP->next->data=p->data;
ExeP->next->next=NULL;
}
else
{
q=ReadyP;
while(q->next!=NULL)
q=q->next;
q->next=p;
p->next=NULL;
}
cout<<"唤醒进程"<<Name<<"成功!"<<endl;
}
else
{
cout<<"没有阻塞进程,不能进行唤醒!"<<endl;
}
break;
case 't':
case 'T':
if(ExeP->next!=NULL)
{
LinkList p,q,r;
p=new ListNode();
Name=ExeP->next->data;
p->data=ExeP->next->data;
p->next=NULL;
q=ReadyP;
while(q->next!=NULL)
q=q->next;
q->next=p;
cout<<"正在执行的进程"<<Name<<"时间片到!"<<endl;
r=ReadyP->next;
ReadyP->next=r->next;
ExeP->next->data=r->data;
ExeP->next->next=NULL;
}
else
{
cout<<"没有正在执行的进程!"<<endl;
}
break;
case 'h':
case 'H':
cout<<"\t帮助: Command list:"<<endl;
cout<<"\tC : 创建进程."<<endl;
cout<<"\tE : 结束进程."<<endl;
cout<<"\tB : 阻塞进程."<<endl;
cout<<"\tW : 唤醒进程."<<endl;
cout<<"\tT : 时间片到."<<endl;
cout<<"\tS : 展示所有进程名."<<endl;
cout<<"\tH : 帮助."<<endl;
cout<<"\t# ; 退出工程."<<endl;
break;
case '#':
return 0;
case 's':
case 'S':
cout<<"就绪进程:";
ShowList(ReadyP);
cout<<endl<<"执行进程:";
ShowList(ExeP);
cout<<endl<<"阻塞进程:";
ShowList(BlockP);
cout<<endl;
break;
default: cout<<"代码错误!"<<endl;break;
}
cout<<">";
cin>>cmd;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -