📄 3.cpp
字号:
#include <iostream.h>
#include <stdlib.h>
#include<stdio.h>
#include <string.h>
#include <time.h>
//************************************************
class empty_block;
class node //List
{
public:
friend class empty_block;
private:
node(int d=0){physic_num=d;next=0;}
node *next;
int physic_num;
};
class empty_block
{
public:
empty_block(){linklist=0;}
empty_block(int d){linklist=new node(d);}
void Insert(int d=0);
void Del_list(int d);
private:
node *End();
node *linklist;
};
void empty_block::Insert(int d)
{
node *pt=new node(d);
if(linklist==0)
linklist=pt;
else
(End())->next=pt;
}
node *empty_block::End()
{
node *prv,*pt;
for(prv=pt=linklist;pt;prv=pt,pt=pt->next)
;
return prv;
}
void empty_block::Del_list(int d)
{
if(linklist==0)
cout<<"empty!\n";
else
{
node *pt=linklist;
node *pr=linklist;
if(linklist->physic_num==d)
linklist=linklist->next;
else
{
while(pt->physic_num!=d &&pt)
{
pr=pt;
pt=pt->next;
}
pr->next=pt->next;
pt->next=0;
}
}
}
//***********************************************************
class List;
class Item //Index
{
public:
friend class List;
private:
Item(int d=0,int e=0){physic_num=d;logic_num=e;next=0;}
Item *next;
int physic_num;
int logic_num;
};
class List
{
public:
List(){list=0;}
List(int d){list=new Item(d);}
void print();
void insert(int d=0,int e=0);
private:
Item *end();
Item *list;
};
void List::print()
{
if(list==0)
cout<<"empty\n";
Item *pt=list;
while(pt)
{
cout<<pt->physic_num<<" ";
pt=pt->next;
}
cout<<endl;
}
void List::insert(int d,int e)
{
Item *pt=new Item(d,e);
if(list==0)
list=pt;
else
(end())->next=pt;
}
Item *List::end()
{
Item *prv,*pt;
for(prv=pt=list;pt;prv=pt,pt=pt->next)
;
return prv;
}
long Rand(int t)
{
srand( (unsigned)time( NULL ) );
int i=rand()>(t)+1 ;
return i;
}
//************************************************
class FCB
{
public:
friend void change(FCB &q);
FCB(){filename='A'; size=0;}
int getsize(){size=Rand(20);return size;}
void print();
void print1(){Index.print();}
void IN(int a,int b){Index.insert(a,b);}
private:
char filename;
int size;
List Index;
};
void FCB::print()
{
cout<<" "<<filename<<" "<<size<<" ";
}
void mydelay(long t) /*延迟函数*/
{
time_t oldtime;
long t0;
t0=t/55;
if(t0<1)t0=1;
oldtime=clock();
while(clock()-oldtime<t0);
}
void Time()
{
mydelay(100);
}
int FP(FCB p, int x,int value[][1],empty_block q,int k,int y)
{
if(k<=y)
{
int m=0;
for(int a=0;a<k;a++)
{
while(m<=x)
{
m=Rand(x);
if(value[m-1][1]==0 )
{
q.Del_list(m);
value[m-1][1]=1;
p.IN(m,a);
break;
}
}
}
p.print();
p.print1();
return 1;
}
else
{
p.print();
cout<<endl;
cout<<"存储空间不足!"<<endl;
return 0;
}
}
void main()
{
cout<<" 文件大小与存储空间大小均用块数表示 "<<endl;
int i,temp,b;
cout<<"******************************"<<endl;
cout<<"Y——开始运行"<<endl;
cout<<"N——程序结束"<<endl;
cout<<"******************************"<<endl;
printf("请输入提示符:(Y/N)");
char c=getchar();
cout<<endl;
int avail[100][1];
empty_block Empty_list;
empty_block Full_list;
FCB fcb;
if(c=='y')
{
printf("文件数:");
temp=Rand(60);
printf(">ld",temp);
Time();
printf(" 存储空间大小为:");
b=i=Rand(100);
printf(">ld\n",i);
cout<<"文件名 文件大小(块) 占用空间"<<endl;
for(int a=0;a<i;a++)
{
avail[a][1]=0;
Empty_list.Insert(a+1);
}
for(int j=0;j<temp;j++)
{
int l=fcb.getsize();
if(FP(fcb,i,avail,Empty_list,l,b))
b=b-l;
else
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -