广工 操作系统课程设计 最佳适应算法、最坏适应算法、循环首次适应算法

时间:2025-07-10

动态分区分配算法仿真,循环首次适应算法、最佳适应算法、最坏适应算法

#include<iostream>

#include<iomanip>//在输入输出流中用到控制符

#include<windows.h>//用到了SetConsoleTextAttribute函数

#define minsize 2//事先规定的不再切割的剩余分区大小为2

using namespace std;

struct Node

{

int name;

int start;

int size;

int state;

Node *pre;

Node *next;

};

typedef struct Dlinklist

{

Node *head;

}Dlist;

//===================

Dlist pro,fre;

int memory,name,size,fit;

Node *temp=NULL;//temp是NestFit算法中的起始查寻指针

//===================

void initDlist(Dlist &L)//创建带有头结点的双向链表

{

L.head=new Node;

L.head->next=L.head->pre=NULL;

}

void MemoryInit()//初始化两个链表

{

initDlist(pro); //process链表

initDlist(fre); //free block链表

Node *p=new Node;

p->name=0;

p->start=0;

p->state=0;

p->size=memory;

p->next=NULL;//这里曾错写成p->pre..............

p->pre=fre.head;//这里曾漏写

fre.head->next=p;

}

int getLength(Dlist &L)//返回链表的长度,即元素的个数

int m=0;

Node *p=L.head->next;

while(p!=NULL)

{

m++;

p=p->next;

}

return m;

}

void arrangeSmaller(Dlist &L)//冒泡排序,链表按size进行排序,从小到大 {

int length=getLength(L);

for(int i=0; i<length-1; i++)//当链表中的元素个数>=2的时候才排序

{

Node *p=L.head->next;

Node *q=p->next;

int

a,b,c,d;//==========================================================================

for(int j=0; j<length-1-i; j++)

{

if(p->size>q->size) //交换位置,如果前面的大于后面的,使小的上浮,如果两个相等,则还是原来在前的保持在前

{

a=p->size;

p->size=q->size;

q->size=a;

b=p->name;

p->name=q->name;

q->name=b;

c=p->start;

p->start=q->start;

q->start=c;

d=p->state;//==========================================================================

p->state=q->state;

q->state=d;

}

p=p->next;

q=p->next;

}

}

void arrangeBigger(Dlist &L)//链表按size进行排序,从大到小

{

int length=getLength(L);

for(int i=0; i<length-1; i++)

{

Node *p=L.head->next;

Node *q=p->next;

int a,b,c,d;

for(int j=0; j<length-1-i; j++)

{

if(p->size<q->size)

{

a=p->size;

p->size=q->size;

q->size=a;

b=p->name;

p->name=q->name;

q->name=b;

c=p->start;

p->start=q->start;

q->start=c;

d=p->state;//==========================================================================

p->state=q->state;

q->state=d;

}

p=p->next;

q=p->next;

}

}

}

void arrangeStart(Dlist &L)//链表按start递增排序

{

int length=getLength(L);

for(int i=0; i<length-1; i++)

{

Node *p=L.head->next;

Node *q=p->next;

int a,b,c,d;

for(int j=0; j<length-1-i; j++)

{

if(p->start>q->start)

{

a=p->size;

p->size=q->size;

q->size=a;

b=p->name;

p->name=q->name;

q->name=b;

c=p->start;

p->start=q->start;

q->start=c;

d=p->state;//==========================================================================

p->state=q->state;

q->state=d;

}

p=p->next;

q=p->next;

}

}

}

void DlistInsert(Dlist &L,Node e) //在头结点之后插入元素,即L.head->next指向e {

Node *p=new Node;

p->name=http://www.77cn.com.cn;

p->size=e.size;

p->start=e.start;

p->state=e.state;

if(L.head->next!=NULL)//这是个值得注意的地方,L.head->next==NULL,则没有指针L.head->next->pre,如果这里不加判断的话,会出错

L.head->next->pre=p;

p->next=L.head->next;

p->pre=L.head;

L.head->next=p;

//双向链表,插入一个新的元素,如果元素不是插入在链尾,则一共要修改四次指针 }

void DlistDelete(Node *p,Node &e)//传递指针p,删除指针p指向的链表元素,用Node型变量e记录该元素的相关数据

{

http://www.77cn.com.cn=p->name;

e.start=p->start;

e.size=p->size;

e.state=p->state;

p->pre->next=p->next;//这里曾写成=p->pre....

if(p->next!=NULL)

p->next->pre=p->pre;//这里曾写成p->next->pre=p,留意

delete(p); //删除一个元素修改一次或两次指针

}

//=======================

void Green()

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);}

void Red()

{ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);}

void White()

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);}

void Yellow()

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);}

//=======================

void BestOrWorst()

{

arrangeStart(fre);//先按地址递增排序

if(fit==1)

…… 此处隐藏:8840字,全部文档内容请下载后查看。喜欢就下载吧 ……

广工 操作系统课程设计 最佳适应算法、最坏适应算法、循环首次适应算法.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219