当前位置:首页 > 广工 操作系统课程设计 最佳适应算法、最坏适应算法、循环首次适应算法
动态分区分配算法仿真,循环首次适应算法、最佳适应算法、最坏适应算法
#include
#include
#include
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
Node *p=L.head->next; Node *q=p->next; int
a,b,c,d;//==========================================================================
for(int j=0; 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 Node *p=L.head->next; Node *q=p->next; int a,b,c,d; for(int j=0; j if(p->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 Node *p=L.head->next; Node *q=p->next; int a,b,c,d; for(int j=0; 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=e.name; 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记录该元素的相关数据 { e.name=p->name; e.start=p->start; e.size=p->size; e.state=p->state; p->pre->next=p->next;//这里曾写成=p->pre....
共分享92篇相关文档