2013年(3)
分类: Windows平台
2013-05-23 18:14:33
#include
#include
#include
#include
//#include
//using namespace std;
#define LEHGRTH 100
#define MAX_YE_NUM 99999
typedef struct {
int *pBase; //存储的元素第一个地址(基地址)
int len; //当前数组中的元素最大个数
int cnt; //当前有效数组元素的个数
} Arr;
typedef struct {
int ye;
int count;
}yemian;
void init_arr(Arr *pArr); //初始化
bool append_arr(Arr *parr,int val);//追加
bool delete_arr(Arr *parr,int pos,int *pval); //删除元素
bool is_empty(Arr *arr); //是否为空
bool is_full(Arr *arr); //是否为满
void FIFO(Arr L);
void lru( Arr L);
bool if_jin(int a){
if(a == 35){
return true;
}else{
return false;
}
}
int max(int a,int b,int c,int d){
if(a
if(a
}
int main(void){
Arr arr;
init_arr(&arr);
int a =0;
//const char *s="int";
printf("请输入要分配的页面\n");
while(a!=MAX_YE_NUM){
scanf("%d",&a);
append_arr(&arr,a);
}
FIFOFIFO//FIFO(arr);
lru(arr);
system("pause");
}
void lru(Arr L){
yemian a[4];
int j ;
for(int i = 0;i<4;i++){
a[i].count =0;
a[i].ye =-1;
}
while((*L.pBase)!=MAX_YE_NUM){
delete_arr(&L,1 ,&j);
for(int i=0;i<4;i++){
if(a[i].ye ==j){
for(int j=0;j<4;j++){
a[j].count ++;
}
a[i].count=0;
goto end;
}
}
int maxcount=max(a[0].count ,a[1].count ,a[2].count ,a[3].count );
for(int i=0;i<4;i++){
if(a[i].count ==maxcount){
a[i].ye =j;
a[i].count =0;
for(int p=0;p<4;p++){
if(a[p].ye !=a[i].ye ){
a[p].count ++;
}
}
break;
}
}
end: ;
for(int i = 0 ;i<4 ; i++){
if(a[i].ye !=-1){
printf("%d\t",a[i].ye );
}
}
printf("\n");
}
}
void FIFO(Arr L){
int a[4]={-1,-1,-1,-1};
int j;
while(*L.pBase != MAX_YE_NUM){
printf("页面调度方式为\n");
if(delete_arr(&L,1 ,&j)){
a[0]=j;
}else{
printf("错误");
}
for(int i = 0 ;i<4 ; i++){
if(a[i]!=-1){
printf("%d\t",a[i]);
}
}
for(int i= 4 - 2;i >= 0;i --) /*自后向前置入*/
{
a[i + 1] = a [i];
}
printf("\n");
}
delete_arr(&L,1 ,&j);
}
void init_arr(Arr *pArr){
pArr->pBase=(int *)malloc(sizeof(int)*LEHGRTH );
if(pArr->pBase==NULL){
printf("Auto distribute is wrong");
exit(-1);
}else{
pArr->len=LEHGRTH ;
pArr->cnt=0;
}
return ;
}
bool is_empty(Arr *arr){
if (arr->cnt==0){
return true;
}else {
return false;
}
}
bool append_arr(Arr *parr,int val){
int *newbase;
if(is_full(parr)){
if(!(newbase = (int *)realloc(parr->pBase,(parr->len+LEHGRTH)*sizeof(int)))){
printf("erroe");
//return false;
}
}
parr->pBase[parr->cnt]=val;
++parr->cnt;
return true;
}
bool is_full(Arr *parr){
if(parr->cnt==parr->len){
return true;
}else {
return false;
}
}
bool delete_arr(Arr *parr,int pos,int *pval/*传输返回值*/){
if(is_empty(parr)||pos<1||pos>=parr->cnt){
return false;
}
*pval = parr->pBase[pos-1];
for(int i = pos - 1;i<=parr->cnt;i++){
parr->pBase[i]=parr->pBase[i+1];
}
parr->cnt--;
return true;
}