📄 scan.cpp
字号:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
//先向右扫描再向左扫描
typedef struct node
{
int data;
int flag;
}node;
int scan(int cl,int num,node *a)
{
int i,t,j;
for(i=0;i<num;i++)//数组按递增排序
for(j=i+1;j<num;j++)
if(a[i].data>a[j].data)
{
t=a[i].data;
a[i].data=a[j].data;
a[j].data=t;
}
printf("\n\n磁道调度序列为:\n\n");
for (i=0;i<num;i++)//向右扫描
{
if(a[i].data>cl)
{
if(a[i].flag==0)
{
printf("%d-->\t",a[i].data);
if(i%10==0) printf("\n");//每十个数为一行
a[i].flag=1;
}
}
}
t=abs(cl-a[num-1].data);
for(i=num-1;i>=0;i--)//向左扫描
{
int f=0;f++;
if(a[i].data<cl)
{
if(a[i].flag==0)
{
printf("%d-->\t",a[i].data);
if(f%10==0) printf("\n");//每十个数为一行
a[i].flag=1;
}
}
}
t=t+a[num-1].data-a[0].data;//移动的磁道数
printf("\n\n移动磁道数为:%d\n",t);
return 1;
}
int main(int argc,char *argv[])
{
FILE *fp;int i;int num,location;char temp[20];
node *serial;
fp=fopen(argv[1],"r");
if(fp==NULL)
{
printf("Read file failed!");
return 0;
}
fscanf(fp,"%14s%d",temp,&num);//读待访问的磁道数
printf("%14s%d\n",temp,num);
fscanf(fp,"%17s%d",temp,&location);//读当前磁头
printf("%17s%d\n",temp,location);
fscanf(fp,"%13s",temp);//读待访问的磁道序列
printf("%13s\n",temp);
serial=(node *)malloc(num*sizeof(node));//数组长度
for(i=0;i<num;i++)
fscanf(fp,"%d",&(serial[i].data));
for(i=0;i<num;i++)
{
printf("%d\t",serial[i].data);
serial[i].flag=0;
}
fclose(fp);
scan(location,num,serial);
free(serial);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -