![](https://csdnimg.cn/release/download_crawler_static/87606132/bg4.jpg)
return INT_MAX;
}
void OPT(char *PageStr,int Phy_PageNum){ //实际中无法实现,知道访问串后顺序遍
历
char *Temp=PageStr; //定义 Temp 指针指向 PageStr 首地址
int i,num,Size,location,absence=0;
int Flag=0; //定义一个标记变量,标记插入位置
while(*Temp!=’\0'){ //页面未访问完
num=0;
if(Flag〈Phy_PageNum){ //若物理内存未满
if(!IsExist(Temp,Flag)){ //若此页面未被访问
(Phy_Page+Flag)—〉Page=*Temp;
Flag++;absence++;
}
}
else{ //若物理内存已满
if(!IsExist(Temp,Phy_PageNum)){ //若此页面未被访问
for(i=0;i〈Flag;i++){ //淘汰在访问串中将来再也不会出现的
或离当前最远的位置上出现的页
Size=Distance(PageStr,Temp,(Phy_Page+i)-〉Page); //调用
distance 函数返回值为与当前位置物理页面相同页号的距离
if(num<Size){
location=i;num=Size;
}
}
(Phy_Page+location)—〉Page=*Temp;absence++;
}
}
for(i=0;i<Flag;i++) //将当前物理内存数组列放入二维数组中
*(OutPut+i*strlen(PageStr)+(Temp—PageStr))=(Phy_Page+i)->Page;
Temp++;
}
Print(PageStr,Phy_PageNum,absence);
}
char *Create(char *PageStr){ //根据访问串建立计数字符数组(LFU 算法使用)
int i,j,Size,Num=0;
char *Temp1,*Temp2;
int length=strlen(PageStr);
char *NowPage=(char *)malloc(length);
for(i=0;i<length;i++) *( NowPage + i ) = *( PageStr + i );
Temp1 = Temp2 = NowPage;
while((Temp1—NowPage)<=length+1){ //去除访问串中重复串
if(*Temp1!=’\0’){
for(Temp2=Temp1+1;(Temp2-NowPage)〈=length+1;Temp2++){