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

📄 cipan.cpp

📁 有多个访盘要求在等待时对这些要求的顺序的确定安排或调整
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<math.h>
typedef struct 
{
	int nums;	  	//请求队列长度
	int *mem;		//访问请求
	int *f;			//每次访问磁臂移动磁道数
	int *tmp;		//SSTF临时变量
	int *sh;		//访问顺序
	int *m;			//SSTF调度队列
}Cibi;
Cibi *read(Cibi *p)		//文件打开
{
	int i;
	FILE *file;
	char str[30];      //文件名存放变量
    char empty[30],full[30];
    printf("请输入文件名:");
	scanf("%s",str);			
	getchar();
	if((file=fopen(str,"r"))==NULL)
	  {
		printf("文件打开错误!");
		exit(1);
	     }
    p=(Cibi*)malloc(sizeof(Cibi));
	fscanf(file,"%5s%d",empty,&p->nums);
	fscanf(file,"%12s",full);
	p->mem=(int *)malloc(sizeof(int)*p->nums);//为结构体分配空间
	p->sh=(int *)malloc(sizeof(int)*p->nums);
	p->f=(int *)malloc(sizeof(int)*p->nums);
	p->tmp=(int *)malloc(sizeof(int)*p->nums);
	p->sh=(int *)malloc(sizeof(int)*p->nums);
	p->m=(int *)malloc(sizeof(int)*p->nums);
for(i=0;i<p->nums;i++)
	{
		fscanf(file,"%d ",&p->mem[i]);
	};
	printf("数据文件内容:\n");
	printf("%5s%d\n",empty,p->nums);
	printf("%12s",full);
	for(i=0;i<p->nums;i++)
	{
		printf("%d ",p->mem[i]);
	};
    fclose(file);		//文件关闭
	return(p);
}
void SSTF(Cibi *p)				//SSTF调度算法
{
	int j,k,t=0,sum=0,x,l;
	printf("\n请输入当前磁臂位置:"); 
    scanf("%d",&t);				//当前磁臂位置                   
    printf("\n最短路径优先调度算法\n");
    for(l=0;l<p->nums;l++)
	{
		p->m[l]=p->mem[l];		//复制请求队列到调度队列
	};
	for(j=0;j<p->nums;j++)
    {
        for(k=0;k<p->nums-j;k++)
           p->tmp[k]=abs(t-p->m[k]);		//求出当前磁臂所在位置与各个请求的距离
		l=0;
        for(k=0;k<p->nums-j;k++)
                l=(p->tmp[l]>p->tmp[k])?k:l;	//判断距离最短的那个请求在请求队列中的位置	
        x=l;
           t=p->m[x];			//将访问的磁道号存入当前磁道
           p->sh[j]=p->m[x];	//将访问的磁道号存入sh[j]
           p->f[j]=p->tmp[x];	//将距离存入f[j]
        sum+=p->f[j];
        for(k=x;k<p->nums-1;k++)
            p->m[k]=p->m[k+1];	//删除已经访问过的请求
    }
    printf("\n请求顺序\t访问顺序\t移动距离\n");
	 for(j=0;j<p->nums;j++)
    {
        printf("%d\t\t%d\t\t%d\n",p->mem[j],p->sh[j],p->f[j]);
    }
    printf("\n磁臂移动的总磁道数:");
	printf("%d\n",sum);
}
void main()
{
    Cibi *p;
    p=read(p);
	SSTF(p);
}

⌨️ 快捷键说明

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