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

📄 processmanegement.cpp

📁 进程管理源代码!简单的实现了三态转换的功能.
💻 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 + -