當前位置:首頁 » 操作系統 » 循環分配演算法

循環分配演算法

發布時間: 2022-08-09 13:40:33

『壹』 求用C語言寫出首次適應分配演算法的分配過程~

/********************************
內存管理模擬程序
*******************************/
#include<iostream.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include <time.h>
#include <windows.h>
/*定義宏*/
#define TotalMemSize 1024 /*劃分的物理塊的大小,地址范圍0~1023*/
#define MinSize 2 /*規定的不再分割的剩餘分區的大小*/
#define getpch(type) (type*)malloc(sizeof(type))

/*定義內存塊*/
typedef struct memBlock
{
struct memBlock *next;/*指向下一個塊*/
int stAddr; /*分區塊的初始地址*/
int memSize; /*分區塊的大小*/
int status; /*分區塊的狀態,0:空閑,1:以被分配*/
}MMB;

/*定義全局變數*/
MMB *idleHead=NULL; /*空閑分區鏈表的頭指針*/
MMB *usedHead=NULL; /*分配分區鏈表的頭指針*/
MMB *usedRear=NULL; /*分配分區鏈表的鏈尾指針*/
MMB *np; /*循環首次適應演算法中指向即將被查詢的空閑塊*/

int idleNum=1;/*當前空閑分區的數目*/
int usedNum=0;/*當前已分配分區的數目*/

MMB *memIdle=NULL; /*指向將要插入分配分區鏈表的空閑分區*/
MMB *memUsed=NULL; /*指向將要插入空閑分區鏈表的已分配分區*/

int flag=1;/*標志分配是否成功,1:成功*/

/*函數聲明*/
void textcolor (int color);/*輸出著色*/
void InitMem();/*初始化函數*/
int GetUseSize(float miu,float sigma); /*獲得請求尺寸*/

MMB *SelectUsedMem(int n);/*選擇待釋放的塊*/

void AddToUsed();/*將申請到的空閑分區加到分配分區鏈表中*/
int RequestMemff(int usize); /*請求分配指定大小的內存,首次適應演算法*/
int RequestMemnf(int usize); /*請求分配指定大小的內存,循環首次適應演算法*/

void AddToIdle();/*將被釋放的分配分區加到空閑分區鏈表中(按地址大小)*/
void ReleaseMem(); /*釋放指定的分配內存塊*/

/*主函數*/
void main()
{
int sim_step;
float miu,sigma; /*使隨機生成的請求尺寸符合正態分布的參數*/
int i;
int a;

MMB *p;
/* double TotalStep=0,TotalSize=0,TotalRatio=0,TotalUSize=0,Ratio=0,n=0;
double aveStep=0,aveSize=0,aveRatio=0;
int step=0,usesize=0; */
textcolor(11);
printf("\n\t\t內存管理模擬程序\n\n");
/* InitMem();*/
while(true)
{
double TotalStep=0,TotalSize=0,TotalRatio=0,TotalUSize=0,Ratio=0,n=0;
double aveStep=0,aveSize=0,aveRatio=0;
int step=0,usesize=0;
InitMem();
textcolor(12);
printf("\n\n首次適應演算法: 0");
printf("\n循環首次適應演算法: 1\n");
textcolor(11);
printf("\n請選擇一種演算法:");
scanf("%d",&a);
textcolor(15);
printf("\n輸入一定數量的步數:(sim_step)");
scanf("%d",&sim_step);
printf("\n 輸入使隨機生成的請求尺寸符合正態分布的參數:miu,sigma ");
scanf("%f,%f",&miu,&sigma);
for(i=1;i<=sim_step;i++)
{
textcolor(10);
printf("\n\n#[%d]\n",i);
do{
usesize=GetUseSize(miu,sigma);
while((usesize<0)||(usesize>TotalMemSize))
{
usesize=GetUseSize(miu,sigma);
}
textcolor(13);
printf("\n\n申請的內存尺寸為:%d",usesize);
printf("\n此時可用的空閑分區有 %d 塊情況如下:",idleNum);
p=idleHead;
textcolor(15);
while(p!=NULL)
{
printf("\n始址:%d\t 尺寸:%d",p->stAddr,p->memSize);
p=p->next;
}
TotalSize+=usesize;
if(a==0)
step=RequestMemff(usesize);
else
step=RequestMemnf(usesize);
TotalStep+=step;
n++;
}while(flag==1);
p=usedHead;
while(p!=NULL)
{
TotalUSize+=p->memSize;
printf("\n始址:%d\t 尺寸:%d",p->stAddr,p->memSize);
p=p->next;
}
textcolor(11);
if(TotalUSize!=0)
{
Ratio=TotalUSize/TotalMemSize;
TotalUSize=0;
printf("\n內存利用率NO.%d :%f%c",i,100*Ratio,'%');
}
else
{
Ratio=0;
printf("\n內存利用率NO.%d :%c%c",i,'0','%');
}
TotalRatio+=Ratio;
ReleaseMem();
}
if(n!=0)
{
textcolor(10);
aveStep=TotalStep/n;
aveSize=TotalSize/n;
aveRatio=TotalRatio/sim_step;
printf("\n平均搜索步驟:%f",aveStep);
printf("\n平均請求尺寸:%f",aveSize);
printf("\n平均內存利用率:%f",aveRatio);
}
}
}
// 輸出著色 /////////////////////////////////////////
void textcolor (int color)
{
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), color );
}

