?? 磁盤存儲空間的管理.txt
字號:
#include<stdio.h>
#include<string.h>
#include<iostream.h>
const int MAXGROUP=10;//定義組的大小
const int MAXJOB=100;//定義一個作業最大能申請的塊數
//結構體定義
typedef struct node{
int quantity;
int cell[MAXGROUP];
struct node *next;
}group;
typedef struct node1{
char name[20];
int quantity;
int cell[MAXJOB];
struct node1 *next;
}job;
group *head;
int total;
job *jhead;
//初始化組函數
group *initial()
{
int i;
group *p;
p=new group;
p->quantity=0;
p->next=NULL;
for(i=0;i<MAXGROUP;i++){
p->cell[i]=-1;
}
return p;
}
//初始化作業函數
job *initial_job()
{
int i;
job *p;
p=new job;
strcpy(p->name,"");
p->quantity=0;
p->next=NULL;
for(i=0;i<MAXGROUP;i++){
p->cell[i]=-1;
}
return p;
}
//讀入空閑塊流文件
void readData()
{
FILE *fp;
char fname[20];
int temp;
group *p;
cout<<"請輸入初始空閑塊數據文件名:";
cin>>fname;
if((fp=fopen("5unix.txt","r"))==NULL){
cout<<"錯誤,文件打不開,請檢查文件名:)"<<endl;
}
else{
cout<<"=================================================="<<endl;
cout<<"讀入的初始空閑塊號:";
while(!feof(fp)){
fscanf(fp,"%d ",&temp);
if(head->quantity<MAXGROUP){
head->cell[head->quantity]=temp;
head->quantity++;
}
else{
p=initial();
p->next=head;
head=p;
p->cell[p->quantity]=temp;
p->quantity++;
}
total++;
//輸出初始數據
cout<<temp<<" ";
}
cout<<endl<<"總空閑塊數:"<<total<<endl;
}
}
//查看專用塊函數
void view()
{
int i;
cout<<endl<<"專用塊數據如下:"<<endl;
cout<<"-------------------------------"<<endl;
cout<<"所存儲的空閑塊號:";
for(i=0;i<head->quantity;i++){
cout<<head->cell[i]<<" ";
}
cout<<endl<<"專用塊空閑塊數為:"<<head->quantity;
cout<<endl<<"總空閑塊數:"<<total<<endl;
}
//新申請函數
void bid()
{
char jobname[20];
int number;
int i;
job *p;
cout<<"----------------------------------"<<endl;
cout<<"請輸入新專業名:";
cin>>jobname;
cout<<"所需內存塊數:";
cin>>number;
if(number>total){
cout<<"所需內存塊數大于當前空閑塊數,請稍候再試:)"<<endl;
}
else{
p=initial_job();
strcpy(p->name,jobname);
p->next=jhead->next;
jhead->next=p;
p->quantity=number;
cout<<"所申請到的空閑塊號流:";
for(i=0;i<number;i++){
if(head->quantity>1){
cout<<head->cell[head->quantity-1]<<" ";
head->quantity--;
p->cell[i]=head->cell[head->quantity-1];
}
else{
cout<<head->cell[0]<<" ";
p->cell[i]=head->cell[head->quantity-1];
head->quantity--;
if(head->next!=NULL){
head=head->next;
}
}
total--;
}
}
cout<<endl;
}
//撤消作業
void finish()
{
char jobname[20];
int i;
job *p,*q;
group *r;
cout<<"請輸入要撤消的作業名:";
cin>>jobname;
q=jhead;
p=jhead->next;
while((p!=NULL)&&(strcmp(p->name,jobname))){
q=q->next;
p=p->next;
}
if(p==NULL){
cout<<"Sorry,沒有該作業"<<endl;
}
else{
for(i=0;i<p->quantity;i++){
if(head->quantity<MAXGROUP){
head->cell[head->quantity]=p->cell[i];
head->quantity++;
}
else{
r=initial();
r->next=head;
head=r;
r->cell[r->quantity]=p->cell[i];
r->quantity++;
}
}
total+=p->quantity;
q->next=p->next;
delete p;
}
}
//顯示版權信息函數
void version()
{
}
void main()
{
int f=1;
int chioce;
version();
head=initial();
total=0;
jhead=initial_job();
readData();
while(f==1){
cout<<"===================================================="<<endl;
cout<<"===================================================="<<endl;
cout<<"1.申請空閑塊 2.撤消作業 3.查看專用塊 0.退出"<<endl;
cout<<"請選擇:";
cin>>chioce;
switch(chioce){
case 1:
bid();
break;
case 2:
finish();
break;
case 3:
view();
break;
case 0:
f=0;
break;
default:
cout<<"選擇錯誤!"<<endl;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -