OPT算法核心代码

int en_queue_2(QUEUE *pQ, char *str) //入队前判断队列是否已满
{
int tmp = 0,s_tmp = 0,i,j;

int rv[100],sum[100];
int m = strlen(str);
// int m = len - 1;
int k = -1;
int jude = -100;//便于之后排序定义的临时变量
int MAX = 1024;
for (i = 0; i < m ; i++)
{
rv[i] = str[i] - '0';
}
for (i = 0; i < len; i++)
{
for (j = count; j < m; j++)
{
if (pQ->pBase[i] == rv[j])
{
k = k + 1;
jude = k;
sum[k] = j - i;//记录队列中每个元素与带入队一系列匹配元素的距离
break;
}
}
if (jude != k)
{
k = k + 1;
sum[k] = MAX--;//如果队列中元素未匹配即将入队的其他元素则把记录该元素的距离置为比较大的一个数
}
jude = -100;//重新置为-100
}
count = count + 1;//全局变量加1,便于下一次移动整个页面走向
//
for (i = 0; i < len; i++)
{
for (j = i + 1; j < len; j++)
{
if (sum[i] < sum[j])//根据上述计算出来距离来对队列中元素进行降序排序
{
s_tmp = sum[i];
sum[i] = sum[j];
sum[j] = s_tmp;
tmp = pQ->pBase[i];
pQ->pBase[i] = pQ->pBase[j];
pQ->pBase[j] = tmp;
}
}
}
return 1;

}


int empty_queue(QUEUE *pQ)
{
int N = len + 1;
if (pQ->front == pQ->rear)
return 1;
else
return 0;
}


int out_queue(QUEUE *pQ, int *pVal)//出队前判断队列是否为空
{
int m = len - 1;
int i = 0;
if (empty_queue(pQ))
{
return 0;
}


*pVal = pQ->pBase[0]; //把出队的元素保存起来,此时固定每次都是出队首元素
// int m = len - 1;
for (i = 0; i < m; i++)
{
pQ->pBase[i] = pQ->pBase[i + 1];//队列中元素前移
}
return 1;
}


int in_queue(QUEUE *pQ, int val)
{
int m = pQ->rear - 1;
pQ->pBase[m] = val; //队列中元素被替换,根据主函数的判断此时m值固定
return 1;
}






本实验使用一下算法 使用rand()函数随机产生页面号,用数组装入页面号,模拟页面调入内存中发生页面置换的过程。 整个过程,都是使用数组来实现每个算法,模拟队列,模拟堆栈的功能,实现每一个置换算法页面置换算法 最佳置换算法OPT):选择永不使用或是在最长时间内不再被访问(即距现在最长时间才会被访问)的页面淘汰出内存。用于算法评价参照。 随机置换算法 (S):产生一个取值范围在0和N-1之间的随机数,该随机数即可表示应被淘汰出内存的页面。 先进先出置换算法(FIFO):选择最先进入内存即在内存驻留时间最久的页面换出到外存。 最近最久未使用置换算法(LRU): 以“最近的过去”作为“最近的将来”的近似,选择最近一段时间最长时间未被访问的页面淘汰出内存 Clock置换算法:为进入内存的页面设置一个访问位,当内存中某页被访问,访问位置一,算法在选择一页淘汰时,只需检查访问位,若为0,则直接换出,若为1,置该访问位为0,检测内存中的下一个页面的访问位。 改进型Clock置换算法: ①从查寻指针当前位置起扫描内存分页循环队列,选择A=0且M=0的第一个页面淘汰;若未找到,转② ② 开始第二轮扫描,选择A=0且M=1的第一个页面淘汰,同时将经过的所有页面访问位置0;若不能找到,转①
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值