可變存儲分配和回收

實驗說明:

求採用某種分配算法(首次適應算法,循環首次適應算法,最佳適應算法,最差使用算法)實現可變存儲算法的模擬操作,並實現回收空間的操作,這裏要求使用鏈表的形式實現,建議採用最佳適應算法,首次適應算法

提示:這裏可以使用兩個鏈表,一個鏈表中存儲已經分配的內存區,另一個鏈表中存儲未分配的存儲區,回收時採用模擬回收的方法,即輸入一個內存區號,在已分配的鏈表中找到這個內存塊,刪除,併合併到另一個未分配的鏈表中,這裏要考慮回收的各種情況,即單獨的分區,可以和上面空閒區合併的分區,可以和下面空閒區合併的分區,可以和上下分區合併的分區。

    其中初始數據,可以自己輸入,對於分配和回收的數據自己輸入,要求對於分配和回收的各種分支情況,均可以測試到

3 實驗評分:

如學生程序完全正確,且程序格式規範,可讀性好,建議80分以上,如果學生的部分程序雖然存在局部問題,但某些地方具有一定的改進或創新,對於這種情況,建議評分在80分以下

如果有算法不正確或調試有問題,一般成績不高於75分,如果有大部分程序都有問題 ,或存在抄襲,則不能及格。

測試數據:輸入容量:1000

申請20010015050100

釋放10050

申請40

釋放40

釋放100

 

 

 

 

Struct  block

{

   Int no; //編號

Int begging //起始位置

   Int size; //大小

   Int ending; //終止位置

   Struct block *next;

}

Struct block *unuse_list,*use_list; //爲方便,採用帶頭結點的鏈表

Int numble; //塊的編號

Void main()

{

  Void require();

  Void release();

Numble=0;

輸入總的空間大小,初始位置默認爲0

  Put it into the unuselist;

  Do while .t.

    Printf(“*****************”);

    Printf(“1 require”)

  Printf(“2 release”);

Printf(“other :exit);

Printf(“*****************”);

    Scanf(“%d”,&choice)

     If choice= =1  require();

  else

If choice= =2  release();

 Else

Break;

}

 

Void require()

{

  輸入申請的空間的大小;

  在未使用鏈表中找出第一個符合大小的空閒塊

  把這個空閒塊的被申請部分形成的新塊放入使用鏈表中(產生新的編號,修改塊的基本信息)

  If there is remainder

   {delete the block from unuselist 

重新放入未使用鏈表中(從小到大,修改塊的基本信息);

}

}

 

Void release()

{

   顯示使用鏈表和未使用鏈表

   輸入要回收的塊的編號

   從已使用鏈表中刪除該塊

   把該塊放入空閒鏈表中(考慮四種回收的情況,考慮合併的操作,並要求從小到大放入)

}

 

源代碼:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章