📄 processmanegement.cpp
字号:
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "conio.h"
#define OK 1
#define OVERFLOW -2
#define ERROR 0
#define FALSE 0
typedef int ElemType;
typedef int Status ;
typedef struct LNode{
ElemType name;
struct LNode *next;
} LNode, * LinkList;
LinkList ready,run,wait;
LinkList head;
int length=0;
void CreateList_L(LinkList &L,int n)
{ LinkList p;
int i;
L=(LinkList) malloc (sizeof(LNode));
L->name=NULL;
L->next=NULL;
for(i=n;i>0;--i)
{p=(LinkList)malloc(sizeof(LNode));
printf("创建1个进程的用户标识域:");
scanf("%d",&p->name);
p->next=L->next;L->next=p;}
}
/*Status ListInsert_L(LinkList &L, int i, ElemType e)
{ LinkList s,p;
int j;
p = L; j = 0;
while(p&&j<i-1){p=p->next;++j;}
if(!p||j>i-1) return ERROR;
s = (LNode *)malloc(sizeof(LNode));
if(!s) return OVERFLOW;
s->name= e;
s->next = p->next; p->next = s;
return OK;
}*/
Status Insert(LinkList &L, ElemType e)
{ LinkList s,p;
p = L;
while(p->next!=NULL)
{p=p->next;}
s = (LNode *)malloc(sizeof(LNode));
if(!s) return OVERFLOW;
s->name= e;
s->next = p->next; p->next = s;
return OK;
}
Status ListDelete_L(LinkList L, int i, ElemType &e)
{ LinkList s,p;
int j;
p = L; j = 0;
while(p->next && j<i-1){p=p->next;++j;}
if(!(p->next)||j>i-1) return ERROR;
s = p->next;
p->next = s->next;
e=s->name;
free(s);
return e;
}
void show(LinkList p)
{ int i=0;
p=p->next;
//length=0;
while(p){
printf("%d->",p->name);
p=p->next;
i++;
}
}
void show1(LinkList p)
{ int i=0;
p=p->next;
length=0;
while(p){
printf("%d->",p->name);
p=p->next;
i++;
}
length=i;
}
Status findjiedian(LinkList p,int i,ElemType &e){
int j=0;
p=p->next;
while(p){
if(j==i-1) e=p->name;
break;
p=p->next;
}
return e;
}
Status search(LinkList p,ElemType &e){
while(p){
if(p->next==NULL)
e=p->name;
p=p->next;
}
return e;
}
void menu()
{
int c,flag;
int ch;
ElemType e=NULL;
re: system("cls"); //清屏
printf("\n---------------------------进程状态转换---------------------\n");
printf("1.就绪态转换成运行态\n");
printf("2.运行态转换成等待态\n");
printf("3.运行态转换成就绪态\n");
printf("4.等待态转换成就绪态\n");
printf("5.结束运行态的进程\n");
printf("6.显示\n");
printf("7.新建进程\n");
printf("0.退出\n");
printf("-------------------------------------------------------------\n");
printf("请选择:");
scanf("%d",&c);
switch(c){
case 1:{
printf("\n就绪态:");
show(ready);
printf("\n运行态:");
show(run);
search(run,e);
if(e==NULL){
//printf("\n请输入需要插入的节点在就绪态所在的序号:");
//scanf("%d",&i);
//flag=i;
ListDelete_L(ready,1,e);
Insert(run,e);
printf("\n操作成功!");
printf("\n运行态:");
show(run);
}
else printf("\n有进程正在运行中,请选择5结束运行态的进程!");
getch();
goto re;
}break;
case 2:{printf("\n运行态:");
show(run);
search(run,e);
if(e!=NULL) {
//printf("\n请输入插入节点所在的序号:");scanf("%d",&i);
Insert(wait,e);
ListDelete_L(run,1,e);
printf("\n等待态:%d",e);
e=NULL;
flag=NULL;
}
else printf("\n没有进程正在运行!");
getch();
goto re;
}break;
case 3:{printf("\n运行态:");
show(run);
search(run,e);
if(e!=NULL){
//printf("\n请输入需要插入到就绪态的序号:");
//scanf("%d",&i);
Insert(ready,e);
ListDelete_L(run,1,e);
printf("\n就绪态:");
printf("%d",e);
e=NULL;
}
else printf("\n没有进程正在运行!");
getch();
goto re;
}break;
case 4:{
printf("等待态:");
show1(wait);
printf("\n就绪态:");
show(ready);
if(length==NULL) printf("\n等待态没有进程!");
else{
//printf("\n请输入插入节点所在的序号:");
//scanf("%d",&i);
findjiedian(wait,1,e);
Insert(ready,e);
ListDelete_L(wait,1,e);
printf("\n就绪态:");
show(ready);
e=NULL;
}
getch();
goto re;
}break;
case 5:{
printf("正在运行的进程:%d",e);
if(e==NULL)printf("\n没有进程正在运行!");
else
{printf("\n是否结束此进程?y/n:");
scanf("%d",&ch);
ch=getchar();
if('y'==ch){
ListDelete_L(run,1,e);
printf("\n进程已结束");
}
else printf("\n没有删除此进程!");}
getch();
goto re;
}break;
case 6:{printf("就绪态:");
show(ready);
printf("\n运行态:");
show(run);
printf("\n等待态:");
show1(wait);
getch();
goto re;}break;
case 7:{printf("请输入新的进程名:");
scanf("%d",&e);
Insert(ready,e);
getch();
goto re;}break;
case 0:break;
}
system("cls"); //清屏
}
void main()
{
//ElemType e;
int c,n;
printf("输入进程的个数n,建立带表头结点的进程单链线性表ready:\n");
scanf("%d",&n);
CreateList_L(ready,n);
printf("\n所建立的进程单链表的元素为:\n");
show(ready);
getch();
re:system("cls"); //清屏
printf("\n---------------------------菜单---------------------\n");
/* printf("1.插入新进程\n");*/
printf("1.进程状态转换\n");
printf("2.退出\n");
printf("-----------------------------------------------------\n");
scanf("%d",&c);
switch(c)
{
case 1:{ CreateList_L(run,0);
CreateList_L(wait,0);
menu();goto re;}break;
case 2: exit(1);
}
getch();
system("cls"); //清屏
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -