存儲(chǔ)管理中分區(qū)分配算法的模擬_第1頁(yè)
存儲(chǔ)管理中分區(qū)分配算法的模擬_第2頁(yè)
存儲(chǔ)管理中分區(qū)分配算法的模擬_第3頁(yè)
存儲(chǔ)管理中分區(qū)分配算法的模擬_第4頁(yè)
存儲(chǔ)管理中分區(qū)分配算法的模擬_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

沈陽(yáng)理工大學(xué)課程設(shè)計(jì)專(zhuān)用紙PAGE沈陽(yáng)理工大學(xué)PAGE7成績(jī)?cè)u(píng)定表學(xué)生姓名班級(jí)學(xué)號(hào)專(zhuān)業(yè)計(jì)算機(jī)科學(xué)與技術(shù)課程設(shè)計(jì)題目1存儲(chǔ)管理中分區(qū)分配算法的模擬2已知二叉樹(shù)的中序和先序序列,求后序序列評(píng)語(yǔ)組長(zhǎng)簽字:成績(jī)?nèi)掌?012年12月25日課程設(shè)計(jì)任務(wù)書(shū)學(xué)院信息科學(xué)與工程學(xué)院專(zhuān)業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生姓名班級(jí)學(xué)號(hào)課程設(shè)計(jì)題目1存儲(chǔ)管理中分區(qū)分配算法的模擬2已知二叉樹(shù)的中序和先序序列,求后序序列實(shí)踐教學(xué)要求與任務(wù):課程設(shè)計(jì)任務(wù)當(dāng)作業(yè)運(yùn)行時(shí),由操作系統(tǒng)將內(nèi)存空間分配給作業(yè)。已知二叉樹(shù)的中序和先序序列,求后序序列2課程設(shè)計(jì)要求1)分區(qū)管理是內(nèi)存管理的一種方式,模擬分區(qū)分配算法采用最佳適應(yīng)、最先適應(yīng)等方式分配內(nèi)存。選擇不同的算法,對(duì)作業(yè)分配所需要的空間。當(dāng)空間回收時(shí),將空閑空間與被回收空間相連的部分連接成一塊較大的空間。2)完成需求分析,建立數(shù)學(xué)模型,編寫(xiě)程序,調(diào)試。工作計(jì)劃與進(jìn)度安排:第17周:設(shè)計(jì)任務(wù)分析和總體設(shè)計(jì),軟件算法和流程設(shè)計(jì),軟件編碼實(shí)現(xiàn)。第18周:軟件總體調(diào)試,交課程設(shè)計(jì)報(bào)告、答辯、驗(yàn)收程序.指導(dǎo)教師:201年月日專(zhuān)業(yè)負(fù)責(zé)人:201年月日學(xué)院教學(xué)副院長(zhǎng):201年月日目錄1需求分析……………………41。1存儲(chǔ)管理中分區(qū)分配算法的模擬…………41.2已知二叉樹(shù)的中序和先序序列,求后序序列……………62概要設(shè)計(jì)………42.1存儲(chǔ)管理中分區(qū)分配算法的模擬…………42.1。1概述…………………42。1。2結(jié)構(gòu)設(shè)計(jì)說(shuō)明………42。1.3算法流程圖…………62.2已知二叉樹(shù)的中序和先序序列,求后序序列……………62。2.1概述…………………62。2。2結(jié)構(gòu)說(shuō)明……………62.2.3算法流程圖…………73詳細(xì)設(shè)計(jì)………83.1存儲(chǔ)管理中分區(qū)分配算法的模擬…………83.2已知二叉樹(shù)的中序和先序序列,求后序序列……………124調(diào)試分析………164.1存儲(chǔ)管理中分區(qū)分配算法的模擬…………164.2已知二叉樹(shù)的中序和先序序列,求后序序列……………195課設(shè)總結(jié)………206參考文獻(xiàn)………211需求分析1.1存儲(chǔ)管理中分區(qū)分配算法的模擬當(dāng)作業(yè)運(yùn)行時(shí),由操作系統(tǒng)將內(nèi)存空間分配給作業(yè).分區(qū)管理是內(nèi)存管理的一種方式,模擬分區(qū)分配算法采用最佳適應(yīng)、最先適應(yīng)等方式分配內(nèi)存。選擇不同的算法,對(duì)作業(yè)分配所需要的空間.當(dāng)空間回收時(shí),將空閑空間與被回收空間相連的部分連接成一塊較大的空間。1。2已知二叉樹(shù)的中序和先序序列,求后序序列。2概要設(shè)計(jì)2.1存儲(chǔ)管理中分區(qū)分配算法的模擬2.1。1概述模擬分區(qū)分配算法采用最佳適應(yīng)、最先適應(yīng)等方式分配內(nèi)存。選擇不同的算法,對(duì)作業(yè)分配所需要的空間.當(dāng)空間回收時(shí),將空閑空間與被回收空間相連的部分連接成一塊較大的空間。2.1.2結(jié)構(gòu)設(shè)計(jì)說(shuō)明.空閑分區(qū)表的設(shè)計(jì),該空閑分區(qū)表記錄內(nèi)存中未使用的各個(gè)分區(qū),記錄內(nèi)容有未使用分區(qū)的大小、首地址,用鏈表就行管理;相關(guān)代碼如下:Typedefstructfree{Intsize;//分區(qū)大小Intaddress;//首地址free*next;};②內(nèi)存分區(qū)表設(shè)計(jì),用以表示當(dāng)前內(nèi)存的使用情況,記錄內(nèi)容已使用分區(qū)的大小、首地址,用鏈表進(jìn)行管理,相關(guān)數(shù)據(jù)結(jié)構(gòu)如下:Typedefstructmap{Intsize;//分區(qū)大?。蒼taddress;//首地址map*next;};③進(jìn)程申請(qǐng)隊(duì)列的設(shè)計(jì),用作進(jìn)程到達(dá)的緩沖隊(duì)列,記錄各進(jìn)程的相關(guān)信息,如進(jìn)程的所需內(nèi)存的大小、進(jìn)程名,相關(guān)數(shù)據(jù)結(jié)構(gòu)如下:Typedefstructpro{Intsize;//分區(qū)大小sringname;pro*next;};2。1.3算法流程圖選取部分核心流程圖如下:2.2已知二叉樹(shù)的中序和先序序列,求后序序列2。2。1概述已知二叉樹(shù)的前序后序遍歷和中序遍歷求后序2。2.2結(jié)構(gòu)設(shè)計(jì)及說(shuō)明1、確定樹(shù)的根節(jié)點(diǎn)。樹(shù)根是當(dāng)前樹(shù)中所有元素在前序遍歷中最先出現(xiàn)的元素。?2、求解樹(shù)的子樹(shù)。找出根節(jié)點(diǎn)在中序遍歷中的位置,根左邊的所有元素就是左子樹(shù),根右邊的所有元素就是右子樹(shù).若根節(jié)點(diǎn)左邊或右邊為空,則該方向子樹(shù)為空;若根節(jié)點(diǎn)左邊和右邊都為空,則根節(jié)點(diǎn)已經(jīng)為葉子節(jié)點(diǎn)。3、遞歸求解樹(shù)。將左子樹(shù)和右子樹(shù)分別看成一棵二叉樹(shù),重復(fù)1、2、3步,直到所有的節(jié)點(diǎn)完成定位。舉例說(shuō)明:假設(shè)前序遍歷為adbgcefh,中序遍歷為dgbaechf前序遍歷是先訪問(wèn)根節(jié)點(diǎn),然后再訪問(wèn)子樹(shù)的,而中序遍歷則先訪問(wèn)左子樹(shù)再訪問(wèn)根節(jié)點(diǎn)而中序遍歷則先訪問(wèn)左子樹(shù)再訪問(wèn)根節(jié)點(diǎn)那么把前序的a取出來(lái),然后查找a在中序遍歷中的位置就得到dgbaechf然后查找那么我們就知道dgb是左子樹(shù)echf是右子樹(shù),因?yàn)閿?shù)量要吻合所以前序中相應(yīng)的dbg是左子樹(shù)cefh是右子樹(shù)然后就變成了一個(gè)遞歸的過(guò)程。開(kāi)始2.2。3算法流程圖開(kāi)始定義倆個(gè)棧類(lèi)型定義倆個(gè)棧類(lèi)型structsnodestructsnode1主函數(shù)voidmain()主函數(shù)voidmain()子函數(shù)一創(chuàng)建二叉樹(shù)子函數(shù)一創(chuàng)建二叉樹(shù)子函數(shù)二后序遍歷出二叉樹(shù)子函數(shù)二后序遍歷出二叉樹(shù)結(jié)束結(jié)束3詳細(xì)設(shè)計(jì)3。1存儲(chǔ)管理中分區(qū)分配算法的模擬程序:1。有大小恰好合適的空閑塊if(p-〉data.state==Free&&p->data。size==request){p-〉data.stat(yī)e=Busy;p—>data.ID=ID;returnOK;break;}2.有空閑塊能滿足需求且有剩余if(p—>dat(yī)a.stat(yī)e==Free&&p->data。size>request){temp—〉prior=p-〉prior;temp—〉next=p;temp—>data.address=p—〉dat(yī)a。address;p->prior->next=temp;p->prior=temp;p—>data.a(chǎn)ddress=temp->dat(yī)a.a(chǎn)ddress+temp-〉dat(yī)a。size;p—>data.size—=request;returnOK;}3.回收內(nèi)存if(p-〉dat(yī)a.ID==ID)p->data.stat(yī)e=Free(cuò);p->dat(yī)a.ID=Free;if(p—〉prior—>data.state==Free)//與前面的空閑塊相連{p—〉prior—>data。size+=p-〉data.size;p—>prior-〉next=p—〉next;p—〉next->prior=p—>prior;}if(p—>next-〉data.state==Free(cuò))//與后面的空閑塊相連{p-〉dat(yī)a.size+=p->next-〉dat(yī)a。size;p—>next->next-〉prior=p;p->next=p—〉next->next;}另外若檢查到有“等于"的情況,就可以直接分配,若沒(méi)有,則繼續(xù)檢查是否有“大于”的情況:if(freeblock[i].state==1&&freeblock[i]。size==applyarea) ?{ ?freeblock[i]。state=0;? tag=1;?? ??returnfreeblock[i].startaddress;? ? }檢查“大于”的情況:先把所有大于所要求的空閑區(qū)放入數(shù)組,for(i=0;i〈N;i++){if(freeblock[i]。state==1&&free(cuò)block[i]。size〉applyarea)a[j++]=i;}再?gòu)臄?shù)組中挑出最小的那個(gè):果數(shù)組中的元素大于一個(gè),則需要一個(gè)個(gè)比較過(guò)去,然后取出最小的那個(gè)分配給作業(yè):if(j〉1){?h=a[0];?min=freeblock[h];??for(k=1;k<j;k++)? {h=a[k];if(free(cuò)block[h].size<min.size){ ??mid。size=free(cuò)block[h].size; ???mid.stat(yī)e=freeblock[h]。state;? ??mid。startaddress=free(cuò)block[h]。startaddress;????free(cuò)block[h].size=min。size;? ? free(cuò)block[h].stat(yī)e=min.stat(yī)e;??? freeblock[h].startaddress=min。startaddress; ??min.size=mid。size;????min.stat(yī)e=mid。state;????min.startaddress=mid。startaddress;}}min.startaddress=min.startaddress+applyarea;min.size=min。size-applyarea;tag=1;??returnmin.startaddress-applyarea;}如果數(shù)組中只有一個(gè)元素,則直接分配給作業(yè):if(j==1){h=a[0];min=free(cuò)block[h];min.startaddress=min.startaddress+applyarea;min。size=min.size-applyarea;? tag=1;??returnmin.startaddress-applyarea;}如果沒(méi)有滿足條件的空閑區(qū),分配不成功,返回-1if(tag==0)return—1;3.2已知二叉樹(shù)的中序和先序序列,求后序序列1.定義二叉樹(shù)節(jié)點(diǎn)類(lèi)型structnode{chardata;structnode*lchild;structnode*rchild;}BTree(cuò);2.定義兩個(gè)棧的類(lèi)型structsnode{inttop;inta[MAX];};structsnode1{inttop;structnode*c[MAX];};3.主函數(shù)voidmain(){chara[MAX]={0};charb[MAX]={0};charc=0,d=0;inti=0,j=0;structnode*g;snodes;snode1s4,s1;Initstack(&s);Initstack1(&s4);Initstack1(&s1);printf("請(qǐng)輸入先序序列:\n");while(c!='\n'){c=getchar();a[i]=c;i++;}printf("請(qǐng)輸入中序序列:\n”);while(d!='\n'){d=getchar();b[j]=d;j++;}g=create(&s,&s1,a,b);printf(”遍歷輸出后序序列:\n");visit(&s4,g);printf("\n”);}4.子函數(shù)一,創(chuàng)建二叉樹(shù)structnode*create(snode*s,snode1*s1,chara[MAX],charb[MAX]){?inti=1,num,x;structnode*p,*q,*r,*root;p=(structnode*)malloc(sizeof(BTree));?p->lchild=NULL;p->rchild=NULL;p—>data=a[0];root=p;x=seek(a[0],b);push(s,x);push1(s1,p);while(a[i]!='\n'){num=see(cuò)k(a[i],b);p=(structnode*)malloc(sizeof(BTree));p->lchild=NULL;p->rchild=NULL;p->data=a[i];if(num〈gettop(s)){q=get(s1);q->lchild=p;push(s,num);push1(s1,p);}elseif(num>gettop(s)){while(s->top!=—1&&num〉gettop(s)){r=pop1(s1);pop(s);}r->rchild=p;push(s,num);push1(s1,p);}i++;}returnroot;}5。子函數(shù)二,后序遍歷輸出二叉樹(shù)voidvisit(snode1*s,structnode*root){structnode*p;p=root;?do{while(p!=NULL){push1(s,p);p=p-〉lchild;}while(s->top!=—1&&give(s)—〉rchild==p){p=pop1(s);printf("%c",p->dat(yī)a);}if(s—〉top!=—1)p=give(s)->rchild;}while(s-〉top!=—1);}4調(diào)試分析4.1存儲(chǔ)管理中分區(qū)分配算法的模擬實(shí)現(xiàn)了設(shè)計(jì)的所有要求,選取部分運(yùn)行示意圖。1)。輸入選擇1首次適應(yīng)法并選擇1分配內(nèi)存,過(guò)程如下:圖4-12)。輸入選擇3查看分別配,過(guò)程如下:圖4-23).輸入選擇2最佳適應(yīng)算法并選擇1分配內(nèi)存,過(guò)程如下:圖4—34)。輸入選擇2回收內(nèi)存后選擇3查看分配,過(guò)程如下:圖4—45).輸入選擇3循環(huán)首次適應(yīng)法并選擇1分配內(nèi)存,過(guò)程如下:圖4-56).菜單界面下輸入選擇回收內(nèi)存并選擇3查看分配,過(guò)程如下:圖4-64.2已知二叉樹(shù)的中序和先序序列,求后序序列輸入前序和中序序列得到結(jié)果5課程總結(jié)不知不覺(jué)期末的腳步已悄悄逼近,我們結(jié)束了一科又一科的緊張復(fù)習(xí),迎接著一次又一次別開(kāi)生面的考試,這段時(shí)間給我最大的體會(huì)就是好累,好枯燥!本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)是由老師提供電子框架,由我們獨(dú)立完成,通過(guò)對(duì)課程設(shè)計(jì)的制作,發(fā)現(xiàn)了自身許許多多的不足,同時(shí)也學(xué)到許許多多的東西。是我們每一個(gè)同學(xué)都受益匪淺!通過(guò)對(duì)本次課程設(shè)計(jì)的深入了解,我發(fā)現(xiàn)了程序中的一些問(wèn)題,和一些優(yōu)缺點(diǎn),現(xiàn)在就舉出幾個(gè)簡(jiǎn)單的例子吧:優(yōu)點(diǎn);實(shí)現(xiàn)了多個(gè)作業(yè)或進(jìn)程對(duì)內(nèi)存的共享,有助于多道程序設(shè)計(jì),從而提高了系統(tǒng)利用率。該方法要求的硬件支持少,管理算法簡(jiǎn)單,因而實(shí)現(xiàn)容易。缺點(diǎn):內(nèi)存利用率仍然不高。和單一連續(xù)分配算法一樣,存儲(chǔ)器中可能含有從未用過(guò)的信息。而且,還存在著

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論