91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 5KB
    文件類型: .cpp
    金幣: 2
    下載: 1 次
    發布日期: 2021-06-18
  • 語言: C/C++
  • 標簽: C/C++??Linux??

資源簡介

用C/C++語言模式Linux操作系統主存的分配與回收,希望采納!

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
#include?
typedef?struct?QNode{
char?name[10];
int?address; //起始地址
????int?flag; //狀態,空閑0,分配1
????int?length; //長度
????struct?QNode?*next; //指針指向下一個結點
}QNode;
typedef?struct{
QNode?*front; //指向頭結點
QNode?*rear; //指向尾結點
}?LiQueue;
/*****************************初始化***************************/
void?InitQueue(LiQueue?*&q)
{
q=(LiQueue?*)malloc(sizeof(LiQueue));//q是指針?
QNode?*s;
s=(QNode?*)malloc(sizeof(QNode));
s->address=0; //初始地址為0
s->flag=0; //初始狀態為空閑
printf(“初始化主存空間的大小:“);
scanf(“%d“&s->length);
s->next=NULL;
q->front=q->rear=s;
}


/****************************內存分配**************************/
void?enQueue(LiQueue?*&qint?lengthchar?name[])//q是指針
{
QNode?*s=q->front;
while(s->flag||s->length {
if(s==q->rear)
break;
else
s=s->next;
}
if(s==NULL||s->flag||s->length {
printf(“內存不足\n“);
}
else?if(s->length==length)
??? {
strcpy(s->namename);
s->flag=1;
}
else//空閑區長度大于所需長度
{
QNode?*t;
t=(QNode?*)malloc(sizeof(QNode));
t->address=s->address+length;//下一個節點的基地址?
t->flag=0;//下個節點未分配?
t->length=s->length-length;//剩余內存?
t->next=NULL;
s->flag=1;//上個節點表明已經分配?
s->length=length;//修改分別的長度?
strcpy(s->namename);//分配的進程名稱?
if(s==q->rear)
{
q->rear=t;
s->next=t;
}
else?
{
t->next=s->next;
s->next=t;
}
}
getchar();
}
/******************************回收內存**************************/
void??ClearQueue(LiQueue?*&q)
{
char?name[10];
printf(“輸入進程名:“); scanf(“%s“name);
QNode?*s=q->front;//指向鏈表的頭結點?

//判斷是否釋放的是頭結點?
if(q->front->flag?&&?!strcmp(q->front->namename)) //進程頭結點
{
if(q->front->next!=NULL?&&?!q->front->next->flag)//如果下一個結點空閑,結點合并
{
q->front->length+=q->front->next->length;
//斷開第二個節點的連接,接上后面的節點?
q->front->next=q->front->next->next;?
q->front->flag=0;//
}
else //否則直接將結點狀態改為空閑
q->front->flag=0;
}


else?if(q->rear->flag?&&?!strcmp(q->rear->namename))//進程在尾結點
{
QNode?*t=q->front;
while(t!=q->rear)//查找上一個結點s
{
s=t;
t=t->next;
}
if(!s->flag)//如果上一個結點空閑結點合并
{
s->length+=q->rear->length;
q->rear=s;
s->next=NULL;

評論

共有 條評論