该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
typedef struct TASK
{
int require;
int io;
} TASK;
int L,P;
TASK T[20][20];
TASK N[20];
void iorequire();
void iodowith();
void init()
{
for(int i=0;i
{
for(int j=0;j
{
T[i][j].require=rand()%200;
T[i][j].io=rand()%200;
}
}
}
void sort_btos(TASK x[],int n)
{
int i,j,k;
TASK t;
for(i=0;i
{
k=i;
for(j=i+1;j
if(x[j].require>x[k].require)
k=j;
if(k!=i)
{
t=x[i];
x[i]=x[k];
x[k]=t;
}
}
}
void sort_stob(TASK x[],int n)
{int i,j,k;
TASK t;
for(i=0;i
{
k=i;
for(j=i+1;j
if(x[j].require
k=j;
if(k!=i)
{
t=x[i];
x[i]=x[k];
x[k]=t;
}
}
}
void sort(TASK x[],int nowdiskway)
{
TASK a[20],b[20];
int s=0,t=0;
for(int i=0;i
{
if(x[i].require>=nowdiskway)
{
a[t]=x[i];
t++;
}
else
{
b[s]=x[i];
s++;
}
}
sort_btos(a,t);
sort_stob(b,s);
for(i=0;i
{
x[i]=b[i];
}
for(i=s;i
{
x[i]=a[i-s];
}
}
int main(int argc, char* argv[])
{
int D[20];
int diskway;//当前磁道
printf("n-STEP-SCAN算演示!\n");
printf("随机产生小于200的磁道号\n");
printf("请输入队列个数,队列中磁道个数,输入当前磁道号(0-200)\n");
scanf("%d%d%d",&L,&P,&diskway);
init();
for(int i=0;i
{
for(int j=0;j
{
N[j]=T[i][j];
}
sort(N,diskway);
D[0]=abs(diskway-N[0].require);
for(int t=1;t
{
D[t]=abs(N[t].require-N[t-1].require);
}
printf(" 下一个磁道号是 : 移动距离:\n");
for(t=0;t
{
printf(" %3d %3d\n",N[t].require,D[t]);
}
diskway=N[P-1].require;
}
return 0;
}