/******************************
函數名:InitMem()
用途:把內存初始化為一整塊空閑塊
****************************************/
void InitMem()
{
MMB *p;
p=getpch(MMB);
p->memSize=TotalMemSize;
p->stAddr=0;
p->status=0;
p->next=NULL;
idleHead=p;
np=idleHead;
usedHead=NULL;
usedRear=NULL;
idleNum=1;
usedNum=0;
flag=1;
memIdle=NULL;
memUsed=NULL;

}

/******************************
函數名:GetUseSize(float miu,float sigma)
用途:獲得請求尺寸;
參數說明:float miu,float sigma :正態分布的參數
返回值:申請尺寸的大小;
****************************************************/
int GetUseSize(float miu,float sigma)
{
float r1,r2;
float u,v,w;
float x,y;
do
{
r1=rand()/32767.0;
r2=rand()/32767.0;

u=2*r1-1;
v=2*r2-1;

w=u*u+v*v;
}while(w>1);
x=u*sqrt(((-log(w))/w));
y=v*sqrt(((-log(w))/w));
return miu+sigma*x;
}

/******************************
函數名:*SelectUsedMem(int n)
用途:選擇待釋放的塊(0~n-1)
返回值:指向待釋放的塊的指針;
****************************************************/
MMB *SelectUsedMem(int n)
{
MMB *p;
int i,j;
if(n>0)
{
i = rand()%n ;
textcolor(5);
printf("\n\n當前已分配分區總數為:%d",n);
printf("\n待釋放塊的序號為:%d\n",i );
p=usedHead;
if(p!=NULL)
{
for(j=i;j>0;j--)
p=p->next;
return(p);
}
else
return(NULL);
}
else
{
printf("\n當前沒有可釋放的資源!\n");
}
}
/******************************
函數名:AddToUsed()
用途:將申請到的空閑分區加到分配分區鏈表中
***************************************************************/
void AddToUsed()
{
MMB *p;
memIdle->status=1;
if(usedHead==NULL)
{
usedHead=memIdle;
usedRear=usedHead;

}
else
{
usedRear->next=memIdle;
usedRear=memIdle;
}
usedNum++;
printf("\n當前分配分區共有%d塊!",usedNum);
p=usedHead;
while(p!=NULL)
{
printf("\n始址:%d \t 尺寸:%d",p->stAddr,p->memSize);
p=p->next;
}
}
/******************************
函數名:RequestMemff(int usize)
參數說明:usize:請求尺寸的大小;
用途:請求分配指定大小的內存,首次適應演算法
返回值:搜索步驟
***************************************************************/
int RequestMemff(int usize)
{
MMB *p1,*p2,*s;
int step;
int suc=0;
int size1,size2;

if(idleHead==NULL)
{
flag=0;
textcolor(12);
printf("\n分配失敗!");
return 0;
}
else
{
if((idleHead->memSize)>usize)
{
size1=(idleHead->memSize)-usize;
if(size1<=MinSize)
{
memIdle=idleHead;

idleHead=idleHead->next;
memIdle->next=NULL;
idleNum--;
}
else
{
s=getpch(MMB);
s->memSize=usize;
s->stAddr=idleHead->stAddr;
s->status=1;
s->next=NULL;
memIdle=s;

idleHead->memSize=idleHead->memSize-usize;
idleHead->stAddr=idleHead->stAddr+usize;
}
step=1;
flag=1;
textcolor(12);
printf("\n分配成功!");
AddToUsed();

}
else
{
p1=idleHead;
step=1;
p2=p1->next;
while(p2!=NULL)
{
if((p2->memSize)>usize)
{
size2=(p2->memSize)-usize;
if(size2<=MinSize)
{
p1->next=p2->next;
memIdle=p2;
memIdle->next=NULL;
idleNum--;

}
else
{
s=getpch(MMB);
s->memSize=usize;
s->stAddr=p2->stAddr;
s->status=1;
s->next=NULL;
memIdle=s;
p2->memSize=p2->memSize-usize;
p2->stAddr=p2->stAddr+usize;

}
flag=1;
suc=1;
textcolor(12);
printf("\n分配成功!");
AddToUsed();
p2=NULL;
}
else
{
p1=p1->next;
p2=p2->next;
step++;
}
}
if(suc==0)
{
flag=0;
textcolor(12);
printf("\n分配失敗!");
}
}
}
return step;
}

