c语言模拟磁盘寻道算法:SSTF(最短寻道优先算法、CSCAN(循环扫描算法、SCAN(扫描算法)



#include
#include
#include
#include
#include
#include
#define MAX 100 //磁道范围 
#define N 20   //序列数目 

int list[MAX];  //存放随机产生的序列 
int visit[MAX]; //标记数组 
int location;//初始磁头位置  
int closedistant; //保存其他磁道与当前磁头所在磁道的最短距离 

//按磁道从小到大排序 
void sort()
{
	int i;
	int j;
	int t;
	for(i=0;i",after[i]);
	} 
	printf("%d\n\n",after[i]);
	printf("所有进程运行后磁头运行的总磁道数为:%d\n\n",move);
	printf("平均寻道时间为:%.2lf\n\n",move*1.0/N);
	printf("\n-------------------------------------------------------\n\n"); 
}

//循环扫描算法
void CSCAN() 
{
    int i;
    int j;
    int move;
    int loca;
    int after[MAX];
    i=0;
    loca=location;
    for(i=0;i=loca){
    		break;
    	}
    }
    move=0;
    for(j=0;j",after[i]);
	} 
	printf("%d\n\n",after[i]);
	printf("所有进程运行后磁头运行的总磁道数为:%d\n\n",move);
	printf("平均寻道时间为:%.2lf\n\n",move*1.0/N);
	printf("\n-------------------------------------------------------\n\n");
}

//扫描算法
void SCAN() 
{
    int i;
    int j;
    int k;
    int move;
    int loca;
    int after[MAX];
    loca=location;
    i=0;
    for(i=0;i=loca){
    		break;
    	}
    }
    j=i-1;
    k=0;
    move=0;
    while(i=0){//后自外向里 `
    	move=move+fabs(list[j]-loca);//记录移动的距离
		loca=list[j]; //记录当前磁头位置 
    	after[k++]=list[j];//记录路径 
    	j--;
    }
    printf("\n本算法规定磁头初始方向为自低磁道向高磁道\n\n");
    printf("采用SCAN算法后的寻道序列为:\n");
	for(i=0;i",after[i]);
	} 
	printf("%d\n\n",after[i]);
	printf("所有进程运行后磁头运行的总磁道数为:%d\n\n",move);
	printf("平均寻道时间为:%.2lf\n\n",move*1.0/N);
	printf("\n-------------------------------------------------------\n\n");
}

void Start()
{
	sort();
	printf("请选择:\n1、SSTF(最短寻道优先算法)\n2、CSCAN(循环扫描算法)\n");
    printf("3、SCAN(扫描算法)\n4、重新产生一组新的序列\n5、结束\n\n");
	char c;
	while(c=getchar(),c!='5'){
	    switch(c){
		    case '1':SSTF();break;
		    case '2':CSCAN();break;
		    case '3':SCAN();break;
		    case '4':CreateList();sort();break;
		    default:break; 
	    }
	}
}

int main()
{
	srand((unsigned)time(NULL));
	CreateList();
    Start();
	return 0;
}

你可能感兴趣的:(学习日记)