C++单链表实现磁盘调度算法.docVIP

  • 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)

1亿VIP精品文档

相关文档