分类:
2008-12-22 21:48:37
流程图:
#include
#include
using namespace std;
typedef struct node{
int data;
struct node *next;
}Node;
void main()
{
void fcfs(Node *,int,int);//声明先来先服务函数
void sstf(Node *,int,int);//声明最短寻道时间优先函数
void scan(Node *,int,int);//声明扫描函数
void print(Node *); //输出链表函数
Node *head,*p,*q;//建立一个链表
int it,c=0,f,s;//c为链表长度,f是开始的磁道号,s是选择那个算法
head=(Node *)malloc(sizeof(Node));
head->next=NULL;
q=head;
cout<<"新建单链表,以0结束:";
cin>>it;
while(it!=0)
{
p=(Node *)malloc(sizeof(Node));
p->next=NULL;
p->data=it;
q->next=p;
q=p;
cin>>it;
c++;
}
cout<<"从几号磁道开始:";
cin>>f;
print(head);
cout<<"链表长度为:"<
cout<<"1、先来先服务算法"<
cout<<"2、最短寻道时间算法"<
cout<<"3、扫描算法"<
cout<<"0、退出"<
cout<<"请选择:";
cin>>s;
while(s!=0)
{
switch(s)
{
case 1:cout<<"你选择了先来先服务算法"<
fcfs( head,c,f);
break;
case 2:cout<<"你选择了最短寻道时间优先"<
sstf( head,c,f);
break;
case 3:cout<<"你选择了扫描算法"<
scan( head,c,f);
break;
}
cout<<"退出请选0,还要继续么:";
cin>>s;
}
}
void fcfs(Node *head,int c,int f)//先来先服务算法
{
void print(Node *);
Node *l,*m,*n;
float num=0;
l=head->next;
for(int i=0;i
{
num+=abs(l->data-f);
f=l->data;
l=l->next;
}
num=num/c;
cout<<"先来先服务的寻道顺序是:"<
print(head);
cout<<"平均寻道长度:"<
}
void sstf(Node *head,int c,int f)//最短寻道时间优先算法
{
void print(Node *);
Node *p,*q,*r,*s,*l,*m;
l=(Node *)malloc(sizeof(Node));
l->next=NULL;
m=l;
q=head;
p=head->next;
s=head;
r=head->next;
float num=0;
for(int i=0;i
{
int min=abs(f-r->data);
for(int j=0;j
{
p=p->next;
q=q->next;
if(abs(f-p->data)
{
min=abs(f-p->data);
r=p;
s=q;
}
}
num+=abs(f-r->data);
f=r->data;
s->next=r->next;
r->next=NULL;
m->next=r;
m=r;
q=head;
p=head->next;
s=head;
r=head->next;
}
num=num/c;
cout<<"最短寻道时间优先顺序是:"<
print(l);
cout<<"平均寻道长度:"<
}
void scan(Node *head,int c,int f)//扫描算法
{
void print(Node *);
int min,max,i=0,j=0;
float num=0;
Node *p,*q,*r,*s,*m,*n,*x,*y;
r=(Node *)malloc(sizeof(Node));//存放比开始磁道小的磁道
r->next=NULL;
s=r;
m=(Node *)malloc(sizeof(Node));//存放比开始磁道大的磁道
m->next=NULL;
n=m;
x=(Node *)malloc(sizeof(Node));
x->next=NULL;
y=x;
q=head;
p=head->next;
while(p->next!=NULL)
{
if(p->data-f>0)
{
q->next=p->next;
p->next=NULL;
n->next=p;
n=p;
p=q->next;
i++;
}
else
{
q->next=p->next;
p->next=NULL;
s->next=p;
s=p;
p=q->next;
j++;
}
}
if(p->data>=f)
{
n->next=p;
n=p;
i++;
}
else
{
s->next=p;
s=p;
j++;
}
//print(r);
//print(m);
q=r;//对比开始磁道小的磁道排序
p=r->next;
while(q->next->next!=NULL)
{
q=q->next;
p=q->next;
max=q->data;
while(p->next!=NULL)
{
if(p->data>max)
{
max=p->data;
p->data=q->data;
q->data=max;
max=q->data;
}
p=p->next;
}
if(p->data>max)
{
max=p->data;
p->data=q->data;
q->data=max;
max=q->data;
}
}
//print(r);
q=m;
p=m->next;
while(q->next->next!=NULL)
{
q=q->next;
p=q->next;
min=q->data;
while(p->next!=NULL)
{
if(p->data
{
min=p->data;
p->data=q->data;
q->data=min;
min=q->data;
}
p=p->next;
}
if(p->data
{
min=p->data;
p->data=q->data;
q->data=min;
min=q->data;
}
}
//print(m);
x=m;
p->next=r->next;
y=x->next;
while(y->next!=NULL)
{
num+=abs(f-y->data);
f=y->data;
y=y->next;
}
num+=abs(f-y->data);
num=num/c;
cout<<"扫描算法的顺序是:"<
print(x);
cout<<"平均寻道长度为:"<
}
void print(Node *head)//输出链表
{
Node *p;
p=head->next;
cout<<"单链表显示:";
if(p==NULL)
{
cout<<"单链表为空:";
}
else if(p->next==NULL)
{
cout<
}
else
{
while(p->next!=NULL)
{
cout<
p=p->next;
}
cout<
}
}