【操作系统】Link.h

来源:互联网 发布:java中document.form 编辑:程序博客网 时间:2024/05/21 16:31
/************************************************************************//* 功能:  模拟实现可变分区存储管理的最佳适应算法的链表类时间:2014年9月1日21:57:21作者:信管1201 1205020116  肖锋*//************************************************************************/#ifndef LINK_H_INCLUDED#define LINK_H_INCLUDEDclass busyLink;//自由分区链表class freeLink{friend class busyLink;struct Node{int size, adress;   //分别是节点内存的大小和起始地址char name = 'O';          //这块节点的名字Node* next;     //指向下一个节点//构造函数Node(int sze, int adres, char nme, Node* nxt) : size(sze), adress(adres), name(nme), next(nxt) {}//添加set和get函数int getSize() { return size; }void setSize(int sze){ size = sze; }int getAdress() { return adress; }void setAdress(int adres) { adress = adres; }char getName() { return name; }void setName(char nme) { name = nme; }Node* getNext() { return next; }void setNext(Node* nxt) { next = nxt; }};Node* head;//链表的头部指针Node* tail;//链表的尾部指针Node* getNode(int index);void swap(int index1, int index2);//交换连个节点的信息public://构造函数初始化freeLink(){//初始化的时候会为链表自动添加系统所占用的内存int os = 576;char oname = 'O';int adres = 64;head = new Node(0, 0, oname, new Node(os, adres, oname, nullptr));tail = head->next;}//显示当前的分区void show();//内存地址相同的时候的碎片拼接void pingJie();//添加一个Node,等会选择插入的地点void addNode(int size, int adress);//删除Node//Node* popNode(char name);//得到头指针const freeLink::Node* getHead() { return head; }//得到尾指针freeLink::Node* getTail() { return tail; }//设置第i个节点void setNode(int index, int size, int adress);//找到要修改的节点是第几位]int getNeedGai(int size);//得到第index位的sizeint getNeedSize(int index);//得到index节点的地址int getNeedAdress(int index);//去除对应的节点void popNeed(int index);//合并全部空闲的节点void heBing(int allFreeAdress);//删除尾部节点的函数void popTail();//循环首次适应void setNeed(int index, int size);//首次循环适应算法的添加,就是尾部添加void addNode2(int size, int adress);//给自由链表前后的合并分区,循环首次适应算法void pingJie2();//友元,算法内存分配//friend void requireMemo(char name, int size);//友元,算法回收内存//friend void freeMemo(char name);};//作业占据的分区链表class busyLink{friend class freeLink;struct Node{int size, adress;   //分别是节点内存的大小和起始地址char name = 'O';          //这块节点的名字Node* next;     //指向下一个节点//构造函数Node(int sze, int adres, char nme, Node* nxt) : size(sze), adress(adres), name(nme), next(nxt) {}//添加set和get函数int getSize() { return size; }void setSize(int sze){ size = sze; }int getAdress() { return adress; }void setAdress(int adres) { adress = adres; }char getName() { return name; }void setName(char nme) { name = nme; }Node* getNext() { return next; }void setNext(Node* nxt) { next = nxt; }};Node* head;//链表的头部指针Node* tail;//链表的尾部指针public://构造函数初始化busyLink(){//初始化的时候会为链表自动添加系统所占用的内存int os = 64;char oname = 'O';int adres = 0;head = new Node(0, 0, 'O', new Node(os, adres, oname, nullptr));tail = head->next;}//显示当前的分区void show();//内存地址相同的时候的碎片拼接//void pingJie();//添加一个Node,等会选择插入的地点void addNode(int size, int adress, char name);//删除Nodevoid popNode(char name);//得到头指针const busyLink::Node* getHead() { return head; }//得到尾指针busyLink::Node* getTail() { return tail; }//得到需要的该的节点的索引int getNeedGai(char name);//得到索引节点的sizeint getNeedSize(int index);//得到索引节点的adressint getNeedAdress(int index);//合并所有adress回收碎片,返回一个尾部节点的结束地址int reAdress();//友元,算法内存分配//friend void requireMemo(char name, int size);//友元,算法回收内存//friend void freeMemo(char name);};#endif // LINK_H_INCLUDED

0 0
原创粉丝点击