?? 磁盤空間的分配與回收.txt
字號:
#include "stdafx.h"
#include<stdio.h>
#include<iostream.h>
#include "stdlib.h"
#include<string.h>
const int lump=40;
const int word=8;
const int wordnum=lump/word;
typedef struct node{
char jobname[20];
int num;
int nums[lump];
struct node *next;
}jobs;
int table[wordnum][word];
int freenum=0;
jobs *head;
void initial(){
int i,j;
jobs *p;
for(i=0;i<wordnum;i++){
for(j=0;j<word;j++){
table[i][j]=0;
}
}
p=new jobs;
strcpy(p->jobname,"null");
p->num=0;
p->next=NULL;
head=p;
}
void numinitial()
{
int i,j;
FILE *fp;
char fname[20];
cout<<">^_^<請輸入初始位示圖數(shù)據(jù)文件名:"<<endl;
cin>>fname;
if((fp=fopen(fname,"r"))!=NULL){
for(i=0;i<wordnum;i++){
for(j=0;j<word;j++){
fscanf(fp,"%d",&table[i][j]);
if(table[i][j]==1)freenum++;
}
}
cout<<"位視圖總塊數(shù)為40塊,初始化后如下表:"<<endl;
cout<<" "<<"------------------"<<endl;
cout<<" "<<" 初始位示圖 "<<endl;
cout<<" "<<"------------------"<<endl;
for(i=0;i<wordnum;i++)
{
cout<<" ";
for(j=0;j<word;j++)
{
cout<<table[i][j]<<" ";
}
cout<<endl;
}
cout<<" "<<"------------------"<<endl;
cout<<"總空閑塊數(shù):"<<freenum;
cout<<endl;
}
else{
cout<<"文件不能打開!"<<endl;
}
}
void apply()
{
char jobname[10];
jobs *p;
int i,j,num,k;
cout<<"請輸入申請空閑塊的作業(yè)名:";
cin>>jobname;
cout<<"請輸入作業(yè)所需要的塊數(shù):";
cin>>num;
if(num<=freenum)
{
freenum-=num;
p=(jobs*)malloc(sizeof(jobs));
strcpy(p->jobname,jobname);
p->num=num;
for(k=0;k<num;k++)
{
i=0;
j=0;
while(table[i][j]==1)
{
j=0;
while(table[i][j]==1)j++;
if(table[i][j]==1)i++;
}
p->nums[k]=i*word+j;
table[i][j]=1;
}
p->next=head->next;
head->next=p;
cout<<"申請成功后的位視圖如下:"<<endl;
cout<<" "<<"------------------"<<endl;
cout<<" "<<" 當(dāng)前位示圖 "<<endl;
cout<<" "<<"------------------"<<endl;
for(i=0;i<wordnum;i++)
{
cout<<" ";
for(j=0;j<word;j++)
{
cout<<table[i][j]<<" ";
}
cout<<endl;
}
cout<<" "<<"------------------"<<endl;
cout<<"申請空閑塊的作業(yè)名:"<<p->jobname<<" 作業(yè)所要的塊數(shù):"<<p->num<<endl;
cout<<"該作業(yè)申請到的塊的塊號為:";
for(i=0;i<p->num;i++)
{
cout<<p->nums[i]<<" ";
}
cout<<"申請后空閑塊數(shù):"<<freenum;
cout<<endl;
}
else{
cout<<"對不起,沒有足夠的空閑的物理塊!"<<endl;
}
}
void delect()
{
char jobname[10];
int n,i,j,num,k;
jobs *p,*q;
cout<<"請輸入要刪除的作業(yè)名:";
cin>>jobname;
q=head;
p=head->next;
while(p!=NULL&&strcmp(p->jobname,jobname))
{
q=p;
p=p->next;
}
num=p->num;
cout<<"撤銷的作業(yè)的釋放的塊數(shù)為:"<<num<<endl;
cout<<"撤銷的作業(yè)在位視圖中的位置為:"<<endl;
if(p!=NULL)
{
for(k=0;k<num;k++)
{
n=p->nums[k];
i=n/word;
j=n%word;
table[i][j]=0;
cout<<" 第"<<k<<"塊的塊號為:"<<n<<endl;
cout<<" 字號:"<<n/word<<" 塊號:"<<n%word<<endl;
}
freenum+=num;
q->next=p->next;
free(p);
cout<<"回收成功后的位視圖如下:"<<endl;
cout<<" "<<"------------------"<<endl;
cout<<" "<<" 當(dāng)前位示圖 "<<endl;
cout<<" "<<"------------------"<<endl;
for(i=0;i<wordnum;i++)
{
cout<<" ";
for(j=0;j<word;j++)
{
cout<<table[i][j]<<" ";
}
cout<<endl;
}
cout<<" "<<"------------------"<<endl;
cout<<"回收后空閑塊數(shù):"<<freenum;
cout<<endl;
}
}
void main()
{
int t=1,k;
initial();
numinitial();
while(t==1)
{
cout<<endl;
cout<<">^_^<請選擇要進(jìn)行的操作:"<<endl;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
cout<<"1.申請一個空閑塊"<<endl;
cout<<"2.釋放一個空閑塊"<<endl;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
cout<<"請選擇:";
cin>>k;
switch(k){
case 1:apply();
break;
case 2:delect();
break;
default:cout<<"選擇錯誤"<<endl;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -