[c++]代码库
#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()
{
cout<<endl<<endl;
cout<<" ┏━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
cout<<" ┃ 模拟UNIX的成组链接法 ┃"<<endl;
cout<<" ┠───────────────────────┨"<<endl;
cout<<" ┃ (c)All Right Reserved Neo ┃"<<endl;
cout<<" ┃ sony006@163.com ┃"<<endl;
cout<<" ┃ version 2004 build 1122 ┃"<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;
cout<<endl<<endl;
}
void main()
{
int f=1;
int chioce;
version();
head=initial();
total=0;
jhead=initial_job();
readData();
while ( f==1 )
{
cout<<"===================================================="<<endl;
cout<<" 模拟UNIX的成组链接法 "<<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;
}
}
}
初级程序员
by: 是一只小龙呀 发表于:2021-11-11 19:42:18 顶(0) | 踩(0) 回复
1
回复评论