请为我将下面代码详细注释#include <iostream> #include<deque> #include<algorithm> using namespace std; struct opt { int value; int time; }; void fifo() { deque<int> dq; deque<int>::iterator pos; int numyk,numqueye=0; printf("请输入物理页框个数:"); scanf("%d",&numyk); int n; printf("请输入要访问页面的页面总数:"); scanf("%d",&n); printf("\n请输入页面访问顺序:"); for(int i=0;i<n;i++) { int in; scanf("%d",&in); if(dq.size()<numyk) { int flag=0; for(pos =dq.begin();pos!=dq.end();pos++) if((*pos)==in) { flag=1; break; } if(!flag) { numqueye++; dq.push_back(in); } } else { int flag=0; for(pos=dq.begin();pos!=dq.end();pos++) if((pos)==in) { flag=1; break; } if(!flag) { numqueye++; dq.pop_front(); dq.push_back(in); } } } printf("FIFO缺页次数为:%d\n",numqueye); printf("FIFO缺页率为:%1f\n",(double)numqueye1.0/n); } void lru() { deque<opt> dq; deque<opt>::iterator pos; const int maxn=100; int a[maxn]; int numyk,numqueye=0; printf("请输入物理页框个数:"); scanf("%d",&numyk); int n; printf("请输入要访问的页面总数:"); scanf("%d",&n); printf("请输入页面访问顺序:"); for(int i=0;i<n;i++) scanf("%d",&a[i]); opt temp={0,0}; for(int i=0;i<n;i++) { int in; in=a[i]; if(dq.size()<numyk) { int flag=0; for(pos = dq.begin();pos!=dq.end();pos++) { (*pos).time++; if((*pos).value==in) { flag=1; (*pos).time=0; } } if(!flag) { numqueye++; temp.value=in; dq.push_back(temp); temp.time=0; } } else { int flag=0; for(pos=dq.begin();pos!=dq.end();pos++) { (*pos).time++; if((*pos).value==in) { flag=1; (*pos).time=0; } } if(!flag) { numqueye++; for(pos=dq.begin();pos!=dq.end();pos++) { (*pos).time++; } int m=dq.front().time; deque<opt>::iterator mp=dq.begin(); for(pos = dq.begin();pos!=dq.end();pos++) { if((*pos).time>m) { m=(pos).time; } } dq.erase(mp); temp.value=in; dq.push_back(temp); temp.time=0; } } } printf("LRU缺页次数为:%d\n",numqueye); printf("LRU缺页率为:%1f\n,",(double)numqueye1.0/n); } int main() { cout << "模拟页面淘汰算法计算缺页次数与缺页率" << endl; int choice; do { cout<<"1.FIFIO算法"<<endl; cout<<"2.LRU算法"<<endl; cout<<"0.退出"<<endl; cout<<"请选择"<<endl; cin>>choice; switch(choice) { case 1: fifo(); break; case 2: lru(); break; case 0: exit(0); default: cout<<"输入有误,程序结束!"<<endl; } }while(true); }
时间: 2023-12-10 20:02:58 浏览: 85
#include <iostream> #include<iomanip> using namespace std;九九乘法表
好的,下面是对这段代码的注释:
```c++
#include <iostream>
#include <deque> // deque(双端队列)头文件
#include <algorithm> // 算法库头文件
using namespace std;
struct opt { // 创建一个结构体(用于存储页面访问情况)
int value; // 页码
int time; // 时间(用于LRU算法)
};
void fifo() { // FIFO算法
deque<int> dq; // 定义一个双端队列,用于存储页面帧
deque<int>::iterator pos; // 定义迭代器,用于遍历双端队列
int numyk, numqueye = 0; // numyk:物理页框个数;numqueye:缺页次数
printf("请输入物理页框个数:"); // 提示用户输入物理页框个数
scanf("%d", &numyk); // 获取输入
int n; // n:要访问页面的页面总数
printf("请输入要访问页面的页面总数:"); // 提示用户输入页面总数
scanf("%d", &n); // 获取输入
printf("\n请输入页面访问顺序:"); // 提示用户输入页面访问顺序
for(int i = 0; i < n; i++) { // 输入每个页面的序号
int in;
scanf("%d", &in);
if(dq.size() < numyk) { // 如果队列未满
int flag = 0; // 标记是否有相同页面
for(pos = dq.begin(); pos != dq.end(); pos++) // 遍历双端队列
if((*pos) == in) { // 如果存在相同页面
flag = 1; // 标记为存在相同页面
break; // 退出循环
}
if(!flag) { // 如果不存在相同页面
numqueye++; // 缺页次数+1
dq.push_back(in); // 将该页面加入队列尾部
}
} else { // 如果队列已满
int flag = 0; // 标记是否有相同页面
for(pos = dq.begin(); pos != dq.end(); pos++) // 遍历双端队列
if((pos) == in) { // 如果存在相同页面
flag = 1; // 标记为存在相同页面
break; // 退出循环
}
if(!flag) { // 如果不存在相同页面
numqueye++; // 缺页次数+1
dq.pop_front(); // 将队列头部元素弹出
dq.push_back(in); // 将该页面加入队列尾部
}
}
}
printf("FIFO缺页次数为:%d\n", numqueye); // 输出FIFO算法缺页次数
printf("FIFO缺页率为:%1f\n", (double)numqueye/1.0/n); // 输出FIFO算法缺页率
}
void lru() { // LRU算法
deque<opt> dq; // 定义一个双端队列,用于存储页面帧
deque<opt>::iterator pos; // 定义迭代器,用于遍历双端队列
const int maxn = 100; // 定义最大页面数
int a[maxn]; // 定义一个数组,用于存储页面序号
int numyk, numqueye = 0; // numyk:物理页框个数;numqueye:缺页次数
printf("请输入物理页框个数:"); // 提示用户输入物理页框个数
scanf("%d", &numyk); // 获取输入
int n; // n:要访问页面的页面总数
printf("请输入要访问的页面总数:"); // 提示用户输入页面总数
scanf("%d", &n); // 获取输入
printf("请输入页面访问顺序:"); // 提示用户输入页面访问顺序
for(int i = 0; i < n; i++) // 输入每个页面的序号
scanf("%d", &a[i]);
opt temp = {0, 0}; // 定义一个结构体,用于存储页面访问情况
for(int i = 0; i < n; i++) { // 遍历页面序列
int in;
in = a[i]; // 获取当前页面序号
if(dq.size() < numyk) { // 如果队列未满
int flag = 0; // 标记是否有相同页面
for(pos = dq.begin(); pos != dq.end(); pos++) { // 遍历双端队列
(*pos).time++; // 时间+1
if((*pos).value == in) { // 如果存在相同页面
flag = 1; // 标记为存在相同页面
(*pos).time = 0; // 时间重置为0
}
}
if(!flag) { // 如果不存在相同页面
numqueye++; // 缺页次数+1
temp.value = in; // 存储当前页面
dq.push_back(temp); // 将该页面加入队列尾部
temp.time = 0; // 时间重置为0
}
} else { // 如果队列已满
int flag = 0; // 标记是否有相同页面
for(pos = dq.begin(); pos != dq.end(); pos++) { // 遍历双端队列
(*pos).time++; // 时间+1
if((*pos).value == in) { // 如果存在相同页面
flag = 1; // 标记为存在相同页面
(*pos).time = 0; // 时间重置为0
}
}
if(!flag) { // 如果不存在相同页面
numqueye++; // 缺页次数+1
for(pos = dq.begin(); pos != dq.end(); pos++) // 遍历双端队列
(*pos).time++; // 时间+1
int m = dq.front().time; // 存储队列头部元素的时间
deque<opt>::iterator mp = dq.begin(); // 定义一个迭代器mp,用于记录队列头部元素的位置
for(pos = dq.begin(); pos != dq.end(); pos++) { // 遍历双端队列
if((*pos).time > m) { // 如果当前元素的时间大于m
m = (*pos).time; // 更新m
mp = pos; // 更新mp
}
}
dq.erase(mp); // 删除mp指向的元素
temp.value = in; // 存储当前页面
dq.push_back(temp); // 将该页面加入队列尾部
temp.time = 0; // 时间重置为0
}
}
}
printf("LRU缺页次数为:%d\n", numqueye); // 输出LRU算法缺页次数
printf("LRU缺页率为:%1f\n,", (double)numqueye/1.0/n); // 输出LRU算法缺页率
}
int main() {
cout << "模拟页面淘汰算法计算缺页次数与缺页率" << endl;
int choice; // 定义选项
do {
cout << "1.FIFIO算法" << endl; // 输出选项
cout << "2.LRU算法" << endl;
cout << "0.退出" << endl;
cout << "请选择" << endl;
cin >> choice; // 获取用户输入的选项
switch(choice) { // 执行对应的操作
case 1: fifo(); break;
case 2: lru(); break;
case 0: exit(0);
default: cout << "输入有误,程序结束!" << endl;
}
} while(true);
return 0;
}
```
阅读全文