/******************************
函數名:AddToIdle()
用途:將被釋放的分配分區加到空閑分區鏈表中(按地址遞增順序排列)
***************************************************************/
void AddToIdle()
{
MMB *p1,*p2;
int insert=0;
if((idleHead==NULL))
{
idleHead=memUsed;
idleNum++;
np=idleHead;
}
else
{
int Add=(memUsed->stAddr)+(memUsed->memSize);
if((memUsed->stAddr<idleHead->stAddr)&&(Add!=idleHead->stAddr))
{
memUsed->next=idleHead;
idleHead=memUsed;
idleNum++;
}
else
{

if((memUsed->stAddr<idleHead->stAddr)&&(Add==idleHead->stAddr))
{
idleHead->stAddr=memUsed->stAddr;
idleHead->memSize+=memUsed->memSize;

}
else
{
p1=idleHead;
p2=p1->next;
while(p2!=NULL)
{
if(memUsed->stAddr>p2->stAddr)
{
p1=p1->next;
p2=p2->next;
}
else
{
int Add1=p1->stAddr+p1->memSize;
int Add2=p2->stAddr-memUsed->memSize;
if((Add1==memUsed->stAddr)&&(memUsed->stAddr!=Add2))
{
p1->memSize=p1->memSize+memUsed->memSize;
}
if((Add1!=memUsed->stAddr)&&(memUsed->stAddr==Add2))
{
p2->memSize=p2->memSize+memUsed->memSize;
p2->stAddr=memUsed->stAddr;
}
if((Add1!=memUsed->stAddr)&&(memUsed->stAddr!=Add2))
{
memUsed->next=p2;
p1->next=memUsed;
if(np->stAddr==p2->stAddr)
np=p1->next;
idleNum++;
}
if((Add1==memUsed->stAddr)&&(memUsed->stAddr==Add2))
{
p1->memSize=p1->memSize+memUsed->memSize+p2->memSize;
p1->next=p2->next;
if((np->stAddr)==(p2->stAddr))
np=p1;
idleNum--;
}
p2=NULL;
insert=1;
}
}
if(insert==0)
{
p1->next=memUsed;
idleNum++;
}
}
}
}
}

