⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lru最近最少使用算法view.cpp

📁 LRU最近最少使用算法
💻 CPP
字号:
// LRU最近最少使用算法View.cpp : implementation of the CLRUView class
//

#include "stdafx.h"
#include "LRU最近最少使用算法.h"

#include "LRU最近最少使用算法Doc.h"
#include "LRU最近最少使用算法View.h"

void insertpage();
void Main();
int SORT(int pagenum);
char CACHE[5];
CString putin;
struct sortpage
{char page;
struct sortpage *next;
};

struct sortpage *head;
int x=0,y=0;
CBrush color[10];
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CLRUView

IMPLEMENT_DYNCREATE(CLRUView, CView)

BEGIN_MESSAGE_MAP(CLRUView, CView)
	//{{AFX_MSG_MAP(CLRUView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLRUView construction/destruction

CLRUView::CLRUView()
{
	// TODO: add construction code here

}

CLRUView::~CLRUView()
{
}

BOOL CLRUView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CLRUView drawing

void CLRUView::OnDraw(CDC* pDC)
{
int i=0,size,j,flag,state,nextline=0;
struct sortpage *p1;
 int pagesize,count,ret;
	struct sortpage *p,*q;
	char one;
	count=0;
    pDC->SetBkMode(1);	
	pDC->SetTextColor(0x0000);
	pDC->SelectStockObject(DEFAULT_GUI_FONT);
	pDC->SetTextAlign(TA_LEFT);
    flag=pagesize=1;
  putin=putin;  
    q=(struct sortpage *)malloc(sizeof(struct sortpage));
    q->next=NULL;
	head=q;
	p=q;
    if(putin=="")
	   return;

	 int lenght=putin.GetLength();
	one=putin[0];
     	
	pDC->TextOut(350,30,"LRU算法演示");
	pDC->TextOut(0,65,"页地址流:");
    pDC->TextOut(70,65,putin);
	pDC->TextOut(0,95,"页面由新到旧的次序:");
   for(i=0;i<5;i++)
   {
   pDC->SelectObject(&color[i]);
   pDC->Rectangle(CRect(150+i*30,95,180+i*30,115));
   }
   i=-1;
	while(lenght>0)
	 {
	    
	  i++;one=putin[i];
	  q=(struct sortpage *)malloc(sizeof(struct sortpage));
	   q->next=NULL;
	   q->page=one;
	   p->next=q;
	   p=q;
	   count++;
	   
	   lenght--;
	   

	  }
	 

head->page=char(count);


for(i=0;i<5;i++)
 CACHE[i]=' ';

 p1=head->next;
 size=head->page;
state=0;
 if(size>0)
  for(i=0;i<5;i++)
  {   
      flag=0;
     for(j=0;j<=i;j++)
		 if(CACHE[j]==p1->page)
		 {flag=1;SORT(p1->page);break;}
		      if(flag==0)
			  {
              CACHE[state]=p1->page;
			  state++;
			  }
	  if(p1->next==NULL)
	   break;
     p1=p1->next;
  }

  if(size>5)
  {  
	 for(j=0,i=0;i<5;i++)  
	  {pDC->SelectObject(&color[i]);
		pDC->Rectangle(CRect(50+30*(j),50+13*(i+10),75+30*(j),65+13*(i+10)));
		pDC->TextOut(57+30*(j),50+13*(i+10),CString(CACHE[i]));
       }
      x=j+2;
	  y=10;
  while(p1)
  {   nextline++;
      if(nextline>=11)
	  {  y=y+9;nextline=0;x=0;}
	  ret=SORT(p1->page);
	  p1=p1->next;
	  i=0;
	  pDC->SelectObject(&color[i]);
      pDC->TextOut(57+30*(x),50+13*(i+y-1),CString(CACHE[0]));
	  for(i=0;i<5;i++)  
	   {pDC->SelectObject(&color[i]);
		pDC->Rectangle(CRect(50+30*(x),50+13*(i+y),75+30*(x),65+13*(i+y)));
		pDC->TextOut(57+30*(x),50+13*(i+y),CString(CACHE[i]));
		
       }
	  if(ret==1)
	  {   
	   pDC->TextOut(57+30*(x),50+13*(i+y+1),"命中");
	  }
	  else
	  {
	   pDC->TextOut(57+30*(x),50+13*(i+y+1),"替换");
	  }
	  x=x+2;
	  
  }

  }
  else if(size!=0)
  {
	
   for(i=0;i<size;i++)
	   { pDC->SelectObject(&color[i]);
		pDC->Rectangle(CRect(50+30*(j),50+13*(i+10),75+30*(j),65+13*(i+10)));
		pDC->TextOut(57+30*(j),50+13*(i+10),CString(CACHE[i]));
       }
  }

	CLRUDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	}





int SORT(int pagenum)
{    char change;
	
	 if( pagenum==CACHE[1])
	 {
		      change=CACHE[0];CACHE[0]=CACHE[1];CACHE[1]=change;return 1;
	 }
	 else if( pagenum==CACHE[2])
	 {
		      change=CACHE[2];CACHE[2]=CACHE[1];CACHE[1]=CACHE[0];CACHE[0]=change;return 1;
	 }
	 else if(pagenum==CACHE[3])
	 {
		      change=CACHE[3];CACHE[3]=CACHE[2];CACHE[2]=CACHE[1];CACHE[1]=CACHE[0];CACHE[0]=change;return 1;
	 }
	 else if(pagenum==CACHE[4])
	 {
		      change=CACHE[4];CACHE[4]=CACHE[3];CACHE[3]=CACHE[2];CACHE[2]=CACHE[1];CACHE[1]=CACHE[0];CACHE[0]=change;return 1;
	 }
	 else if(pagenum!=CACHE[0]&&pagenum!=CACHE[1]&&pagenum!=CACHE[2]&&pagenum!=CACHE[3]&&pagenum!=CACHE[4])
	 {
		     CACHE[4]=CACHE[3];CACHE[3]=CACHE[2];CACHE[2]=CACHE[1];CACHE[1]=CACHE[0];CACHE[0]=pagenum;return 2;
	}
	 else
		 return 1;

}



/////////////////////////////////////////////////////////////////////////////
// CLRUView printing

BOOL CLRUView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CLRUView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CLRUView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CLRUView diagnostics

#ifdef _DEBUG
void CLRUView::AssertValid() const
{
	CView::AssertValid();
}

void CLRUView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CLRUDoc* CLRUView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLRUDoc)));
	return (CLRUDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CLRUView message handlers

void CLRUView::OnInitialUpdate() 
{

 
	color[0].CreateSolidBrush(RGB(2,255,100));//白色
	color[1].CreateSolidBrush(RGB(2,250,150));//调入
	color[2].CreateSolidBrush(RGB(2,200,200));//替换
	color[3].CreateSolidBrush(RGB(2,150,250));//命中
	color[4].CreateSolidBrush(RGB(2,100,255));
	color[5].CreateSolidBrush(RGB(0,255,255));
	color[6].CreateSolidBrush(RGB(255,0,0));
	color[7].CreateSolidBrush(RGB(255,0,255));
	color[8].CreateSolidBrush(RGB(255,255,0));
	color[9].CreateSolidBrush(RGB(100,100,100));
    
	

	CView::OnInitialUpdate();
	
	// TODO: Add your specialized code here and/or call the base class
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -