# Program to simulate SCAN Disk Scheduling Algorithm

Share

In the SCAN disk scheduling algorithm, the head begins at one end of the disk and proceeds to the other end, completing requests one at a time along the way. In order to reach the disk, the head first moves in one direction before turning around and repeating the operation.

``````#include <stdio.h>
int request[50];
int SIZE;
int pre;
int uptrack;
int downtrack;
struct max{
int up;
int down;
} kate[50];
int dist(int a, int b){
if (a > b)
return a - b;
return b - a;
}
void sort(int n){
int i, j;
for (i = 0; i < n - 1; i++){
for (j = 0; j < n - i - 1; j++){
if (request[j] > request[j + 1]){
int temp = request[j];
request[j] = request[j + 1];
request[j + 1] = temp;
}
}
}
j = 0;
i = 0;
kate[j].down = request[i];
j++;
i++;
}
downtrack = j;
i++;
j = 0;
while (i < n){
kate[j].up = request[i];
j++;
i++;
}
uptrack = j;
}
void scan(int n){
int i;
int seekcount = 0;
printf("SEEK SEQUENCE = ");
sort(n);
for (i = 0; i < uptrack; i++){
seekcount = seekcount + dist(head, kate[i].up);
}
for (i = downtrack - 1; i > 0; i--){
seekcount = seekcount + dist(head, kate[i].down);
}
}
else{
for (i = downtrack - 1; i >= 0; i--){
seekcount = seekcount + dist(head, kate[i].down);
}
for (i = 0; i < uptrack - 1; i++){
seekcount = seekcount + dist(head, kate[i].up);
}
}
printf(" %d\nTOTAL DISTANCE :%d", head, seekcount);
}
int main(){
int n, i;
printf("ENTER THE DISK SIZE :\n");
scanf("%d", &SIZE);
printf("ENTER THE NO OF REQUEST SEQUENCE :\n");
scanf("%d", &n);
printf("ENTER THE REQUEST SEQUENCE :\n");
for (i = 0; i < n; i++)
scanf("%d", &request[i]);
request[n + 1] = SIZE - 1;
request[n + 2] = 0;
printf("ENTER THE PRE REQUEST :\n");
scanf("%d", &pre);
scan(n + 3);
}
``````

OUTPUT