




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、#in clude#in clude#defi ne OK 1/ 完成#defi ne ERROR 0 / 出錯typedef int Status;typedef struct free_table定義一個空閑區說明表結構int num; /分區序號long address; /起始地址long len gth; /分區大小int state; /分區狀態ElemType;線性表的雙向鏈表存儲結構前趨指針后繼指針typedef struct Node/ElemType data;struct Node *prior; / struct Node *next; / Node,*L in kLi
2、st;Lin kList first; /頭結點Lin kList end; / 尾結點int flag;/ 記錄要刪除的分區序號Status In itblock()開創帶頭結點的內存空間鏈表first=(L in kList)malloc(sizeof(Node);en d=(Li nkList)malloc(sizeof(Node);first-prior=NULL;first- n ext=e nd;en d-prior=first;en d- next=NULL;en d-data .num=1;en d-data.address=40;en d-data.le ngth=600;e
3、n d-data.state=0;return OK;void sort()/分區序號重新排序Node *p=first-n ext,*q;q=p-n ext;for(;p!=NULL;p=p-n ext)for(q=p-n ext;q;q=q_n ext)if(p-data .num=q-data .num)q-data .nu m+=1; /顯示主存分配情況void show() int flag=O;用來記錄分區序號Node *p=first;p-data .num=0;p-data.address=0;p-data .len gth=40;p-data.state=1;sort();p
4、rin tf(ntt主存空間分配情況n ”);printf(*nn);printf(分區序號t起始地址t分區大小t分區狀態nn);while(p)prin tf(%dtt%dtt%d,p-data. nu m,p-data.address,p-data.le ngth); if(p-data.state=0) printf(tt空閑 nn);else printf(tt已分配 nn”);p=p-n ext;printf(*nn);/首次適應算法Status First_fit(i nt request)/為申請作業開辟新空間且初始化Node *p=first- n ext;Lin kList
5、temp=(L in kList)malloc(sizeof(Node); temp-data .len gth=request; temp-data.state=1;p-data .num=1;while(p)if(p-data.state=0)&(p-dataen gth=request)/有大小恰好合適的空閑塊p-data.state=1;return OK;break;else if(p-data.state=0) & (p-dataen gthrequest)/有空閑塊能滿足需求且有剩余temp_prior=p_prior;temp-n ext=p;temp-data.address
6、=p-data.address;temp-data .num=p-data .num;p-prior- n ext=temp;p-prior=temp; p-data.address=temp-data.address+temp-data .len gth; p-data .len gth-=request;p-data .nu m+=1;return OK;break;p=p-n ext;return ERROR;/最佳適應算法Status Best_fit(i nt request)int ch; /記錄最小剩余空間Node *p=first;Node *q=NULL; /記錄最佳插入位置
7、Lin kList temp=(Li nkList)malloc(sizeof(Node);temp-data .len gth=request; temp-data.state=1;p-data .num=1;while(p) /初始化最小空間和最佳位置if(p-data.state=0) & (p-data .len gth=request)if(q=NULL)q=p;ch=p-dataen gth-request;else if(q-dataen gth p-data .len gth)q=p;ch=p-data .len gth-request;p=p-n ext;if(q=NULL)
8、 retur n ERROR;/ 沒有找到空閑塊 else if(q-data .len gth=request)q-data.state=1;return OK;elsetemp_prior=q_prior;temp-n ext=q;temp-data.address=q-data.address; temp-data .num=q-data .num;q-prior- n ext=temp;q-prior=temp;q-data.address+=request;q-data .len gth=ch;q-data .nu m+=1;return OK;return OK;/最差適應算法St
9、atus Worst_fit(i nt request)int ch; / 記錄最大剩余空間Node *p=first- n ext;Node *q=NULL; /記錄最佳插入位置Lin kList temp=(Li nkList)malloc(sizeof(Node); temp-data .len gth=request;temp-data.state=1;p-data .num=1;while(p) /初始化最大空間和最佳位置if(p-data.state=O & (p-dataen gth=request)if(q=NULL)q=p;ch=p-data .len gth-request
10、;else if(q-data .len gth data .len gth)q=p;ch=p-data .len gth-request;p=p-n ext;if(q=NULL) return ERROR;/ 沒有找到空閑塊 else if(q-data .len gth=request)q-data .len gth=1;return OK;elsetemp-prior=q-prior;temp-n ext=q; temp-data.address=q-data.address; temp-data .num=q-data .num;q-prior- n ext=temp; q-prior
11、=temp;q-data.address+=request;q-data .len gth=ch;q-data .nu m+=1;return OK;return OK;/分配主存Status allocati on (i nt a)int request;/ 申請內存大小printf(”請輸入申請分配的主存大小(單位:KB):);scan f(%d,&request);if(requestn ext)if(q=p)if(q-prior-data.state=0&q-n ext-data.state!=O) q-prior-data .len gth+=q-dataen gth;q-prior
12、- n ext=q _n ext;q_n ext-prior=q-prior;q=q-prior;q-data.state=0;q-data .num=flag-1;if(q-prior-data.state!=0&q-n ext-data.state=0)分配成功!*);*好*分配成功! *););分配成功!*););q-data .len gth+=q-n ext-data .len gth;q-n ext=q-n ext-n ext;q_n ext-n ext_prior=q;q-data.state=O;q-data .num=flag;if(q-prior-data.state=0&
13、q-n ext-data.state=0)q-prior-data .len gth+=q-dataen gth;q-prior- n ext=q _n ext;q_n ext-prior=q-prior;q=q-prior;q-data.state=0;q-data .num=flag-1;if(q-prior-data.state!=0&q-n ext-data.state!=O)q-data.state=0;return OK;Status deal2(Node *p)處理回收空間Node *q=first;for(;q!=NULL;q=q_n ext)if(q=p)if(q-prior
14、-data.state=0&q-n ext-data.state!=0)q-prior-data .len gth+=q-data .len gth;q-prior- n ext=q _n ext;q_n ext-prior=q-prior;q=p-prior;q-data.state=0;q-data .num=flag-1;if(q-prior-data.state!=0&q-n ext-data.state=0)q-data.state=0;if(q-prior-data.state=0&q-n ext-data.state=0) q-prior-data .len gth+=q-dat
15、aen gth;q-prior- n ext=q _n ext;q_n ext-prior=q-prior; q=q-prior;q-data.state=0;q-data .num=flag-1;if(q-prior-data.state!=0&q-n ext-data.state!=O)q-data.state=0;return OK;/主存回收Status recovery(i nt flag)Node *p=first;for(;p!=NULL;p=p-n ext)if(p-data. num=flag)if(p-prior=first)if(p-next!=end)/ 當前P指向的下
16、一個不是最后一個時if(p- next-data.state=O)/與后面的空閑塊相連p-data .len gth+=p-n ext-data .len gth;p_n ext- n ext-prior=p;p-n ext=p-n ext-n ext;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-n ext!=e nd)deal
17、1(p);elsedeal2(p);/ 結束 if(p-prior!=block_first)的情況/ 結束 if(p-data.num=flag)的情況printf(t*回收成功 *);return OK; /主函數void mai n()int i; /操作選擇標記int a;/算法選擇標記*n);printf(prin tf(tt用以下三種方法實現主存空間的分配 n);printf(t(1)首次適應算法t(2)最佳適應算法t(3)最差適應算法n);printf(*n);prin tf(n);prin tf(請輸入所使用的內存分配算法:”);scan f(%d, &a);while(a3)
18、printf(”輸入錯誤,請重新輸入所使用的內存分配算法:n);sca nf(%d,&a);switch(a)使用首次適應算法:* n );break; 使用最佳適應算法:* n );break; 使用最壞適應算法:* n );break;case 1:pri ntf(nt*case 2:pri ntf(nt*case 3:pri ntf(nt*開創空間表In itblock(); /while(1)show();printf(t1:分配內存t2: 回收內存tO: 退出n);prin tf(請輸入您的操作:);sea nf(%d,&i);if(i=1)alloeati on (a); /分配內
19、存else if(i=2) /內存回收printf(請輸入您要釋放的分區號:);scan f(%d, &flag);reeovery(flag);else if(i=0)printf(n 退出程序 n); break; / 退出else II輸入操作有誤prin tf(輸入有誤,請重試!);con ti nue;八、執行結果和結果分析初始化首次適應算法:請輸入所使用的內存分配算法江j使用首次適應算法;*-主存空間分配情況分區序號起始地址分區大小分區狀態a040己分配140600空閑當作業1、2、3順利分配內存空間后:金聲內存2=回收內存 0=退出*分酉 E.圭奩大小單位:KB:tHO 王存空間分配情況婭分區序號起始地址分區大小分區狀態H0轉聊己分配140130已分配217060已分配3230100已分配433U310空閑XKXMEKXMEJfXMEXXMEMXMEXXIgMKXXKXXJOEXXaCXXXXXatKXJEXiMaCKiMJCXiMJfKiMXXiMJfXiMJE2=回收內存0:退出回收序號2里面的內存:心址丄己內存姿的瑾ff: 2.譙要
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川應用技術職業學院《文學翻譯賞析》2023-2024學年第二學期期末試卷
- 天津生物工程職業技術學院《醫學分子生物學實驗技術》2023-2024學年第一學期期末試卷
- 武漢工程科技學院《地域史研究方法與實踐》2023-2024學年第二學期期末試卷
- 江蘇省南京玄武區六校聯考2025屆初三考前搶分(三)語文試題含解析
- 宜春市樟樹市2024-2025學年三年級數學第二學期期末檢測試題含解析
- 江西省景德鎮市名校2025屆中考仿真模擬沖刺卷(一)生物試題含解析
- 室內設計合同書訂立
- 簡單的合伙協議書
- 二零二五版鴨場租賃合同書
- 二零二五房屋建筑保修合同書
- (二模)2025年深圳市高三年級第二次調研考試物理試卷(含標準答案)
- 小班健康活動:我會吃魚
- 2025年注冊會計師(專業階段)題庫完美版帶答案分析
- 專利代理師考試題庫含答案2024
- 云南師大附中2025屆高三下學期第六次檢測物理試卷含解析
- DB12 T1230-2023 政務信息資源共享 總體框架
- 市政排水移交協議書
- 廣西壯族自治區馬山縣實驗高中-雙休背后:從“要我學”到“我要學”的轉變-高三家長會【課件】
- 湖南省長沙市四大名校2024-2025學年高三2月月考語文試題(原卷版+解析版)
- 中職世界歷史試題及答案
- 《政府采購管理研究的國內外文獻綜述》5500字
評論
0/150
提交評論