2008年北大作業系統實踐
一、從一個文字檔案讀入首空閑塊和空閑塊數,格式如下(要求最多32行)
21 20
41 10
53 5
……
其中一行要求有兩個數
二、從讀入的數中判斷有沒有上下鄰塊,如果有要進行合併(回收)。
三、輸出回收過的空閑塊。(我的理解是不應該有相鄰的塊存在,因為已經經過合併了)
程式比較簡單,我的做法可能有的地方欠妥,歡迎大家指正,謝謝
(日文系統.net 2003中除錯通過:)
- #include "stdafx.h"
- typedef struct FreeBlock
- {
- int firstBlock; //首空閑塊塊號
- int count; //空閑塊數
- }FreeBlock;
- /**************空閑塊讀入****************/
- int inputFromFile(FreeBlock *tables)
- {
- int i = 0,j;
- char strTem[20],strNum[20],strFile[256],*p,*q;
- printf("請輸入檔名:");
- scanf("%s",strFile);
- FILE *file = fopen(strFile,"r");
- if(file==NULL)
- {
- printf("輸入的檔案%s不存在/n",strFile);
- return -1;
- }
- while(!feof(file)&&i<32)//空閑塊數最大32個
- {
- p = strTem;
- fgets(p,20,file);//一次讀入整行資料
- for(j=0;j<1 && (q = strchr(p,' '));j++) //檔案分割符為空格
- {
- memset(strNum,0,sizeof(strNum)*sizeof(char));
- strncpy(strNum,p,q-p);
- (&tables[i])->firstBlock = atoi(strNum); //一行僅存首空閑塊和空閑塊數
- p=q+1;
- }
- (&tables[i])->count = atoi(p);
- i++;
- }
- fclose(file);
- return 0;
- }
- /**************空閑塊回收****************/
- int reclaimBlock(FreeBlock *tables)
- {
- int i,j;
- for(i=1;i<32;i++)
- {
- for(j=0;j<=i;j++)
- {
- //上鄰空閑塊
- if((&tables[i])->firstBlock + (&tables[i])->count == (&tables[j])->firstBlock)
- {
- //覆蓋上鄰
- (&tables[i])->count += (&tables[j])->count;
- (&tables[j])->firstBlock = 0;
- (&tables[j])->count = 0;
- }
- //下鄰空閑塊
- if((&tables[i])->firstBlock == (&tables[j])->firstBlock + (&tables[j])->count)
- {
- (&tables[j])->count += (&tables[i])->count;
- //覆蓋下鄰
- (&tables[i])->firstBlock = 0;
- (&tables[i])->count = 0;
- }
- }
- }
- return 0;
- }
- /**************初始化****************/
- void init(FreeBlock *tables)
- {
- int i=0;
- while(i<32)
- {
- (&tables[i])->firstBlock = 0;
- (&tables[i])->count = 0;
- i++;
- }
- }
- /**************空閑塊顯示****************/
- void displayBlock(FreeBlock *tables)
- {
- int i,j=0;
- printf("空閑塊首塊號 空閑塊個數/n");
- for(i=0;i<32;i++)
- {
- if((&tables[i])->firstBlock!=0)
- printf("%8d%8d/n",(&tables[i])->firstBlock,(&tables[i])->count);
- else
- j++;
- }
- for(i=0;i<j;i++)
- printf("%8d%8d/n",0,0);
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- int i=0;
- FreeBlock freeTables[32]; //空閑塊
- init(freeTables);//初始化
- //讀入檔案
- i = inputFromFile(freeTables);
- if(i==-1)//輸入錯誤
- {
- system("pause");
- return -1;
- }
- //回收空閑塊
- reclaimBlock(freeTables);
- //顯示空閑塊
- displayBlock(freeTables);
- system("pause");
- return 0;
- }
相關文章
- 大作業——商場家電部管理系統
- 餐廳點餐系統GUI——Java大作業GUIJava
- 作業系統課程實踐報告作業系統
- 各大作業系統AIX/HPUX/Solaris/Linux下的系統日誌作業系統AILinux
- java大作業總結——圖書借閱管理系統Java
- Linux作業系統升級openssh實踐Linux作業系統
- java程式與設計大作業-馬拉松管理系統Java
- 大作業
- C++期末大作業 圖書評論和推薦系統C++
- MySQL大作業MySql
- java大作業Java
- 《大話作業系統——做堅實的工程實踐派》(0)作業系統
- 《大話作業系統——做堅實的工程實踐派》(1)作業系統
- 《大話作業系統——做堅實的工程實踐派》(2)作業系統
- 《大話作業系統——做堅實的工程實踐派》(9)作業系統
- 《大話作業系統——做堅實的工程實踐派》(7)作業系統
- 《大話作業系統——做堅實的工程實踐派》(6)作業系統
- 《大話作業系統——做堅實的工程實踐派》(3)作業系統
- 《大話作業系統——做堅實的工程實踐派》(4)作業系統
- 《大話作業系統——做堅實的工程實踐派》(5)作業系統
- O2O 行業 IT 系統架構實踐分享行業架構
- 2020系統綜合實踐 第七次實踐作業 28組
- 實踐:GNU構建系統
- Spark推薦系統實踐Spark
- SAP系統與商業銀行管理會計的實踐
- Mac、Windows、Linux三大作業系統,如何進行選擇?MacWindowsLinux作業系統
- 系統思維實踐入門
- 若依管理系統前端實踐前端
- Zabbix監控系統深度實踐
- 關於《推薦系統實踐》
- 商業銀行押品管理系統建設探索和實踐
- 製造業生產管理系統(500強制造企業數字化實踐)
- 阿里YunOS已成第三大作業系統,接下來要做什麼阿里作業系統
- 《大話作業系統——紮實project實踐派》(8.2)(除了指令集.完)作業系統Project
- Python期末大作業Python
- pta大作業總結
- 軟體工程大作業軟體工程
- pta兩次大作業