百度2016笔试题第一题:页面请求失败值

缓存替换策略实现
本文介绍了一种简单的缓存替换策略实现方法,当缓存未满时直接将新请求页面加入缓存,若缓存已满则替换最早的页面,并计算了整个过程中请求失败的次数。

题目简单描述:对于一个大小为max_cache_size的缓存,有请求页面page_request,大小为len。

当缓存没满时,在缓存中查看是否有请求的页面,如果没有,则将页面加入缓存,失败值+1;

当缓存已满,在缓存中查看是否有请求的页面,如果没有,则将最先加入缓存页面清除,然后将新页面加入缓存,失败值加一。

#include <iostream>
using namespace std;

int countCacheMiss(int max_cache_size, int *page_requests, int len)
{
	// WRITE YOUR CODE HERE
	int count = 0;//请求失败值
	int *cache = new int[max_cache_size];
	for (int i=0;i<max_cache_size;i++)
		cache[i] = -1;//缓存初始值都为-1
	cache[0] = page_requests[0];//第一个直接进
	count++;
	bool flag = false;//缓存中是否有该请求页
	int i;//记录page_requests位置
	for(i=1;count<max_cache_size;i++)//cache还没满
	{
		for(int j=1;j<max_cache_size;j++)
		{
			if(page_requests[i]==cache[j])
			{
				flag = true;
				break;
			}
		}
		if(!flag)//缓存中没有该请求页,直接加入缓存
		{
			cache[count] = page_requests[i];
			count++;
		}
		flag = false;
	}
	for(int m=i;m<len;m++)//cache已满
	{
		for(int j=0;j<max_cache_size;j++)//逐一比较
		{
			if(page_requests[m]==cache[j])
			{
				flag = true;
				break;
			}
		}
		if(!flag)
		{
			for(int n=0;n<max_cache_size-1;n++)//除了最后一个位置,其他位置前移
				cache[n] = cache[n+1];
			cache[max_cache_size-1] =  page_requests[m];//新来的页面放在最后一个位置
			count++;
		}
		flag = false;//注意flag位置!
	}
	delete []cache;
	return count;
}
int main()
{
	int maxsize;
	cout<<"请输入缓存最大值: ";
	cin>>maxsize;
	int len;
	cout<<"请输入页面请求个数 :";
	cin>>len;
	int *array = new int[len];
	cout<<"请输入要请求的页面 :";
	for (int i=0;i<len;i++)
		cin>>array[i];
	cout<<"请求失败值为:"<<countCacheMiss(maxsize,array,len)<<endl;;
	system("pause");
	return 0;
}

  

转载于:https://www.cnblogs.com/keleshaoye/p/5420355.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值