/******************************
函數名:ReleaseMem()
用途:釋放指定的分配內存塊
***************************************************************/
void ReleaseMem()
{
MMB *q1,*q2;
MMB *s;
if(usedNum==0)
{
printf("\n當前沒有分配分區!");
return;
}
else
{
s=SelectUsedMem(usedNum);
if(s!=NULL)
{

if(s->stAddr==usedHead->stAddr)
{
memUsed=usedHead;
usedHead=usedHead->next;
memUsed->next=NULL;
AddToIdle();
usedNum--;
}
else
{
q1=usedHead;
q2=q1->next;
while(q2!=NULL)
{
if(q2->stAddr!=s->stAddr)
{
q1=q1->next;
q2=q2->next;
}
else
{
q1->next=q2->next;
memUsed=q2;
memUsed->next=NULL;
if(q1->next==NULL)
usedRear=q1;
AddToIdle();
usedNum--;
q2=NULL;
}
}
}
}
}
}

/******************************
函數名:RequestMemnf(int usize)
參數說明:usize:請求尺寸的大小;
用途:請求分配指定大小的內存,循環首次適應演算法
返回值:搜索步驟
***************************************************************/
int RequestMemnf(int usize)
{
MMB *p2,*p,*s;
int step;
int iNum=0;
int suc=0;
int size1,size2,size3;

if(idleHead==NULL)
{
flag=0;
printf("\n分配失敗!");
return 0;
}
else
{
iNum=idleNum;
while(iNum>0)
{
iNum--;
if((np->memSize)>usize)
{
/*指針指向的空閑塊滿足條件,且正好為頭指針*/
if(np->stAddr==idleHead->stAddr)
{
size1=(idleHead->memSize)-usize;
if(size1<=MinSize)
{
memIdle=idleHead;
idleHead=idleHead->next;
memIdle->next=NULL;
idleNum--;
}
else
{
s=getpch(MMB);
s->memSize=usize;
s->stAddr=idleHead->stAddr;
s->status=1;
s->next=NULL;
memIdle=s;
idleHead->memSize=idleHead->memSize-usize;
idleHead->stAddr=idleHead->stAddr+usize;
}
if((idleHead==NULL)||(idleHead->next==NULL))
np=idleHead;
else
np=idleHead->next;

}
else/*指針指向的空閑塊滿足條件,不為頭指針*/
{
size2=(np->memSize)-usize;
if(size2<=MinSize) /*從空閑鏈表中刪除*/
{
p=idleHead;
while(p->next->stAddr!=np->stAddr)
p=p->next;
p->next=np->next;
memIdle=np;
memIdle->next=NULL;
np=p;
idleNum--;
}
else
{
s=getpch(MMB);
s->memSize=usize;
s->stAddr=np->stAddr;
s->status=1;
s->next=NULL;
memIdle=s;

np->memSize=np->memSize-usize;
np->stAddr=np->stAddr+usize;
}
if(np->next==NULL)
np=idleHead;
else
np=np->next;
}
step=1;
flag=1;
suc=1;
textcolor(12);
printf("\n分配成功!");
AddToUsed();
iNum=0;
}
else /*當前指針指向的空閑區不滿足條件*/
{
step=1;
p2=np->next;
if(p2==NULL)
{
np=idleHead;
iNum--;
}
else
{
if((p2->memSize)>usize)
{
size3=(p2->memSize)-usize;
if(size3<=MinSize)
{
np->next=p2->next;
memIdle=p2;
memIdle->next=NULL;
idleNum--;
}
else
{
s=getpch(MMB);
s->memSize=usize;
s->stAddr=p2->stAddr;
s->status=1;
s->next=NULL;
memIdle=s;
p2->memSize=p2->memSize-usize;
p2->stAddr=p2->stAddr+usize;
}
flag=1;
suc=1;
printf("\n分配成功!");
AddToUsed();
if(p2->next==NULL)
np=idleHead;
else
np=p2->next;
p2=NULL;
iNum=0;
}
else
{
np=np->next;
p2=p2->next;
iNum--;
step++;
}
}
}
// iNum--;
}
if(suc==0)
{
flag=0;
textcolor(12);
printf("\n分配失敗!");
}
}
return step;
}

