當前位置:編程學習大全網 - 編程語言 - 算法編程

算法編程

1,先進先出算法(FIFO)

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

#定義mSIZE 3

#定義pSIZE 8

靜態int memory[mSIZE]= { 0 };

靜態int進程[pSIZE]= { 0 };

//static int process[pSIZE] = {2,3,2,1,5,2,4,5,3,2,5,2 };

//static int process[pSIZE] = {7,10,1,2,10,3,10,4,2,3,1,2,10,1,7,10,1 };

void build();//生成壹個隨機數序列

void FIFO();//最近最少使用的(LRU)替換算法

int main(int argc,char *argv[])

{

Printf("生成隨機序列如下:\ n ");

build();

Printf("先進先出(FIFO)頁面替換算法\ n ");

FIFO();

系統(“暫停”);

返回0;

}

無效構建()

{

int I = 0;

for(I = 0;我& ltpSIZEi++)

{

process[I]=(int)(10.0 * RAND()/(RAND _ MAX+1.0)+1);

printf("%d ",process[I]);

}

printf(" \ n ");

}

void FIFO()

{

int time[mSIZE]= { 0 };

int i = 0,j = 0;

int m = -1,n =-1;

int max = -1,maxtime = 0;

int count = 0;

for(I = 0;我& ltpSIZEi++)

{

//找到第壹個空閑的物理塊

for(j = 0;j & ltmSIZEj++)

{

if(memory[j]= = 0)

{

m = j;

打破;

}

}

//找到與進程相同的標簽。

for(j = 0;j & ltmSIZEj++)

{

if(memory[j]= = process[I])

{

n = j;

}

}

//找到時間值最大的那個。

for(j = 0;j & ltmSIZEj++)

{

if(time[j]& gt;maxtime)

{

maxtime = time[j];

max = j;

}

}

If(n == -1) //不存在相同的進程。

{

如果(m!= -1) //有空閑的物理塊。

{

memory[m]= process[I];

時間[m]= 0;

for(j = 0;j & lt= m;j++)

{

time[j]++;

}

m =-1;

}

否則//沒有空閑的物理塊。

{

memory[max]= process[I];

time[max]= 0;

for(j = 0;j & ltmSIZEj++)

{

time[j]++;

}

max =-1;

maxtime = 0;

count++;

}

}

Else //同樣的過程存在。

{

memory[n]= process[I];

for(j = 0;j & ltmSIZEj++)

{

time[j]++;

}

n =-1;

}

for(j = 0;j & ltmSIZEj++)

{

printf("%d ",memory[j]);

}

printf(" \ n ");

}

Printf("頁面轉換次數:%d\n ",count);

}

2.最新和最長時間未使用的算法(LRU)

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

#定義mSIZE 3

#定義pSIZE 8

靜態int memory[mSIZE]= { 0 };

靜態int進程[pSIZE]= { 0 };

//static int process[pSIZE] = {2,3,2,1,5,2,4,5,3,2,5,2 };

//static int process[pSIZE] = {7,10,1,2,10,3,10,4,2,3,1,2,10,1,7,10,1 };

void build();//生成壹個隨機數序列

void LRU();//最近最少使用的(LRU)替換算法

int main(int argc,char *argv[])

{

Printf("生成隨機序列如下:\ n ");

build();

Printf ("LRU替換算法\ n ");

LRU();

系統(“暫停”);

返回0;

}

無效構建()

{

int I = 0;

for(I = 0;我& ltpSIZEi++)

{

process[I]=(int)(10.0 * RAND()/(RAND _ MAX+1.0)+1);

printf("%d ",process[I]);

}

printf(" \ n ");

}

無效LRU()

{

int flag[mSIZE]= { 0 };

int i = 0,j = 0;

int m = -1,n =-1;

int max = -1,max flag = 0;

int count = 0;

for(I = 0;我& ltpSIZEi++)

{

//找到第壹個空閑的物理塊

for(j = 0;j & ltmSIZEj++)

{

if(memory[j]= = 0)

{

m = j;

打破;

}

}

//找到與進程相同的標簽。

for(j = 0;j & ltmSIZEj++)

{

if(memory[j]= = process[I])

{

n = j;

}

}

//找到標誌值最大的那個。

for(j = 0;j & ltmSIZEj++)

{

if(flag[j]& gt;maxflag)

{

max flag = flag[j];

max = j;

}

}

If(n == -1) //不存在相同的進程。

{

如果(m!= -1) //有空閑的物理塊。

{

memory[m]= process[I];

flag[m]= 0;

for(j = 0;j & lt= m;j++)

{

flag[j]++;

}

m =-1;

}

否則//沒有空閑的物理塊。

{

memory[max]= process[I];

flag[max]= 0;

for(j = 0;j & ltmSIZEj++)

{

flag[j]++;

}

max =-1;

max flag = 0;

count++;

}

}

Else //同樣的過程存在。

{

memory[n]= process[I];

flag[n]= 0;

如果(m!= -1) //如果有空閑的物理塊,

{

flag[m]= 0;

}

for(j = 0;j & ltmSIZEj++)

{

flag[j]++;

}

max =-1;

max flag = 0;

n =-1;

}

for(j = 0;j & ltmSIZEj++)

{

printf("%d ",memory[j]);

}

printf(" \ n ");

}

Printf("頁面轉換次數:%d\n ",count);

}

3.最佳替換算法

對此我很抱歉,我不知道!

  • 上一篇:武漢學無人機的學校中職中專2022最新
  • 下一篇:網絡服務器的幾種並發服務模型
  • copyright 2024編程學習大全網