Write a program to create free space in such a way that the nodes are always maintained in ascending order with respect to starting address. Free space is maintained as a linked list of nodes with each node having the starting byte address and the ending byte address of a free block.
Input format :
Input consists of starting and ending byte addresses until the user ends his/her input.
( Always starting address should be less than or equal to ending address )
( Always starting address should be less than or equal to ending address )
Output format :
The output consists of the free space blocks available for holding the process in ascending order with respect to starting byte address.
[ Refer Sample Input and Output for further details ]
[ Refer Sample Input and Output for further details ]
Sample Input and Output :
[All text in bold corresponds to the input and the rest corresponds to output]
[All text in bold corresponds to the input and the rest corresponds to output]
Enter the starting and ending addresses of the block ( enter -1 -1 to exit )
12
36
Enter the starting and ending addresses of the block ( enter -1 -1 to exit )
2
9
Enter the starting and ending addresses of the block ( enter -1 -1 to exit )
42
58
Enter the starting and ending addresses of the block ( enter -1 -1 to exit )
37
38
Enter the starting and ending addresses of the block ( enter -1 -1 to exit )
92
97
Enter the starting and ending addresses of the block ( enter -1 -1 to exit )
66
72
Free space list :
Start End
12 36
37 38
42 58
66 72
92 97
Answer:
#include<stdio.h>
int main()
{
int start[100],end[100],i,j,temp,count=0;
for(i=0;i<100;i++){
count++;
printf("Enter the starting and ending addresses of the block ( enter -1 -1 to exit )\n");
scanf("%d",&start[i]);
scanf("%d",&end[i]);
if(start[i]==-1 && end[i]==-1)
{
break;
}
}
for(i=0;i<count-1;i++){
for(j=0;j<count-i-1;j++)
{
if(start[j]>start[j+1]){
temp=start[j];
start[j]=start[j+1];
start[j+1]=temp;
temp=end[j];
end[j]=end[j+1];
end[j+1]=temp;
}
}
}
printf("Free space list:\n");
printf("Start end\n");
for(i=0;i<count;i++)
{
if(start[i]!=-1 && end[i]!=-1){
printf("%d %d",start[i],end[i]);
}
}
}
0 Comments