『貳』 excel循環演算法實現

L1輸入公式:=m1*k1

『叄』 while和for循環的演算法時間分析

(1)while語句先計算表達式值,根據表達式的值決定是否執行循環體中的語句。表達式的值一開始就為「假」,那麼循環體一次也不執行。 (2)當循環體為多個語句組成,必須用{}括起來,形成復合語句。 (3)在循環體中應有使循環趨於結束的語句,以避免「死循環」的發生。 (4)累乘單元初值為1,累加求和單元初值為0

『肆』 關於c++的循環或遞歸演算法

循環:
int cnt = 0;
while(n)
{
cnt++;
n /= 10;
}
return cnt;

遞歸:
if(n>0)
return num(n/10)+1;
else
return 0;

『伍』 什麼是最優適應分配演算法

分區分配演算法(Partitioning Placement Algorithm) ,共有3種。分別為最佳適應演算法、首次適應演算法、循環首次適應演算法。

1、最佳適應演算法(Best Fit):
它從全部空閑區中找出能滿足作業要求的、且大小最小的空閑分區,這種方法能使碎片盡量小。為適應此演算法,空閑分區表(空閑區鏈)中的空閑分區要按大小從小到大進行排序,自表頭開始查找到第一個滿足要求的自由分區分配。該演算法保留大的空閑區,但造成許多小的空閑區。

2、首次適應演算法(First Fit):
從空閑分區表的第一個表目起查找該表,把最先能夠滿足要求的空閑區分配給作業,這種方法目的在於減少查找時間。為適應這種演算法,空閑分區表(空閑區鏈)中的空閑分區要按地址由低到高進行排序。該演算法優先使用低址部分空閑區,在低址空間造成許多小的空閑區,在高地址空間保留大的空閑區。

3、循環首次適應演算法(Next Fit):
該演算法是首次適應演算法的變種。在分配內存空間時,不再每次從表頭(鏈首)開始查找,而是從上次找到空閑區的下一個空閑開始查找,直到找到第一個能滿足要求的的空閑區為止,並從中劃出一塊與請求大小相等的內存空間分配給作業。該演算法能使內存中的空閑區分布得較均勻。

