# CSCAN Disk Scheduling Algorithm Program in C/C++

Disk scheduling is done by operating systems to schedule I/O requests arriving for the disk and the algorithm used for the disk scheduling is called Disk Scheduling Algorithm.

In this post, we will discuss the CSCAN Disk Scheduling Algorithm and also write a program for SCAN disk scheduling algorithm. In CSCAN algorithm, the disk arm instead of reversing its direction goes to the other end of the disk and starts servicing the requests from there. So, the disk arm moves in a circular fashion and this algorithm is also similar to CSCAN algorithm and hence it is known as C-SCAN (Circular SCAN).

We will use C++ to write this algorithm due to the standard template library support. Hence, we will write the program of CSCAN Disk Scheduling Algorithm in C++, although, it’s very similar to C.

INPUT:
The first line is the size of the disk (m).
The second line is the number of I/O requests (n).
The third line is an array of I/O requests (a[n]).
The fourth line is the head position (h).

OUTPUT:

The following is the CSCAN disk scheduling program in C++.

```#include<bits/stdc++.h>
using namespace std;
int main(){
int i,j,k,n,m,sum=0,x,y,h;
cout<<"Enter the size of disk\n";
cin>>m;
cout<<"Enter number of requests\n";
cin>>n;
cout<<"Enter the requests\n";
vector <int> a(n),b;
for(i=0;i<n;i++){
cin>>a[i];
}
for(i=0;i<n;i++){
if(a[i]>m){
cout<<"Error, Unknown position "<<a[i]<<"\n";
return 0;
}
}
cin>>h;
int temp=h;
a.push_back(h);
a.push_back(m);
a.push_back(0);
sort(a.begin(),a.end());
for(i=0;i<a.size();i++){
if(h==a[i])
break;
}
k=i;
if(k<n/2){
for(i=k;i<a.size();i++){
b.push_back(a[i]);
}
for(i=0;i<=k-1;i++){
b.push_back(a[i]);
}
}
else{
for(i=k;i>=0;i--){
b.push_back(a[i]);
}
for(i=a.size()-1;i>=k+1;i--){
b.push_back(a[i]);
}
}
temp=b;
cout<<temp;
for(i=1;i<b.size();i++){
cout<<" -> "<<b[i];
sum+=abs(b[i]-temp);
temp=b[i];
}
cout<<'\n';
cout<<"Total head movements = "<< sum<<'\n';
return 0;
}```

OUTPUT:

```Enter the size of disk
199
Enter number of requests
8
Enter the requests
98 183 37 122 14 124 65 67
53
53 -> 65 -> 67 -> 98 -> 122 -> 124 -> 183 -> 199 -> 0 -> 14 -> 37

#### Other disk scheduling algorithms:

Let us know in the comments if you are having any questions regarding this CSCAN Disk Scheduling Algorithm.