




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、#include<stdio.h>#include<stdlib.h>#define OK 1 / 完成#define ERROR 0 / 出錯typedef int Status;typedef struct free_table/定義一個空閑區(qū)說明表結構int num; 分區(qū)序號long address; 起始地址long length; / 分區(qū)大小int state; /分區(qū)狀態(tài)ElemType;線性表的雙向鏈表存儲結構前趨指針后繼指針typedef struct Node/ElemType data;struct Node *prior; /struct No
2、de *next; / Node,*LinkList;LinkList first; / 頭結點LinkList end; / 尾結點int flag;/記錄要刪除的分區(qū)序號Status Initblock()/開創(chuàng)帶頭結點的內存空間鏈表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");/首次適應算法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;/最佳適應算法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;/最差適應算法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;/ 申請內存大小printf("請輸入申請分配的主存大小(單位:KB):");scanf("%d",&request);if(request<0 |request=0)printf("分配大小不合適,請重試!");return ERROR;switch(a)case 1: /默認首次適應算法if(First_fit(request)=OK) printf("t*else printf("t*內存不足,分配失敗!return OK;break;case 2: 選擇最佳適應算法if(Best_
14、fit(request)=OK) printf("t*else printf("t*內存不足,分配失敗!return OK;break;case 3: /選擇最差適應算法if(Worst_fit(request)=OK) printf("t*else printf("t*內存不足,分配失敗!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)/ 當前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)/ 當前P指向的下一個是最后一個時 p->data.state=0; / 結束 if(p->prior=block_first) 的情況else if(p->prior!=first)if(p->next!=end)deal1(p);elsedeal2(p);/ 結束 if(p->
22、prior!=block_first)的情況/ 結束 if(p->data.num=flag) 的情況printf("t* return OK;/主函數(shù)void main()int i; /回收成功*");操作選擇標記算法選擇標記printf("*printf("ttprintf("t(1)用以下三種方法實現(xiàn)主存空間的分配*n");n");首次適應算法t(2)最佳適應算法t(3)最差適應算法n");printf("*n");printf("n");printf(&quo
23、t;請輸入所使用的內存分配算法:");scanf("%d",&a);while(a<1|a>3)printf("輸入錯誤,請重新輸入所使用的內存分配算法:n");scanf("%d",&a);switch(a)case 1:printf("nt*case 2:printf("nt* case 3:printf("nt*Initblock(); while(1) show();,*,*開創(chuàng)空間表使用首次適應算法:使用最佳適應算法:使用最壞適應算法:*n");b
24、reak;*n");break;*n");break;int a;/printf("t1:分配內存t2: 回收內存t0: 退出n");printf("請輸入您的操作:");scanf("%d",&i);if(i=1) allocation(a); /else if(i=2) /printf("分配內存 內存回收請輸入您要釋放的分區(qū)號:");scanf("%d",&flag); recovery(flag);else if(i=0)printf("n
25、退出程序 n");break; 退出else /printf("continue;輸入操作有誤輸入有誤,請重試!”);執(zhí)行結果和結果分析初始化首次適應算法:睛輸入所使用的內存分配算法ri*使用首次適應算法:*«主存空間分配情況分區(qū)序號起始地址分區(qū)大小分區(qū)狀態(tài)a040已分配140600空閑0 :退出當作業(yè)1、2、3順利分配內存空間后:1;方那內存2:回收內存的操信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里面的內存:1:分配內存2=回收內存麟I舞iU、區(qū)號.20:退出王存空間分配情況M:MXM:KX>C:MKl>EX>C>EKlE>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智慧安防保障城市安全的智能系統(tǒng)
- 從心理成長到創(chuàng)新教育的理論框架構建與實踐
- 智慧城市公共安全的綜合治理與大數(shù)據應用
- 學生創(chuàng)新能力培養(yǎng)的教育心理學策略
- 以教育技術為媒介探索增強學生學習動力和效率的新路徑
- 當代辦公室內應用個化學資料的有效性及其對于技術變革的響應
- 中職數(shù)學基礎模塊課件
- 企業(yè)級數(shù)據治理平臺的構建與實踐
- 醫(yī)療科技與智慧教育的深度融合探討
- 機器人輔助的醫(yī)療教學與智能教育探索
- 農業(yè)供應鏈管理考試試題及答案
- 人行雨棚施工方案
- 2025-2030中國晶圓鍵合系統(tǒng)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析研究報告
- 從校園到職場:新員工角色轉換與職業(yè)化塑造
- 奶茶服務協(xié)議合同
- 學生食堂維修改造工程施工組織設計
- 書籍保密協(xié)議書范文
- 2025年章魚小丸子項目可行性研究報告
- “中小學生每天至少2小時體育活動”的價值追求與實現(xiàn)路徑研究
- 2024年四川成都農業(yè)科技中心招聘筆試真題
- 成都市房產抵押合同模板2025年
評論
0/150
提交評論