程式設計Week9 A 咕咕東的目錄管理器

2021-10-05 23:43:46 字數 3555 閱讀 8892

每組測試資料的輸出結果間需要輸出一行空行。注意大小寫敏感。

以封裝的思想來實現每個小功能,由於有undo的操作,因此對於mkdir、rm、cd三種操作需要記錄每一次操作的過程;

建立乙個目錄相關的結構體,其中包括檔名,當前檔案的子目錄的map,父節點以及當前檔案下子樹(目錄)的規模,當前目錄下先序遍歷、後序遍歷的幾個檔名稱以及乙個標記當前目錄是否被更新過的標識量;

對每個命令挨個實現:

#include

#include

#include

#include

#include

using

namespace std;

struct dict

;dict node[

500010];

mapint> opr;

//將操作的字元形式轉為數值形式

int cnt,now;

//cnt是當前已有的目錄節點個數,now是當前目錄節點

vector

int,

int>

>

> v;

//用於記錄已經實現的mkdir、re、cd操作名和操作目錄節點

void

update

(int id,

int num)

}void

mkdir

(string s)

cnt++

; node[now]

.mp.

insert

(pair

int>

(s,cnt));

node[cnt]

.name=s;

node[cnt]

.fa=now;

node[cnt]

.sz=1;

node[cnt]

.mp.

clear()

; node[cnt]

.pre.

clear()

; node[cnt]

.bck.

clear()

; node[cnt]

.tag=

false

;update

(now,1)

; v.

push_back

(make_pair

("mkdir"

,make_pair

(now,cnt)))

; cout<<

"ok"

<

}void

rm(string s)

int d=node[now]

.mp[s]

; node[now]

.mp.

erase

(s);

update

(now,(-

1)*node[d]

.sz)

; v.

push_back

(make_pair

("rm"

,make_pair

(now,d)))

; cout<<

"ok"

<

}void

cd(string s)

v.push_back

(make_pair

("cd"

,make_pair

(now,node[now]

.fa)))

; now=node[now]

.fa;

}else

v.push_back

(make_pair

("cd"

,make_pair

(now,node[now]

.mp[s]))

);now=node[now]

.mp[s];}

cout<<

"ok"

<

}voidsz(

)voidls(

) map

int>

::iterator iter=node[now]

.mp.

begin()

;if(node[now]

.mp.

size()

<=10)

else}}

void

undo()

pair

int,

int>

> e=v[v.

size()

-1];

v.pop_back()

;int tmp=now;

if(e.first==

"mkdir"

)else

if(e.first==

"rm"

)else

now=e.second.first;

cout<<

"ok"

<

}void

pushdown

(int id)

;//宣告

void

pretrack

(int id)

return;}

int t=1;

for(

;iter!=node[id]

.mp.

end();

++iter)

if(t>=5)

break;}

}void

bcktrack

(int id)}if

(t>=5)

break;if

(iter==node[id]

.mp.

begin()

)break;}

}void

pushdown

(int id)

void

tree()

else

}void

opr_init()

void

init()

intmain()

if(opr[o]==1

)if(opr[o]==2

)if(opr[o]==3

)if(opr[o]==4

)if(opr[o]==5

)if(opr[o]==6

)}}return0;

}

這道題的難點,我認為有以下幾點:

這道題對我而言難度還是很大的,更多都是照著助教學長給的**來寫,而其中tree的處理辦法還是沒能完全掌握,只能說是看懂了**所寫,但自己來寫估計還是無法完成,總而言之,這道題還是一道值得多多回顧反思的一道題。

WEEK9 A 咕咕東的目錄管理器

咕咕東的雪梨電腦的作業系統在上個月受到宇宙射線的影響,時不時發生故障,他受不了了,想要寫乙個高效易用零bug的作業系統 這工程量太大了,所以他定了乙個小目標,從實現乙個目錄管理器開始。前些日子,東東的電腦終於因為過度收到宇宙射線的影響而宕機,無法寫 他的好友tt正忙著在b站看貓片,另一位好友瑞神正忙...

week9 作業A 咕咕東的目錄管理器

咕咕東的雪梨電腦的作業系統在上個月受到宇宙射線的影響,時不時發生故障,他受不了了,想要寫乙個高效易用零bug的作業系統 這工程量太大了,所以他定了乙個小目標,從實現乙個目錄管理器開始。前些日子,東東的電腦終於因為過度收到宇宙射線的影響而宕機,無法寫 他的好友tt正忙著在b站看貓片,另一位好友瑞神正忙...

Week9 A 目錄管理器

咕咕東的雪梨電腦的作業系統在上個月受到宇宙射線的影響,時不時發生故障,他受不了了,想要寫乙個高效易用零bug的作業系統 這工程量太大了,所以他定了乙個小目標,從實現乙個目錄管理器開始。前些日子,東東的電腦終於因為過度收到宇宙射線的影響而宕機,無法寫 他的好友tt正忙著在b站看貓片,另一位好友瑞神正忙...