📄 操作系统.cpp
字号:
#include<iostream>
using namespace std;
struct Node;
typedef struct Node* PNode;
struct Node
{
int Faddress;
int Eaddress;
int Len;
int Process;
PNode rlink;
};
typedef struct Node* Plink;
const int length=50;
int len[length];
int addr[length];
PNode pl[length];
static int changdu;//保存链的长度
static int pos;
int* ssortting(int a[]) //顺序排序
{
int count=0;//记录了数组a的有效值
int i,j,k,tempt;
while(a[count]>0)
count++;
changdu=count;
for(i=0;i<count-1;i++)
{
k=i;
for(j=i+1;j<count;j++)
{
if(a[k]>a[j])k=j;
}
if(k!=i)
{
tempt=a[k];
a[k]=a[i];
a[i]=tempt;
}
}
return a;
}
int* lsortting(int a[]) //逆序排序
{
int count=0;//记录了数组a的有效值
int i,j,k,tempt;
while(a[count]>0)
count++;
changdu=count;
for(i=0;i<count-1;i++)
{
k=i;
for(j=i+1;j<count;j++)
{
if(a[k]<a[j])k=j;
}
if(k!=i)
{
tempt=a[k];
a[k]=a[i];
a[i]=tempt;
}
}
return a;
}
Plink createLink(void)
{
Plink plink;
plink=(Plink)malloc(sizeof(struct Node));
plink->Faddress=0;
plink->Eaddress=0;
plink->Len=0;
plink->Process=0;
plink->rlink=NULL;
return plink;
}
Plink initLink(Plink plink,int len[])
{
Plink p,q;
int count=0;
q=plink;
while(len[count]>0)
{
p=(Plink)malloc(sizeof(struct Node));
p->Faddress=pos;
p->Eaddress=pos+len[count];
pos=pos+len[count];
p->Len=len[count];
p->Process=0;
p->rlink=NULL;
q->rlink=p;
q=p;
count++;
}
return plink;
}
void printLink(PNode pl[])
{
int i=0;
cout<<"内存的使用情况和空闲情况为:"<<endl;
while(pl[i]!=NULL)
{
cout<<"Faddress:"<<pl[i]->Faddress<<endl;
cout<<"Eaddress:"<<pl[i]->Eaddress<<endl;
cout<<"Len :"<<pl[i]->Len<<endl;
cout<<"Process :"<<pl[i]->Process<<endl;
i++;
cout<<endl;
}
}
void fsortLink(Plink plink,int a[]) //将链表按照某一序列重排序(这里必须创建一条备用链,以备用链来作分配和使用)
{ //非常遗憾的是仅仅只有一条链,如对地址赋值,那么原来的链会被破坏掉
int i,j=0; //任何时刻,绝对不能破坏链表,否则会发生致命的错误
PNode p;
for(i=0;i<=changdu;i++)
{
p=plink->rlink;
while(p!=NULL)
{
if(p->Faddress==a[i])break;
p=p->rlink;
}
pl[j]=p;
j++;
}
pl[j]=NULL;
}
int fDistribute(PNode pl[],int i,int j)
{
int m=0,n=0,t,w,k,u;
PNode p;
while(pl[m]!=NULL)
{
if(pl[m]->Len>=j)
{
pl[m]->Process=i;
if(pl[m]->Len>j)
{
p=(Plink)malloc(sizeof(struct Node));
t=pl[m]->Len-j;
pl[m]->Len=j;
w=pl[m]->Eaddress;
pl[m]->Eaddress=pl[m]->Faddress+j;
k=pl[m]->Eaddress;
p->Faddress=k;
p->Eaddress=w;
p->Len=t;
p->Process=0;
p->rlink=pl[m+1];
}
break;
}
m++;
}
u=0;
while(pl[u]!=NULL)
u++;
for(n=u+1;n>=m+1;n--)
pl[n+1]=pl[n];
pl[m+1]=p;
if(pl[m]==NULL)
return -1;
else
return(pl[m]->Faddress);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -