#include<stdio.h>
#include<stdlib.h>
typedef struct QNode{
int data,length;
struct QNode *prior;
struct QNode *next;
}QNode,*LinkQueue;
void main()
{
int m,n,count=0;
LinkQueue L=(QNode*)malloc( sizeof(QNode));
L->prior=L->next=NULL;
L->length=0;
LinkQueue r=L,s=L;
int *t=NULL;
printf("请输入栈的长度:");
scanf("%d",&m);
printf("请输入访问页面总数:");
scanf("%d",&n);
t=(int*)malloc(n*sizeof(int));
if(t==NULL)
{
printf("内存不足!\n");
exit(0);
}
printf("请输入要访问的页面序列:");
for(int sum=0;sum<n;sum++)
{
scanf("%d",t+sum);
}
printf("被置换出去的页面序列为:\n");
for(int i=0;i<n;i++)
{
int e=*(t+i);
LinkQueue p=L;
LinkQueue q=(QNode*)malloc(sizeof(QNode));
q->data=e;
q->next=NULL;
r->next=q;
q->prior=r;
r=q;
L->length++;
for(int j=1,k=1;j<L->length&&k;j++)
{
p=p->next;
if(p->data==e)
{
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
L->length--;
k=0;
}
}
if(L->length>m)
{
LinkQueue u=L->next;
printf("%d",u->data);
L->next=u->next;
u->next->prior=L;
free(u);
L->length--;
}
}
printf("\n");
printf("最近最久未被使用的页面序列为:\n");
while(s->next)
{
s=s->next;
printf("%d ",s->data);
}
printf("\n");
}