暂时看

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
float num; //缺页数 
typedef struct QNode{   //定义队列 
    int data;
     struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
    QueuePtr front;
    QueuePtr rear;
}LinkQueue;
void InitQueue(LinkQueue *Q)  //初始化队列 
{
    Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode));
     Q->front->data=Q->rear->data=0;
     Q->front->next =NULL;
}
void enqueue(LinkQueue *Q)  //入队列 
{
    QueuePtr p;
    p=(QueuePtr)malloc(sizeof(QNode));
    if(!p)
    {
     printf("创建失败\n");
    }
    else
    {
     p->data=0;
     p->next=NULL;
     Q->rear->next=p;
     Q->rear=p;
    }

int QLength(LinkQueue *Q) {   //队列的长度(也就是内存驻留空间的大小) 
    int i = 0;
    QueuePtr p;
    p=Q->front;
    while (p!=NULL) {
        i++;
        p = p->next;
    }
}
void bianli(LinkQueue *Q,int n) //寻找页面是否存在 
{
 
    QueuePtr p;QueuePtr q;
    p=Q->front->next;
    q=Q->front;
    while(p){
    if(p->data==n)  // 如果找到,则放在front后面 
     {
        q->next=p->next;
        p->next=Q->front->next;
        Q->front->next=p;
        break;
     }
    else  //一个接一个的找 
    {
        p=p->next;
        q=q->next;
    }
  
   }
    if(!p)  //如果没有找到 ,即p为空 
  {
      p=Q->front->next;  //p,q重新指向前面(因为p已经为空),找到最后一个和倒数第二个结点 
      q=Q->front;
      while(p->next)
  {
      p=p->next;
      q=q->next;
  }
      Q->rear=q;   //删掉最后一个结点,并把倒数第二个作为rear 
      q->next=NULL; 
      free(p);
      QNode *LQNode = (QNode*)malloc(sizeof(QNode)); //新建结点存放页面号 
      LQNode->data=n; 
      LQNode->next=Q->front->next;// 新建结点放在front后面 
      Q->front->next=LQNode;
      num++;
   }
 }

void final(int h)
{
     LinkQueue Q;
     InitQueue(&Q);
     srand((int)time(0));
     int m;float w;
     for(int i=0;i<h;i++) //建立内存驻留空间大小(可随for的循环范围改变) 
 {
      enqueue(&Q); 
 } 
      QLength(&Q);
      printf("      %d             ",h);
     for(int a=0;a<5000;a++) // 遍历5000次1-29页面
 {
      m=rand()%29+1;
      bianli(&Q,m);
  } 
  for(int b=0;b<40000;b++)  //遍历40000次30-70页面
 {
      m=rand()%41+30;
      bianli(&Q,m);
  } 
  for(int c=0;c<5000;c++)  //遍历5000次71-100页面
 {
      m=rand()%30+71;
      bianli(&Q,m);
  } 
    printf("%.2f        ",num);
    w=num/50000;
    printf("%.5f",w); 
}
int main()
{
    int size[8]={30,33,35,40,50,60,70,80};  //内存驻留空间大小 
    printf("---------------------------------------------\n");    
    printf("内存驻留空间大小      缺页数       缺页率\n");    
    printf("---------------------------------------------\n");
    for(int i=0;i<8;i++)
    {
        num=0;
        final(size[i]); //求缺页数,缺页率 
        printf("\n") ;
    }
       printf("---------------------------------------------\n");
            
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值