博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验二
阅读量:5057 次
发布时间:2019-06-12

本文共 3102 字,大约阅读时间需要 10 分钟。

                                                                      使用C语言的数据结构模拟进程的调度

一、        实验目的

 通过模拟进程的调度,进一步了解进程的调度的具体过程。

二、        实验内容和要求

     1.进程PCB的结构体定义

     2.定义队列

     3.输入进程序列

     4.排序(按到位时间)

     5.输出进程运行的结果

 

三、        实验方法、步骤及结果测试

 

  1. 1.      源程序:
    #include
    #include
    #include
    /*定义一个Course类型的结构体*/typedef struct queue{ int number; int intime; int runningtime; int alltime; int waitingtime; struct node *next;}Course;/*定义一个PCB类型来表示队列*/typedef struct node2{ Course *front; Course *rear;}PCB;/*初始化队列*/PCB initqueue(){ PCB q; q.front=(Course *)malloc(sizeof(Course)); q.front->next=NULL; q.rear=q.front; return(q);}/*进入队列*/PCB inserq(PCB q,int x,int j,int y,int k){ Course *p; p=(Course *)malloc(sizeof(Course)); //申请结点p p->number=x;//x.j.y.k储存到新结点p中 p->intime=j; p->runningtime=y; p->waitingtime=k; p->alltime=y+k; p->next=NULL;//p的指针域置空 q.rear->next=p;//指针域指向p,p成为新的队尾 q.rear=p; //对尾指针域指向p,保证rear指向新的队尾 return (q);}/* 打印进程调度的结果*/void display(PCB q){ Course *p; printf("\n队列:\n"); p=q.front->next; while(p!=NULL) { printf("进程进入的顺序:%d ",p->intime);printf("\n"); printf("进程的编号:%d ",p->number); printf("进程运行的时间:%d ",p->runningtime); printf("进程等待的时间:%d ",p->waitingtime); printf("进程所用的总时间:%d ",p->alltime); printf("\n"); p=p->next; }}main(){ int x,y,z,i=0,k,j=1/*用来记录进程进入的顺序*/; PCB q; q=initqueue(); for(i=0;i<5;i++ ){ printf("请输入进程的编号:"); scanf("%d",&x); printf("请输入进程的运行的时间:"); scanf("%d",&y); k=rand()%10;//随机产生0-9的数,代表进程要等待的时间。 q=inserq(q,x,j,y,k); j++; } display(q); }

      

  1. 2.      原理分析及流程图

主要总体设计问题。

存储结构:链式存储

主要算法:结构体的定义;队列的实现。

关键函数:

initqueue()//初始化队列
inserq()//进入队列
display()//打印队列
  1. 3.      主要程序段及其解释:
/*主函数,实现对结构体类型变量的定义以及对队列的使用*/ main(){     int x,y,z,i=0,k,j=1/*用来记录进程进入的顺序*/;     PCB q;     q=initqueue();     for(i=0;i<5;i++ ){           printf("请输入进程的编号:");	   scanf("%d",&x);           printf("请输入进程的运行的时间:");	   scanf("%d",&y);           k=rand()%10;//随机产生0-9的数,代表进程要等待的时间。           q=inserq(q,x,j,y,k);	   j++;       }       display(q); }
/*定义一个Course类型的结构体*/typedef struct queue{	 int number;         int intime;	 int runningtime;	 int alltime;	 int waitingtime;	 struct node *next;}Course;
/*初始化队列*/PCB initqueue(){   PCB q;   q.front=(Course *)malloc(sizeof(Course));   q.front->next=NULL;   q.rear=q.front;   return(q);}/*进入队列*/PCB inserq(PCB q,int x,int j,int y,int k){   Course *p;   p=(Course *)malloc(sizeof(Course)); //申请结点p   p->number=x;//x.j.y.k储存到新结点p中   p->intime=j;   p->runningtime=y;   p->waitingtime=k;   p->alltime=y+k;   p->next=NULL;//p的指针域置空    q.rear->next=p;//指针域指向p,p成为新的队尾    q.rear=p;  //对尾指针域指向p,保证rear指向新的队尾	return (q);}
/* 打印进程调度的结果*/void display(PCB q){	Course *p;	printf("\n队列:\n");	p=q.front->next;	while(p!=NULL)	{	    printf("进程进入的顺序:%d   ",p->intime);printf("\n");	    printf("进程的编号:%d   ",p->number);	    printf("进程运行的时间:%d   ",p->runningtime);	    printf("进程等待的时间:%d   ",p->waitingtime);	    printf("进程所用的总时间:%d  ",p->alltime);		printf("\n");        p=p->next;	}}
  1. 4.      运行结果及分析

运行结果的截图:

 

转载于:https://www.cnblogs.com/1-aa/p/5361028.html

你可能感兴趣的文章
代码实现导航栏分割线
查看>>
Windows Phone开发(7):当好总舵主 转:http://blog.csdn.net/tcjiaan/article/details/7281421...
查看>>
VS 2010打开设计器出现错误
查看>>
SQLServer 镜像功能完全实现
查看>>
Vue-详解设置路由导航的两种方法
查看>>
一个mysql主从复制的配置案例
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
Win8 安装VS2012 和 Sql Server失败问题
查看>>
【AS3代码】播放FLV视频流的三步骤!
查看>>
cocos2d-x 2.2.6 之 .xml文件数据读取
查看>>
枚举的使用
查看>>
【HTTP】Fiddler(三)- Fiddler命令行和HTTP断点调试
查看>>
poi 处理空单元格
查看>>
Android 内存泄漏优化总结
查看>>
luogu4849 寻找宝藏 (cdq分治+dp)
查看>>
日志框架--(一)基础篇
查看>>
关于源程序到可运行程序的过程
查看>>
转载:mysql数据库密码忘记找回方法
查看>>
scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
查看>>
面向对象1
查看>>