In the SCAN algorithm, the disk arm starts at one end of the disk and moves toward the other end, servicing requests as it reaches each cylinder, until it gets to the other end of the disk.
At the other end, the direction of head movement is reversed, and servicing continues. The head continuously scans back and forth across the disk.
The SCAN algorithm is sometimes called the elevator algorithm, since the disk arms behaves just like an elevator in a building, first servicing all the requests going up and then reversing to service requests the other way.
#include #include int main() { int i,j,sum=0,n; int d[20]; int disk; //loc of head int temp,max; int dloc; //loc of disk in array clrscr(); printf("enter number of location\t"); scanf("%d",&n); printf("enter position of head\t"); scanf("%d",&disk); printf("enter elements of disk queue\n"); for(i=0;i<n;i++)< span=""> { scanf("%d",&d[i]); } d[n]=disk; n=n+1; for(i=0;i<n;i++) sorting="" disk="" locations<="" span=""> { for(j=i;j<n;j++)< span=""> { if(d[i]>d[j]) { temp=d[i]; d[i]=d[j]; d[j]=temp; } } } max=d[n]; for(i=0;i<n;i++) to="" find="" loc="" of="" disc="" in="" array<="" span=""> { if(disk==d[i]) { dloc=i; break; } } for(i=dloc;i>=0;i--) { printf("%d -->",d[i]); } printf("0 -->"); for(i=dloc+1;i<n;i++)< span=""> { printf("%d-->",d[i]); } sum=disk+max; printf("\nmovement of total cylinders %d",sum); getch(); return 0; }</n;i++)<></n;i++)></n;j++)<></n;i++)></n;i++)<>
Output: Enter no of location 8 Enter position of head 53 Enter elements of disk queue 98 183 37 122 14 124 65 67 53->37->14->0->65->67->98->122->124->183-> Movement of total cylinders 236.