FIFO页面置换

FIFO页面置换


问题实现先进先出的缓存模拟,数n表示缓存的大小,数组arr[]表示将要进入缓存的页面,数len表示数组的长度,计算未命中数。如果缓存已满则将存在时间最长的页面淘汰。初时,内存为0
(原题说的相当复杂,其实就是上面的这个意思)
例如
2 6
1 2 1 3 1 2

内存页面未命中
0 01yes
1 02yes
2 11no
2 13yes
3 21yes
1 32yes

所以命中数为5.

  • 代码一:当时就想用数组,没治了
void Fun(int n, int arrQ[], int len)
{
    int * arr = new int[n];
    int countNum = 0;
    bool falg = false;
    memset(arr, 0, n*sizeof(arr));
    for (int i = 0; i < len; i++)
    {
        falg = Find(arrQ, arr, i, n);
        if (falg == false)
        {
            countNum++;
            ChangeArr(arr, n, arrQ, i);
        }
    }
    cout << countNum << endl;
}
bool Find(int arrQ[], int arr[], int i, int n)
{
    for (int j = 0; j < n; j++)
    {
        if (arrQ[i] == arr[j])
            return true;
    }
    return false;
}
void ChangeArr(int arr[], int n,int arrQ[],int ji)
{

    for (int i = n - 1; i > 0; i--)
    {
        arr[i] = arr[i - 1];
    }
    arr[0] = arrQ[ji];
}
  • 代码二:

int Fun(int n,int arrQ[],int len)
{
    list<int > lis;
    list <int>::iterator it;
    int countNum = 0;
    lis.push_back(0);
    it = lis.begin();
    for (int i = 0; i < len; i++)
    {
        it = find(lis.begin(), lis.end(), arrQ[i]);
        if (it == lis.end())
        {
            countNum++;
            lis.push_back(arrQ[i]);
            if (lis.size() > n)
            {
                lis.pop_front();
            }   
        }
    }
    return countNum;
}

其实仔细想想都很简单,下次一定好好审题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值