- 18
- 0
- 约4.89千字
- 约 7页
- 2016-02-24 发布于江苏
- 举报
C++单链表实现磁盘调度算法.doc
#include iostream
#include string
#include conio.h
#include windows.h
#includeiomanip
#include stdlib.h
using namespace std;
class LinList;
struct LinNode
{
int no;
LinNode *next;
};
class LinList
{
private :
LinNode *head;
public :
int size;
LinList() //构造函数,用于构造头结点和声明长度
{
head=new LinNode;
head-next=NULL;
size=0;
}
void Insert(int no)//插入函数
{
LinNode *newnode=new LinNode;
newnode-no=no;
newnode-next=NULL;
Index(size-1)-next=newnode;
size++;
}
LinNode *Index(int i)//定位函数
{
if(i-1||isize-1)
{
cout ;
exit(0);
}
if(i==-1)return head;
if(i==0)return head-next;
LinNode *p=head-next;
int k=0;
while(p!=NULLki)
{
p=p-next;
k++;
}
return p;
}
void FCFS()//先来先服务
{
cout -FCFS调度算法如下:;
show();
float sum=0;
float ave;
for(int i=1;isize;i++)
{
sum+=abs(Index(i)-no-Index(i-1)-no);
}
ave=sum/size;
cout -平均寻道长度为:aveendl;
}
void SSTF(int start_place)// 最短寻道时间优先算法
{
cout -SSTF调度算法如下:;
int length=size;
int *a=sort();
float sum=0;
float ave;
int index;
for(int i=0;isize;i++)
{
if(start_placea[i])
{
if(i==0)
{index=0;sum+=abs(a[0]-start_place);break;}
else
{
if(i==size-1)
{index=size-1;sum+=abs(a[size-1]-start_place);break;}
else
{
if(abs(a[i]-start_place)abs(start_place-a[i-1]))
{
sum+=abs(a[i-1]-start_place);
index=i-1;
break;
}
else
{
index=i;
sum+=abs(a[i]-start_place);
break;
}
}
}
}
}
for(int j=0;jsize-1;j++)
{
if(length1){couta[index]-;}
if(index==0)
{sum+=abs(a[0]-a[1]);a=Delete(a,index,length);index=0;length--;}
else
{
if(index==length-1)
{sum+=abs(a[length-1]-a[length-2]);a=Delete(a,index,length);index=length-2;length--;}
else
{
if(abs(a[index]-a[index-1])abs(a[index+1]-a[index]))
{sum+=abs(a[index]-a[index-1]);a=Delete(a,index,length);index-=1;length--;}
else
{sum+=abs(a[index+1]-a[
原创力文档

文档评论(0)