『陸』 如何用循環演算法來分割一個圖像比如一個256*256的圖像,分成大小為4*4的若干塊,用循環來做(MATLAB語言

a=imread(『d:\\文件名』);
for i=1:64;
for j=1:64;
b(i,j)=a(i,j);
end
end

『柒』 利用兩種循環寫出1+2+3+…+100的演算法,並畫出各自的流程圖.

直到型循環演算法:
第一步:S←0;
第二步:I←1;
第三步:S←S+I;
第四步:I←I+1;
第五步:如果I不大於100,轉第三步;否則,輸出S.
相應的流程圖如圖甲所示.

當型循環演算法如下:
S1令i←1,S←0
S2若i≤100成立,則執行S3;否則,輸出S,結束演算法
S3 S←S+i
S4 i←i+1,返回S2
相應的流程圖如圖乙所示.

『捌』 在動態分區分配方式中,可利用哪些分區分配演算法

動態分區分配演算法:
1.首次適應演算法(FF/first fit)
2.循環首次適應演算法(next fit)
3.最佳適應演算法(best fit)
從最小的分區開始分配
4.最壞適應演算法(worst fit)
從最大的分區開始分配
5.快速適應演算法/分類搜索法(quick fit)
將空閑分區根據其容量的大小進行分類

『玖』 求助:簡述可變分區存儲管理系統中採用循環首次適應法的分配演算法的思想

首次適應法:
即第一次適應。比如有空閑區按順序如下:
10KB, 20KB, 5KB, 40KB.
如果進程需要15KB的空間,那麼會從第一塊開始匹配,符合空間大小的只有20KB, 40KB,但是由於是首次適應,20KB在40KB前面,故選擇20KB

『拾』 循環首次適應演算法實現可變分區的分配和回收,急

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define getpch(type) (type*)malloc(sizeof(type))
/*/#define NULL 0*/

struct table
{
char name[10];
char state; /* D(分配) or N(空閑)*/
int size; /*分區大小*/
int addr; /*起始地址*/
struct table *next;
struct table *prev;
}*tab=NULL,*p,*current; /*current表示檢索的起始位置*/
typedef struct table TABLE;

UI()
{
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" 循環首次適應演算法 \n");
printf(" \n");
printf(" \n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
}

recycle(char n[10])
{
TABLE *pr=NULL;
for(pr=tab;pr!=NULL;pr=pr->next)
{
if(!strcmp(pr->name,n)&&pr->state=='D')
{
if(pr->prev!=NULL&&pr->prev->state=='N') /*回收區的前一分區空閑*/
{
if(pr->next->state=='N') /*回收區的前後分區都空閑*/
{
pr->state='N';
pr->prev->size+=(pr->size+pr->next->size); /*合並分區大小*/
pr->prev->next=pr->next->next; /*刪除回收分區及其後一空閑分區表項*/
if(pr->next->next!=NULL)
pr->next->next->prev=pr->prev;
return 0;
}/*if*/
else /*回收區的前一個分區空閑,合並兩者*/
{
pr->state='N';
pr->prev->size+=pr->size;
pr->next->prev=pr->prev;
pr->prev->next=pr->next;
return 0;
}/*else*/
}/*if*/

/*回收區的後一個分區空閑,合並兩者*/
else if(pr->next!=NULL&&pr->next->state=='N')
{
pr->state='N';
pr->size+=pr->next->size;
if(pr->next->next!=NULL)
{
pr->next->next->prev=pr;
pr->next=pr->next->next;
}
else pr->next=NULL;
return 0;
}/* else if */
}/*if*/
}/*for*/
if(pr==NULL) printf("錯誤!此分區不存在或未分配作業或前後分區都不空閑!\n");
else printf("分區%s回收完畢!\n",pr->name);
return 0;
}/*recycle*/
allocate(int s)
{
TABLE *pt=NULL,*q,*t;
if(tab->next==NULL) current=tab;
t=current->prev;
for(pt=current;pt!=NULL;pt=pt->next)
{
if(pt->size>=s&&pt->state=='N') /*首個合適分區*/
{
pt->state='D';
if(pt->size>s) /*分區大小大於作業大小,分割分區;相等則不分*/
{
q=getpch(TABLE);
printf("請輸入分割出的分區ID:\n");
scanf("%s",q->name);
q->size=pt->size-s; /*分割分區*/
pt->size-=q->size;
q->state='N';
q->addr=pt->addr+pt->size; /*新增分區的起始地址*/
if(pt->next!=NULL)
{
pt->next->prev=q; /*在空閑鏈中插入新的分區*/
q->next=pt->next;
pt->next=q;
q->prev=pt;
current=pt->next; /*設置起始查找位置*/
return 0;
}
pt->next=q;
q->prev=pt;
q->next=NULL;
}
current=pt->next;
return 0;
}/*if*/
}/*for*/
/*從起始位置往後查找不到合適的分區,返回空閑鏈頭*/
for(pt=tab;pt!=current&&pt!=NULL;pt=pt->next)
{
if(pt->size>=s&&pt->state=='N')
{
pt->state='D';
if(pt->size>s)
{
q=getpch(TABLE);
printf("請輸入分割出的分區ID:\n");
scanf("%s",q->name);
q->size=pt->size-s; /*分割分區*/
pt->size-=q->size;
q->state='N';
q->addr=pt->addr+pt->size;
if(pt->next!=NULL)
{
pt->next->prev=q; /*在空閑鏈中插入新的分區*/
q->next=pt->next;
pt->next=q;
q->prev=pt;
current=pt->next;
return 0;
}
pt->next=q;
q->prev=pt;
q->next=NULL;
}
current=pt->next;
return 0;
}/*if*/
}
printf("沒有合適的分區,此次分配失敗!\n");
return 0;
}/*allocate*/
display()
{
TABLE *pt=tab;
if(pt==NULL) return 0;
printf("---------空閑分區情況---------\n");
printf("ID\t狀態\t大小\t起始地址\n");
while(pt!=NULL)
{
printf("%2s\t%3c\t%3d\t%5d\n",pt->name,pt->state,pt->size,pt->addr);
pt=pt->next;
}
return 0;
}/*disptable*/

sort() /*分區按升序排列*/
{
TABLE *first, *second;
if(tab==NULL)
{
p->next=tab;
tab=p;
tab->prev=NULL;
}
else
{
first=tab;
second=first->next;
while(second!=NULL)
{
first=first->next;
second=second->next;
}
first->next=p;
}
}/*sorttable*/

InitTab()
{
int num;
int i,paddr=0;
TABLE *pn; /*指向前一結點*/
pn=NULL;
printf("\t-------Initialize table-------\n\n");
printf("請輸入分區個數:\n");
scanf("%d",&num);
for(i=0;i<num;i++)
{
p=getpch(TABLE);
printf("輸入分區NO.%d的ID:\n",i);
scanf("%s",p->name);
p->state='N';
printf("輸入分區大小:\n");
scanf("%d",&p->size);
p->addr=paddr;
paddr=p->addr+p->size;
p->prev=pn;
pn=p;
p->next=NULL;
sort(); /* 按分區起始地址排序*/
}

}/*InitTab*/

main()
{
int ch=1;
int size;
char name[10],c='y';
UI();
InitTab();
current=tab;
system("cls");
UI();
display();
getch();
while(c!='n'&&c!='N')
{
system("cls");
UI();
printf("選擇你要進行的操作\n1--分配作業\n2--回收分區\n0/其他--退出\n\n");
scanf("%d",&ch);
system("cls");
switch(ch)
{
case 1:
UI();
display();
printf("請輸入作業大小:\n");
scanf("%d",&size);
allocate(size);
break;
case 2:
UI();
display();
printf("請輸入待回收分區的ID:\n");
scanf("%s",name);
recycle(name);
break;
case 0:
default :exit(0);
}
display();
printf("是否繼續?y/n\n");
c=getch();
system("cls");
}

}

熱點內容
電腦登陸加密 發布:2025-01-16 05:21:57 瀏覽:151
安卓怎麼修復閃退 發布:2025-01-16 05:21:54 瀏覽:553
易盾加密 發布:2025-01-16 05:20:51 瀏覽:893
html上傳圖片的代碼 發布:2025-01-16 05:16:55 瀏覽:600
搭建伺服器租用電信的怎麼樣 發布:2025-01-16 05:12:32 瀏覽:49
phpmysql源碼下載 發布:2025-01-16 05:12:31 瀏覽:210
python安裝依賴包 發布:2025-01-16 05:11:45 瀏覽:996
澳門雲主機品牌伺服器 發布:2025-01-16 05:06:55 瀏覽:768
資料庫設計主要內容 發布:2025-01-16 05:02:02 瀏覽:12
存儲過程如何修改 發布:2025-01-16 05:01:55 瀏覽:633