Chinaunix首页 | 论坛 | 博客
  • 博客访问: 246684
  • 博文数量: 5
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 363
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-04 00:21
文章分类

全部博文(5)

文章存档

2009年(1)

2008年(4)

我的朋友

分类:

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<data;

}

else

{

while(p->next!=NULL)

{

cout<data<<"->";

p=p->next;

}

cout<data<

}

}

阅读(4971) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-05-27 09:38:29

xiexie