页面调度

百度机试题

[编程题] 页面调度算法

在计算机中,页式虚拟存储器实现的一个难点是设计页面调度(置换)算法。其中一种实现方式是FIFO算法。
FIFO算法根据页面进入内存的时间先后选择淘汰页面,先进入内存的页面先淘汰,后进入内存的后淘汰。
假设Cache的大小为2,有5个页面请求,分别为 2 1 2 3 1,则Cache的状态转换为:(2)->(2,1)->(2,1)->(1,3)->(1,3),其中第1,2,4次缺页,总缺页次数为3。
现在给出Cache的大小n和m个页面请求,请算出缺页数。


输入描述:

输入包含多组测试数据。
对于每组测试数据,第一行是整数n,第二行是整数m。
然后有m个整数,代表请求页编号。
保证:
2<=n<=20,1<=m<=100,1<=页编号<=200.



输出描述:

对于每组数据,输出一个整数,代表缺页数


输入例子:
  2
  5
  2
  1
  2
  3
  1
  

输出例子:
  3
#include<iostream>
#include<set>
#include<queue>
using namespace std;
int main(){
    int size;
    while (cin >> size){
        set<int> s;
        queue<int> q;
        int m;
        cin >> m;
        int miss = 0;
        for (int i = 0; i<m; ++i){
            int page;
            cin >> page;
            if (s.find(page) == s.end()){//如果缺页
                miss++;//缺页次数
                if (s.size()<size){//如果内存没有满
                    s.insert(page);//插入该页面到set
                    q.push(page);//插入该页面到queue
                }
                else{//如果内存已满
                    s.insert(page);//插入该页面到set
                    q.push(page);//插入该页面到queue
                    int ele = q.front();
                    s.erase(ele);//从set中删除队头页面
                    q.pop();//从queue中弹出队头页面
                }
            }
        }
        cout << miss << endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/learning-c/p/5722492.html