




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、#include<stdio.h>#include<stdlib.h>#define OK 1 / 完成#define ERROR 0 / 出錯typedef int Status;typedef struct free_table/定義一個空閑區(qū)說明表結(jié)構(gòu)int num; 分區(qū)序號long address; 起始地址long length; / 分區(qū)大小int state; /分區(qū)狀態(tài)ElemType;線性表的雙向鏈表存儲結(jié)構(gòu)前趨指針后繼指針typedef struct Node/ElemType data;struct Node *prior; /struct No
2、de *next; / Node,*LinkList;LinkList first; / 頭結(jié)點LinkList end; / 尾結(jié)點int flag;/記錄要刪除的分區(qū)序號Status Initblock()/開創(chuàng)帶頭結(jié)點的內(nèi)存空間鏈表first=(LinkList)malloc(sizeof(Node);end=(LinkList)malloc(sizeof(Node);first->prior=NULL;first->next=end;end->prior=first;end->next=NULL;end->data.num=1;end->data.a
3、ddress=40;end->data.length=600;end->data.state=0; return OK; void sort()分區(qū)序號重新排序Node *p=first->next,*q;q=p->next;for(;p!=NULL;p=p->next)for(q=p->next;q;q=q->next)if(p->data.num>=q->data.num)q->data.num+=1;/顯示主存分配情況void show() int flag=0;/用來記錄分區(qū)序號Node *p=first;p->d
4、ata.num=0;p->data.address=0; p->data.length=40; p->data.state=1;sort();printf("ntt»主存空間分配情況n");printf( "*nn");printf("分區(qū)序號t起始地址t分區(qū)大小t分區(qū)狀態(tài)nn");while(p)printf("%dtt%dtt%d",p->data.num,p->data.address,p->data.length);if(p->data.state=0)
5、printf("tt空閑 n'n");else printf("tt p=p->next;已分配nn");printf( "*nn");/首次適應(yīng)算法Status First_fit(int request)/為申請作業(yè)開辟新空間且初始化Node *p=first->next;LinkList temp=(LinkList)malloc(sizeof(Node);temp->data.length=request;temp->data.state=1;p->data.num=1;while(p)i
6、f(p->data.state=0)&&(p->data.length=request)/有大小恰好合適的空閑塊p->data.state=1;return OK;break;else if(p->data.state=0) && (p->data.length>request)/有空閑塊能滿足需求且有剩余temp->prior=p->prior;temp->next=p;temp->data.address=p->data.address;temp->data.num=p->data
7、.num;p->prior->next=temp;p->prior=temp;p->data.address=temp->data.address+temp->data.length;p->data.length-=request;p->data.num+=1;return OK;break;p=p->next;return ERROR;/最佳適應(yīng)算法Status Best_fit(int request)int ch; /記錄最小剩余空間Node *p=first;Node *q=NULL; 記錄最佳插入位置LinkList temp=(
8、LinkList)malloc(sizeof(Node);temp->data.length=request;temp->data.state=1;p->data.num=1;while(p) /初始化最小空間和最佳位置if(p->data.state=0) && (p->data.length>=request)if(q=NULL) q=p;ch=p->data.length-request;else if(q->data.length > p->data.length)q=p;ch=p->data.lengt
9、h-request;p=p->next;if(q=NULL) return ERROR;/ 沒有找到空閑塊 else if(q->data.length=request) q->data.state=1;return OK; else temp->prior=q->prior;temp->next=q;temp->data.address=q->data.address;temp->data.num=q->data.num;q->prior->next=temp;q->prior=temp;q->data.ad
10、dress+=request;q->data.length=ch;q->data.num+=1;return OK;return OK;/最差適應(yīng)算法Status Worst_fit(int request)int ch; / 記錄最大剩余空間Node *p=first->next;Node *q=NULL; 記錄最佳插入位置LinkList temp=(LinkList)malloc(sizeof(Node);temp->data.length=request;temp->data.state=1;p->data.num=1;while(p) /初始化最大
11、空間和最佳位置if(p->data.state=0 && (p->data.length>=request) if(q=NULL) q=p;ch=p->data.length-request; else if(q->data.length < p->data.length) q=p;ch=p->data.length-request; p=p->next;if(q=NULL) return ERROR;/沒有找到空閑塊else if(q->data.length=request) q->data.length=1
12、;return OK; else temp->prior=q->prior;temp->next=q;temp->data.address=q->data.address;temp->data.num=q->data.num;q->prior->next=temp;q->prior=temp;q->data.address+=request;q->data.length=ch;q->data.num+=1;return OK; return OK;/分配主存Status allocation(int a)int re
13、quest;/ 申請內(nèi)存大小printf("請輸入申請分配的主存大小(單位:KB):");scanf("%d",&request);if(request<0 |request=0)printf("分配大小不合適,請重試!");return ERROR;switch(a)case 1: /默認(rèn)首次適應(yīng)算法if(First_fit(request)=OK) printf("t*else printf("t*內(nèi)存不足,分配失敗!return OK;break;case 2: 選擇最佳適應(yīng)算法if(Best_
14、fit(request)=OK) printf("t*else printf("t*內(nèi)存不足,分配失敗!return OK;break;case 3: /選擇最差適應(yīng)算法if(Worst_fit(request)=OK) printf("t*else printf("t*內(nèi)存不足,分配失敗!return OK;break;分配成功!*");*");分配成功! *");* 分配成功!*");* Status deal1(Node *p)/ 處理回收空間 Node *q=first;for(;q!=NULL;q=q-&
15、gt;next) if(q=p) if(q->prior->data.state=0&&q->next->data.state!=0) q->prior->data.length+=q->data.length; q->prior->next=q->next;q->next->prior=q->prior;q=q->prior;q->data.state=0;q->data.num=flag-1;if(q->prior->data.state!=0&&q-
16、>next->data.state=0) q->data.length+=q->next->data.length;q->next=q->next->next;q->next->next->prior=q;q->data.state=0;q->data.num=flag;)if(q->prior->data.state=0&&q->next->data.state=0)q->prior->data.length+=q->data.length;q->pr
17、ior->next=q->next;q->next->prior=q->prior;q=q->prior;q->data.state=0;q->data.num=flag-1;)if(q->prior->data.state!=0&&q->next->data.state!=0)q->data.state=0;)return OK;)Status deal2(Node *p)/ 處理回收空間Node *q=first;for(;q!=NULL;q=q->next)if(q=p)if(q->
18、prior->data.state=0&&q->next->data.state!=0)q->prior->data.length+=q->data.length;q->prior->next=q->next;q->next->prior=q->prior;q=p->prior;q->data.state=0;q->data.num=flag-1;)if(q->prior->data.state!=0&&q->next->data.state=0)q
19、->data.state=0;)if(q->prior->data.state=0&&q->next->data.state=0)q->prior->data.length+=q->data.length;q->prior->next=q->next;q->next->prior=q->prior;q=q->prior;q->data.state=0;q->data.num=flag-1; if(q->prior->data.state!=0&&q-
20、>next->data.state!=0)q->data.state=0; return OK;/主存回收Status recovery(int flag) Node *p=first;for(;p!=NULL;p=p->next) if(p->data.num=flag)if(p->prior=first)if(p->next!=end)/ 當(dāng)前P指向的下一個不是最后一個時 if(p->next->data.state=0) /與后面的空閑塊相連p->data.length+=p->next->data.length;p
21、->next->next->prior=p;p->next=p->next->next;p->data.state=0;p->data.num=flag; else p->data.state=0;if(p->next=end)/ 當(dāng)前P指向的下一個是最后一個時 p->data.state=0; / 結(jié)束 if(p->prior=block_first) 的情況else if(p->prior!=first)if(p->next!=end)deal1(p);elsedeal2(p);/ 結(jié)束 if(p->
22、prior!=block_first)的情況/ 結(jié)束 if(p->data.num=flag) 的情況printf("t* return OK;/主函數(shù)void main()int i; /回收成功*");操作選擇標(biāo)記算法選擇標(biāo)記printf("*printf("ttprintf("t(1)用以下三種方法實現(xiàn)主存空間的分配*n");n");首次適應(yīng)算法t(2)最佳適應(yīng)算法t(3)最差適應(yīng)算法n");printf("*n");printf("n");printf(&quo
23、t;請輸入所使用的內(nèi)存分配算法:");scanf("%d",&a);while(a<1|a>3)printf("輸入錯誤,請重新輸入所使用的內(nèi)存分配算法:n");scanf("%d",&a);switch(a)case 1:printf("nt*case 2:printf("nt* case 3:printf("nt*Initblock(); while(1) show();,*,*開創(chuàng)空間表使用首次適應(yīng)算法:使用最佳適應(yīng)算法:使用最壞適應(yīng)算法:*n");b
24、reak;*n");break;*n");break;int a;/printf("t1:分配內(nèi)存t2: 回收內(nèi)存t0: 退出n");printf("請輸入您的操作:");scanf("%d",&i);if(i=1) allocation(a); /else if(i=2) /printf("分配內(nèi)存 內(nèi)存回收請輸入您要釋放的分區(qū)號:");scanf("%d",&flag); recovery(flag);else if(i=0)printf("n
25、退出程序 n");break; 退出else /printf("continue;輸入操作有誤輸入有誤,請重試!”);執(zhí)行結(jié)果和結(jié)果分析初始化首次適應(yīng)算法:睛輸入所使用的內(nèi)存分配算法ri*使用首次適應(yīng)算法:*«主存空間分配情況分區(qū)序號起始地址分區(qū)大小分區(qū)狀態(tài)a040已分配140600空閑0 :退出當(dāng)作業(yè)1、2、3順利分配內(nèi)存空間后:1;方那內(nèi)存2:回收內(nèi)存的操信1清分配的主任大小單位工KBf酶 配成功! *至存空間分配情況XKXMEKNMEJtKMEmaiEm 魏 X<aiEmaX<M:J<<>EX<>E<J<W:X3<>EXa<3*X3<>tX3XiWiM 箕:MXatXXJE分區(qū)序號起始地址分區(qū)大小分區(qū)狀態(tài)R040已分配140130已分配217060已分配3230100已分配433U310空閑XKMMEKXMEXMMEXXMEXMMEXMXMXXKXXJOEXXaCXXXXXatXXJEXiMaCXiMitNiMJfXWXiMJfXiMJE回收序號2里面的內(nèi)存:1:分配內(nèi)存2=回收內(nèi)存麟I舞iU、區(qū)號.20:退出王存空間分配情況M:MXM:KX>C:MKl>EX>C>EKlE>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 無錫太湖學(xué)院管理制度
- 軍供站物資設(shè)備管理制度
- 單位出租房門面管理制度
- 義務(wù)教育外籍生管理制度
- 實體店產(chǎn)品庫存管理制度
- 早教機(jī)構(gòu)銷售管理制度
- 月子會所消毒管理制度
- ?;仿殬I(yè)衛(wèi)生管理制度
- 施工受限作業(yè)管理制度
- 奶茶店運(yùn)營人員管理制度
- 父親節(jié)你了解你的爸爸嗎禮贊父親學(xué)會感恩模板
- 2023-2024學(xué)年安徽省合肥市六校聯(lián)盟高一下學(xué)期期末聯(lián)考地理試題(解析版)
- 新設(shè)備專項安全風(fēng)險辨識評估報告示例-副本
- 蘇州市昆山市惠民物業(yè)管理有限公司招聘筆試真題2024
- 初級銀行從業(yè)資格考試《個人貸款》新版真題卷(2025年含答案)
- 民航飛行員招飛心理測試題及答案
- 生地考試測試題及答案
- 《動物保定技術(shù)》課件
- 2025年出版:全球市場光伏硅膠總體規(guī)模、主要生產(chǎn)商、主要地區(qū)、產(chǎn)品和應(yīng)用細(xì)分調(diào)研報告
- 北京市朝陽區(qū)2023-2024學(xué)年四年級下學(xué)期語文期末考試卷(含答案)
- GB/T 45385-2025燃?xì)馊紵骱腿紵骶哂冒踩涂刂蒲b置特殊要求排氣閥
評論
0/150
提交評論