给我一个Linux中用线性表队列实现的LRU算法的c语言模拟代码
时间: 2024-02-13 22:01:30 浏览: 180
好的,下面是一个简单的使用线性表队列实现LRU算法的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 5 // 缓存大小
typedef struct {
int data;
} Element;
typedef struct {
Element queue[MAXSIZE]; // 队列
int front; // 队头
int rear; // 队尾
int size; // 队列元素个数
} LRU;
void initLRU(LRU* lru) {
lru->front = 0;
lru->rear = -1;
lru->size = 0;
}
void enqueue(LRU* lru, Element element) {
if (lru->size == MAXSIZE) { // 队列已满,删除队头元素
printf("队列已满,删除队头元素:%d\n", lru->queue[lru->front].data);
lru->front = (lru->front + 1) % MAXSIZE;
lru->size--;
}
lru->rear = (lru->rear + 1) % MAXSIZE;
lru->queue[lru->rear] = element;
lru->size++;
}
void printLRU(LRU* lru) {
int i;
printf("LRU缓存:");
for (i = lru->front; i <= lru->rear; i++) {
printf("%d ", lru->queue[i].data);
}
printf("\n");
}
int main() {
LRU lru;
Element element;
int i;
initLRU(&lru);
for (i = 1; i <= 7; i++) { // 依次加入元素
element.data = i;
enqueue(&lru, element);
printLRU(&lru);
}
return 0;
}
```
注释已经写得很详细了,这个程序会依次加入元素1-7,当缓存达到最大容量5时,就会删除队头元素。你可以根据需要进行修改,比如加入查找元素、删除元素等操作。
阅读全文