LRU页面置换算法的实现(c++版)

#include<bits/stdc++.h>
using namespace std;
class LinkStack{
private:
    struct Node{
        int elem;
        struct Node* next;
        struct Node* prev;
    };
    struct Node* head;
    struct Node* tail;
public:
    LinkStack(){
        head=new struct Node;
        tail=new struct Node;
        head->next=NULL;
        head->prev=NULL;
        tail=head;
    }
    ~LinkStack(){}
    void push(int k){
        struct Node* middle = new struct Node;
        middle->elem=k;
        tail->next=middle;
        middle->prev=tail;
        middle->next=NULL;
        tail=middle;
    }
    void pop(){
        if(tail==head){
            cout<<"the stack is empty";

        }
        else{
            struct Node* middle=new struct Node;
            middle=tail;
            tail=tail->prev;
            //tail->prev->next=tail;
            tail->next=NULL;
            free(middle);
        }
    }
    void del(int k){
        struct Node* ser = new struct Node;
        ser=head;
        while(ser=ser->next){
            if(ser->elem==k){
                ser->prev->next=ser->next;
                ser->next->prev=ser->prev;
                tail->next=ser;
                ser->prev=tail;
                ser->next=NULL;
                tail=ser;
                break;
            }

        }

    }
    bool findlink(int k){
        struct Node* ser = new struct Node;
        ser=head;
        while(ser=ser->next){
            if(ser->elem==k){
                return true;
            }
        }
        return false;
    }
    void print_structure(){
        struct Node* ser=new struct Node;
        ser=tail;
        while(ser!=head){
            cout<<"+--------------+\n";
            cout<<ser->elem<<endl;
            cout<<"+--------------+\n";
            ser=ser->prev;
        }
    }
    int feedback(int k){
        int level=1;
        struct Node* ser=new struct Node;
        ser=head;
        while(ser=ser->next){
            if(ser->elem==k){
                return level;
            }
            level++;
        }
    }
    int back_head(){
        return head->next->elem;
    }
};
int main()
{
    int k;LinkStack s;
    cout<<"请输入空闲的帧的数目:\n";
    int p;cin>>p;int sum=p;
    int element[p];
    while(1==1){
          cout<<"以下输入一个引用串:"<<endl;
          cin>>k;
          if(p>0){
            cout<<"具有空闲帧\n";
            int flag=1;
            for(int i=0;i<sum-p;i++){
                if(element[i]==k){
                    cout<<"当前引用串已经存在于页帧中,故无需请求调页\n";
                    flag=0;break;
                }
            }
            if(flag==1){
                for(int i=0;i<sum-p;i++){
                    cout<<element[i]<<endl;
                }
                element[sum-p]=k;
                cout<<k<<endl;
                for(int i=sum-p+1;i<sum;i++){
                    cout<<"空闲"<<endl;
                }
                p--;
            }
          }
          else if(p==0){
            int flag=0;
            for(int i=0;i<sum;i++){
                if(element[i]==k){
                    cout<<"该引用已经存在于页帧中,故无需进行页面置换\n";
                    flag=1;break;
                }
            }
            if(flag==0){
                int mind=1e6+10,j=0;
                cout<<"没有空闲帧且该引用不存在于当前的页帧中,开始进行页面置换\n";
                for(int i=0;i<sum;i++){
                    if(s.feedback(element[i])<mind){
                        j=i;mind=s.feedback(element[i]);
                    }
                }
                element[j]=k;
                for(int i=0;i<sum;i++){
                    cout<<element[i]<<endl;
                }
            }
            if(!s.findlink(k)){
                s.push(k);
            }
            else{
                s.del(k);
            }
        }
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值