版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)</b></p><p><b> 樹的遍歷</b></p><p><b> 目 錄</b></p><p><b> 1 設(shè)計(jì)題目1</b></p><p><b> 2 設(shè)計(jì)分析
2、2</b></p><p><b> 3 設(shè)計(jì)實(shí)現(xiàn)4</b></p><p> 4.2 測試輸入13</p><p> 4.3 正確輸出14</p><p> 4.4 實(shí)際輸出16</p><p> 5 分析與探討17</p><p>
3、5.1 測試結(jié)果分析17</p><p> 5.2 探討與改進(jìn)17</p><p><b> 6 設(shè)計(jì)小結(jié)17</b></p><p> 1 設(shè)計(jì)題目 </p><p> 給出Unix下目錄和文件信息,要求編程實(shí)現(xiàn)將其排列成一定縮進(jìn)的樹。具體要求如下。</p><p>
4、<b> 輸入要求:</b></p><p> 輸入數(shù)據(jù)包含幾個測試方案。每一個案例由幾行組成,每一行都代表了目錄樹的層次結(jié)構(gòu)。第一行代表目錄的根節(jié)點(diǎn)。若是目錄節(jié)點(diǎn),那么它的孩子節(jié)點(diǎn)將在第二行中被列出,同時用一對圓括號“()”界定。同樣,如果這些孩子節(jié)點(diǎn)鐘某一個也是目錄的話,那么這個目錄所包含的內(nèi)容將在隨后的一行中列出,有一對圓括號將首位界定。目錄的輸入格式為:*name size,文件
5、的輸入格式為:name size,其中*代表當(dāng)前節(jié)點(diǎn)的目錄,name代表文件或目錄的名稱,由一串長度不大于10的字符組成,并且name字符串中不能包含有‘(’,‘)’,‘[’,‘]’,‘*’。size是該文件/目錄的大小,為大于0的整數(shù)。每一個案例中最多只能包含10層,每一層最多有10個文件/目錄。</p><p><b> 輸出要求:</b></p><p>
6、對每一個測試案例,輸出時要求:第d層的文件/目錄名前面需要插入8*d個空格,兄弟節(jié)點(diǎn)之間要在同一列上。不要使用Tab(制表符)來統(tǒng)一輸出的縮進(jìn)。每一個目錄的大小(size)是它包含的所有子目錄和文件大小以及它自身大小的總和。</p><p><b> 輸入例子:</b></p><p><b> */usr1</b></p>&
7、lt;p> (*mark 1 *alex 1)</p><p> (hw.c3 *course 1)(hw.c 5)</p><p> (aa.txt 12)</p><p><b> */usr 1</b></p><p><b> ()</b></p><p&
8、gt; 表示含有兩個不同的根目錄,目錄名都是/usr,第一個根目錄/usr下包含mark和alex兩個子目錄,mark目錄下包含大小為3的文件hw.c和子目錄course,alex目錄下有一個大小為5的文件hw.c,子目錄course下包含文件aa.txt,其大小為12;第二個根目錄/usr下為空。</p><p><b> 輸出例子:</b></p><p>
9、 |_*usr[24]</p><p> |_*mark[17]</p><p> | |_hw.c[3]</p><p> | |_*course[13]</p><p> | |_aa.txt[12]</p><p> |_*alex[6]</p>
10、<p><b> |_hw.c[5]</b></p><p> |_*/usr[1]</p><p><b> 2 設(shè)計(jì)分析</b></p><p> 目錄結(jié)構(gòu)是一種典型的樹形結(jié)構(gòu),為了方便對目錄的查找、遍歷等操作,可以選擇孩子兄弟雙親鏈表來存儲樹的結(jié)構(gòu)。程序中要求對目錄的大小進(jìn)行重新計(jì)算,根據(jù)用戶的輸
11、入來建立相應(yīng)的孩子兄弟雙親鏈表,最后輸出樹形結(jié)構(gòu)??梢砸靡粋€Tree類,將樹的構(gòu)造、銷毀、目錄的大小重新計(jì)算(reSize)、建立樹形鏈表結(jié)構(gòu)(parse)、樹形結(jié)構(gòu)輸出(outPut)等一系列操作都封裝起來,同時對于每一個樹的節(jié)點(diǎn),它的私有變量除了名稱(Name)、大小(Size)和層數(shù)(Depth)之外,根據(jù)孩子兄弟雙親鏈表表示的需要,還要設(shè)置三個指針,即父指針(Tree*parent)、下一個兄弟指針(Tree*NextSibl
12、ing)和第一個孩子指針(Tree*FirstChild)。</p><p> 1.建立樹形鏈表結(jié)構(gòu)的函數(shù)parse()</p><p> 根據(jù)輸入來確定樹形關(guān)系時,首先讀取根節(jié)點(diǎn)目錄/文件名和大小值,并根據(jù)這些信息建立一個新的節(jié)點(diǎn);然后讀入后面各行信息,對于同一括號中的內(nèi)容,即具有相同父節(jié)點(diǎn)的那些節(jié)點(diǎn)建立兄弟關(guān)聯(lián)。這個函數(shù)實(shí)際上是采取遍歷建立樹形鏈表結(jié)構(gòu)。</p>&l
13、t;p> 定義一個Tree*類型的數(shù)組treeArray[],用來存放目錄的節(jié)點(diǎn)信息,并定義兩個整型變量head和rear,head值用來標(biāo)記當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)位置,每處理完一對括號,head需要增加1,即下一對待處理括號的父節(jié)點(diǎn)在treeArray[]中要往后移一個位置。如果當(dāng)前處理的節(jié)點(diǎn)是目錄類型,則將它放在treeArray[]數(shù)組中,rear是treeArray[]的下標(biāo)變量,加入一個目錄節(jié)點(diǎn)信息,rear就增加1;如果是
14、文件類型的目錄,則需要按照Name和Size建立一個樹的節(jié)點(diǎn),并和head所指的父節(jié)點(diǎn)建立關(guān)聯(lián),但是不用放入treeArray[]中。</p><p> 為進(jìn)一步說明這個樹形鏈表結(jié)構(gòu)的構(gòu)成,可參考圖3-1。</p><p> treeArray[]</p><p> 圖3-1通過parse()構(gòu)建的數(shù)據(jù)結(jié)構(gòu)事例</p><p> 它是
15、根據(jù)如下的具體輸入例子所形成的結(jié)構(gòu)示意。</p><p><b> 輸入:</b></p><p><b> */usr1</b></p><p> (*mark 1 *alex 1)</p><p> (hw.c3 *course 1)(hw.c 5)</p><p&g
16、t; (aa.txt 12)</p><p> 形成的數(shù)據(jù)結(jié)構(gòu)如圖2.5所示。</p><p> 2.目錄大小重新計(jì)算函數(shù)reSize()</p><p> 輸入數(shù)據(jù)中對目錄大小的初始值一般為1,而目錄的真正大小應(yīng)該是自身的大小和它包含的所有文件及子目錄的大小之和。因此,在計(jì)算目錄大小的時候,需要遍歷它下面所有的文件和子目錄,可以采用遞歸嵌套的后序遍歷方式。
17、另外要注意,采用孩子兄弟雙親鏈表表示時,父目錄下的所有子目錄和子文件都在該父目錄的左子樹上(右子樹第一個節(jié)點(diǎn)是該目錄的兄弟節(jié)點(diǎn)),所以白努力的時候只需要遍歷目錄對的左子樹即可。</p><p> 3.輸出樹形結(jié)構(gòu)的函數(shù)outPut()</p><p> 輸出是一個先序遍歷的過程。為完成對樹形的輸出,兄弟目錄之間需要相同的縮進(jìn),用‘|’上下相連,而父子目錄或父目錄和子文件之間需要設(shè)定正確
18、的縮進(jìn),子目錄或子文件要比父目錄向右縮進(jìn)8個空格。設(shè)置一個標(biāo)志數(shù)組flag[11](每個目錄下最大的層次數(shù)為10),當(dāng)前Tree*temp指針?biāo)傅墓?jié)點(diǎn)如果有兄弟節(jié)點(diǎn),則置flag數(shù)組值為1,否則置為0;并由此節(jié)點(diǎn)反復(fù)查詢它的祖先節(jié)點(diǎn)的情況,直到根節(jié)點(diǎn)為止。輸出時,遇到flag[]=1時,屏幕輸出“| ”,表明是兄弟節(jié)點(diǎn);遇到flag[]=0則輸出“ ”, 有相同的縮進(jìn),而子節(jié)點(diǎn)總比父節(jié)點(diǎn)向右縮進(jìn)8個空格。</p>
19、<p> 4.消除輸入中多余空格的函數(shù)skipWhiteSpace(string &s,int *i)</p><p> 從用戶輸入數(shù)據(jù)中讀入一行后,調(diào)用該函數(shù)來跳過s字符串中s[i]之后的空格,以方便后面的處理。</p><p> 此外,關(guān)于讀入目錄名稱、大小,以及將string類型的Size值轉(zhuǎn)換成int類型的函數(shù)的實(shí)現(xiàn),相對比較簡單,此處不再贅述。</
20、p><p><b> 3 設(shè)計(jì)實(shí)現(xiàn)</b></p><p> 利用visual c++,新建一個c++文件,將以下代碼輸入。</p><p> #include <string></p><p> #include <iostream></p><p> #inclu
21、de <fstream></p><p> using namespace std;</p><p> string s = "";</p><p> int startPos = 0;</p><p> ofstream outfile;</p><p> ifstream
22、infile;</p><p> /**構(gòu)造Tree類**/</p><p> class Tree{</p><p> string Name; /* 樹的根結(jié)點(diǎn)名稱 */</p><p> int Size; /* 樹的大小,用于統(tǒng)計(jì)這棵樹本身及其包含的所以子樹大小的總和*/</p><p&
23、gt; Tree* FirstChild; /* 指向它的第一個孩子結(jié)點(diǎn) */</p><p> Tree* NextSibling; /* 指向它的下一個兄弟結(jié)點(diǎn) */</p><p> Tree* parent; /* 指向雙親結(jié)點(diǎn) */</p><p><b> public:</b></p><p
24、> Tree(string Name = "", int Size = 0);/* 構(gòu)造函數(shù) */</p><p> void parse(); /* 根據(jù)輸入數(shù)據(jù)來建立樹形結(jié)構(gòu) */</p><p> void reSize(); /* 重新統(tǒng)計(jì)樹結(jié)點(diǎn)的大小 */</p><p> void outPut()
25、;/* 輸出樹形結(jié)構(gòu) */</p><p> ~Tree(); /* 析構(gòu)函數(shù) */</p><p><b> };</b></p><p> /*** 樹結(jié)點(diǎn)數(shù)組treeArray[],以及用來標(biāo)注雙親結(jié)點(diǎn)位置的head和目錄結(jié)點(diǎn)的rear***/</p><p> Tree* tre
26、eArray[100];</p><p> int head = 0, rear = 0;</p><p> /*** 建立只有一個結(jié)點(diǎn)的樹,其三個指針域均為空 ***/</p><p> Tree::Tree(string Name, int Size){</p><p> this->Name = Name;</p&g
27、t;<p> this->Size = Size;</p><p> FirstChild = NULL;</p><p> NextSibling = NULL;</p><p> parent = NULL;</p><p><b> }</b></p><p>
28、 /*** 析構(gòu)函數(shù),刪除同一根結(jié)點(diǎn)下的各個子結(jié)點(diǎn),釋放空間 ***/</p><p> Tree::~Tree()</p><p><b> {</b></p><p> Tree* temp;</p><p> Tree* temp1;</p><p> temp = FirstC
29、hild;</p><p> while(temp != NULL)</p><p><b> {</b></p><p> temp1 = temp;</p><p> temp = temp->NextSibling;</p><p> delete temp1;</p&
30、gt;<p><b> }</b></p><p><b> }</b></p><p> /* 先序遍歷根結(jié)點(diǎn)下的所有結(jié)點(diǎn),將每一個結(jié)點(diǎn)的Size值都加到根結(jié)點(diǎn)的Size中去**/</p><p> void Tree::reSize()</p><p><b>
31、 {</b></p><p> Tree* temp = this;</p><p> /*** 如果當(dāng)前的結(jié)點(diǎn)沒有孩子結(jié)點(diǎn),則它的Size值不變,即為輸入時候的值 ***/</p><p> if(temp->FirstChild != 0){</p><p> temp = temp->FirstChild
32、;</p><p> while(temp != 0){</p><p> temp->reSize();</p><p> Size += temp->Size;</p><p> temp = temp->NextSibling;</p><p><b> }</b>
33、;</p><p><b> }</b></p><p><b> }</b></p><p> /***檢查Name中有無非法字符**************/</p><p> bool checkName(string s)</p><p><b>
34、 {</b></p><p> if(s[0]!='*' && s.length() > 10)</p><p> return false;</p><p> if(s[0]=='*' && s.length() > 11)</p><p> r
35、eturn false;</p><p> if(s[0]!='*' && (s[0]=='(' || s[0]==')' || s[0]=='[' || s[0]==']'))</p><p> return false;</p><p> for(int i=1
36、;i<s.length();i++){</p><p> if(s[i]=='*' || s[i]=='(' || s[i]==')' || s[i]=='[' || s[i]==']')</p><p> return false;</p><p><b> }&
37、lt;/b></p><p> return true;</p><p><b> }</b></p><p> /*** 按照先序遍歷的方式有縮進(jìn)地來輸出樹形結(jié)構(gòu) ***/</p><p> void Tree::outPut()</p><p><b> {</
38、b></p><p> Tree* temp; /*用來指向當(dāng)前結(jié)點(diǎn)的祖先結(jié)點(diǎn)*/</p><p> Tree* temp1;</p><p> bool flag[11];/*用來標(biāo)志輸出縮進(jìn)、層次情況的數(shù)組*/</p><p><b> int i;</b></p><p>
39、outfile.open("output.txt",ios::app);</p><p> if(!outfile){</p><p> cout<<"cannot append the output file.\n";</p><p><b> exit(0);</b></p&g
40、t;<p><b> }</b></p><p> if(!checkName(Name)){</p><p> cout<<"input error!--"<<Name<<endl;</p><p><b> exit(0);</b></
41、p><p><b> }</b></p><p> outfile<<"|_"<<Name<<"["<<Size<<"]\n";</p><p> outfile.close();</p><p>
42、 /* 輸出當(dāng)前的結(jié)點(diǎn)信息 */</p><p> temp1= FirstChild;/* 用來指向當(dāng)前結(jié)點(diǎn)的子結(jié)點(diǎn) */</p><p> while(temp1 != NULL)</p><p><b> {</b></p><p> outfile.open("output.txt",
43、ios::app);</p><p> if(!outfile){</p><p> cout<<"cannot append the output file.\n";</p><p><b> exit(0);</b></p><p><b> }</b>&
44、lt;/p><p><b> i = 0;</b></p><p> temp = temp1;</p><p> while(temp->parent != NULL)</p><p><b> {</b></p><p> /*當(dāng)前temp指針?biāo)傅慕Y(jié)點(diǎn)如果有
45、兄弟結(jié)點(diǎn),則置flag數(shù)組值為1,否則置為0;并由此結(jié)點(diǎn)反復(fù)查詢它的祖先結(jié)點(diǎn)的情況,直到根結(jié)點(diǎn)為止*/</p><p> if(i>=10){</p><p> //檢查當(dāng)前的父目錄包含的子文件(或目錄數(shù))是否大于10;</p><p> cout<<"input error!--dictionary contains more t
46、han 10 levels."<<endl;</p><p><b> exit(0);</b></p><p><b> }</b></p><p> temp = temp->parent;</p><p> if(temp->NextSibling !
47、= NULL)</p><p> flag[i++] = true;</p><p><b> else</b></p><p> flag[i++] = false;</p><p><b> }</b></p><p> /*兄弟結(jié)點(diǎn)之間有相同的縮進(jìn),子結(jié)點(diǎn)比父
48、結(jié)點(diǎn)向右縮進(jìn)8個空格*/</p><p> while(i--)</p><p><b> {</b></p><p> if(flag[i] == true)</p><p> outfile<<"| ";</p><p><b>
49、 else</b></p><p> outfile<<" "; </p><p><b> }</b></p><p> outfile.close();</p><p> temp1->outPut();</p>&l
50、t;p> temp1 = temp1->NextSibling;</p><p><b> }</b></p><p><b> }</b></p><p> /*** 跳過字符串s中,第(*i)個之后多余的空格 ***/</p><p> void skipWhiteSpac
51、e(string& s, int* i)</p><p><b> {</b></p><p> while(s[*i] == '\t' || s[*i] == ' ')</p><p><b> (*i)++;</b></p><p><b>
52、; }</b></p><p> /*** 獲取輸入行中一對'()'之間的字符串,即為同一雙親結(jié)點(diǎn)下的子結(jié)點(diǎn) ***/</p><p> string getSubDir(string& line, int* startPos)</p><p><b> {</b></p><p&
53、gt; string res = "";</p><p> skipWhiteSpace(line,startPos);</p><p> while(line[*startPos] != ')')</p><p> res += line[(*startPos)++];</p><p> res
54、 += line[(*startPos)++];</p><p> skipWhiteSpace(line, startPos);</p><p> return res;</p><p><b> }</b></p><p> /*** 由于用戶輸入時候目錄的大小Size值為String類型,因此需要將它轉(zhuǎn)變成
55、integer類型***/</p><p> int stringToNum(string s)</p><p><b> {</b></p><p> int num = 0;</p><p> unsigned int i = 0;</p><p> while(i < s.l
56、ength())</p><p><b> {</b></p><p> num *= 10;</p><p> num += s[i++] - '0';</p><p><b> }</b></p><p> return num;</p&g
57、t;<p><b> }</b></p><p> /*** 提取目錄/文件的名稱 ***/</p><p> string getName(string& s, int* i)</p><p><b> {</b></p><p> string name = &q
58、uot;";</p><p> while(s[*i] != ' ' && s[*i] != '\t')</p><p> name += s[(*i)++];</p><p> return name;</p><p><b> }</b></p&
59、gt;<p> /*** 提取目錄/文件的大小,然后將string類型轉(zhuǎn)換成integer類型 ***/</p><p> int getSize(string&s, int* i)</p><p><b> {</b></p><p> string size = "";</p>
60、<p> while((unsigned int)(*i) < s.length() && s[*i] != ' ' && s[*i] != '\t' && s [*i] != ')')</p><p> size += s[(*i)++];</p><p> retur
61、n stringToNum(size);</p><p><b> }</b></p><p> /*** 根據(jù)用戶的輸入字符串來構(gòu)建樹的結(jié)構(gòu) ***/</p><p> void Tree::parse()</p><p><b> {</b></p><p>
62、Tree* temp;</p><p> string line;</p><p> string name;</p><p><b> int size;</b></p><p> /***head值用來標(biāo)記當(dāng)前結(jié)點(diǎn)的雙親結(jié)點(diǎn)位置;如果當(dāng)前處理的結(jié)點(diǎn)是目錄類型,則將它放在treeArray[]數(shù)組中,下標(biāo)用re
63、ar來記錄;如果是文件類型的目錄,只需要按照name和size建立一個樹的結(jié)點(diǎn),但是不用放入treeArray[]中 ***/</p><p> while(getline(infile,line,'\n'))</p><p><b> {</b></p><p> startPos = 0;</p><
64、;p><b> while(1)</b></p><p><b> {</b></p><p> s = getSubDir(line, &startPos);</p><p> int i = 1;</p><p> skipWhiteSpace(s, &i);&l
65、t;/p><p> if(s[i] != ')')</p><p><b> {</b></p><p> skipWhiteSpace(s,&i);</p><p> name = getName(s,&i);</p><p> skipWhiteSpace
66、(s,&i);</p><p> size = getSize(s,&i);</p><p> temp = treeArray[head%100]->FirstChild = new Tree(name,size);</p><p> temp->parent = treeArray[head%100];</p>
67、<p> if(name[0] == '*')</p><p> treeArray[(rear++)%100] = temp;</p><p> skipWhiteSpace(s,&i);</p><p><b> }</b></p><p> while(s[i] != &
68、#39;)')</p><p><b> {</b></p><p> skipWhiteSpace(s,&i);</p><p> name = getName(s,&i);</p><p> skipWhiteSpace(s,&i);</p><p>
69、 size = getSize(s,&i);</p><p> temp->NextSibling = new Tree(name,size);</p><p> skipWhiteSpace(s,&i);</p><p> temp = temp->NextSibling;</p><p> temp-&
70、gt;parent = treeArray[head%100];</p><p> if(name[0] == '*')</p><p> treeArray[(rear++)%100] = temp;</p><p><b> }</b></p><p><b> head ++;&l
71、t;/b></p><p> /***測試是否一行掃描完畢***/</p><p> if((unsigned int)startPos >= line.length())</p><p><b> break;</b></p><p><b> }</b></p>
72、<p> /***只有一個根結(jié)點(diǎn)的情況***/</p><p> if(head == rear)</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p
73、> ///////////////////////////////////////////////////////////</p><p> //**** 主測試文件main.cpp******/////</p><p> //////////////////////////////////////////////////////////</p><p>
74、; int main()</p><p><b> {</b></p><p> Tree* fileTree;</p><p><b> string s;</b></p><p> string name;</p><p><b> int size
75、;</b></p><p> outfile.open("output.txt");</p><p> if(!outfile){</p><p> cout<<"cannot open the output file!\n";</p><p><b> exi
76、t(0);</b></p><p><b> }</b></p><p> outfile<<"The result is as follows:\n";</p><p> outfile.close();</p><p> infile.open("inpu
77、t.txt",ios::out);</p><p> if(!infile){</p><p> cout<<"cannot open the input file!\n";</p><p><b> exit(0);</b></p><p><b> }<
78、;/b></p><p> while(getline(infile,s,'\n'))</p><p><b> {</b></p><p> int i = 0;</p><p> skipWhiteSpace(s, &i);</p><p> name
79、 = getName(s,&i);</p><p> skipWhiteSpace(s,&i);</p><p> size = getSize(s,&i);</p><p> fileTree = new Tree(name, size);</p><p> if(name[0] == '*'
80、)</p><p><b> {</b></p><p> treeArray[rear++] = fileTree;</p><p> fileTree->parse();</p><p><b> }</b></p><p> fileTree->r
81、eSize();</p><p> fileTree->outPut();</p><p> delete fileTree;</p><p><b> }</b></p><p> infile.close();</p><p><b> return 0;</b
82、></p><p><b> }</b></p><p><b> 4測試方法</b></p><p><b> 4.1測試目的</b></p><p> 為了測試程序的正確性,需要分別測試它在正常情況和異常情況下的表現(xiàn)情況。</p><p&g
83、t; 正常情況下的輸入數(shù)據(jù)要求是:目錄的初始大小一般設(shè)為1,目錄名中不能包含‘(’,‘)’,‘[’,‘]’和‘*’這些字符,加入多余的空格不影響最后的輸出結(jié)果;同一父目錄下的兄弟節(jié)點(diǎn)用一對圓括號括起來;同一層上的不同父節(jié)點(diǎn)下的子節(jié)點(diǎn)均列在同一行中,但按照父節(jié)點(diǎn)的不同永圓括號加以界定。</p><p><b> 4.2 測試輸入</b></p><p><b&
84、gt; */usr 1</b></p><p> (*mark 1 *alex 1)</p><p> (hw.c 3 *course 1) (hw.c 5)</p><p> (aa.txt 12)</p><p><b> */usr 1</b></p><p><
85、b> ()</b></p><p> */usr000009 1</p><p> (*mark 1 *alex 1 *bill 1)</p><p> (*book 1 *course 1 junk.c 6) (junk.c 8) (*work 1 *course 1)</p><p> (ch1.r 3 ch2
86、.r 2 ch3.r 4) (*cop3530 1) () (*cop3212 1)</p><p> (*fall96 1 *spr97 1 *sum97 1) (*fall96 1 *fall97 1)</p><p> (syl.r 1) (syl.r 5) (syl.r 2) (grades 3 prog1.r 4 prog2.r 1) (prog2.r 2 prog1.r 7
87、 grades 9)</p><p><b> 4.3 正確輸出</b></p><p> The result is as follows:</p><p> |_*/usr[24]</p><p> |_*mark[17]</p><p> | |_hw.c[3]<
88、/p><p> | |_*course[13]</p><p> | |_aa.txt[12]</p><p> |_*alex[6]</p><p><b> |_hw.c[5]</b></p><p> |_*/usr[1]</p>
89、<p> |_*/usr000009[72]</p><p> |_*mark[30]</p><p> | |_*book[10]</p><p> | | |_ch1.r[3]</p><p> | | |_ch2.r[2]</p><p&
90、gt; | | |_ch3.r[4]</p><p> | |_*course[13]</p><p> | | |_*cop3530[12]</p><p> | | |_*fall96[2]</p><p> | |
91、 | |_syl.r[1]</p><p> | | |_*spr97[6]</p><p> | | | |_syl.r[5]</p><p> | | |_*sum97[3]</p&
92、gt;<p> | | |_syl.r[2]</p><p> | |_junk.c[6]</p><p> |_*alex[9]</p><p> | |_junk.c[8]</p><p> |_*bill[32]</p>
93、<p> |_*work[1]</p><p> |_*course[30]</p><p> |_*cop3212[29]</p><p> |_*fall96[9]</p><p> | |_grades[3]</p><p> | |_prog1.r[4]</
94、p><p> | |_prog2.r[1]</p><p> |_*fall97[19]</p><p> |_prog2.r[2]</p><p> |_prog1.r[7]</p><p> |_grades[9]</p><p> 保存此文件,命名為“Tree”,在此文
95、件夾中新建一個名為“input”的文本文件,在此文件中鍵入“測試輸入”的代碼,經(jīng)過運(yùn)行可以在“Tree”文件夾中找到一個名為“output”的文本文件,詳細(xì)結(jié)果如下圖3-2所示。</p><p><b> 圖3-2</b></p><p> 在output文件中即可顯示程序的輸出結(jié)果。</p><p><b> 4.4 實(shí)際輸出
96、 </b></p><p><b> 見圖3-3</b></p><p><b> 圖3-3</b></p><p><b> 5 分析與探討</b></p><p> 5.1 測試結(jié)果分析 </p><p> 下表1-1為三組異常
97、的測試數(shù)據(jù)。</p><p><b> 表1-1</b></p><p><b> 5.2 探討與改進(jìn)</b></p><p> 在輸入測試結(jié)構(gòu)分析中的輸入數(shù)據(jù)時,出現(xiàn)了輸出錯誤的提示,因?yàn)槟夸浐臀募胁荒艹霈F(xiàn)‘(’,‘)’,‘[’,‘]’,‘*’等符號,只需要將這些符號改掉,改為允許輸入的符號即可,因此,在得到正確
98、的輸出結(jié)果中,正確的輸入是它的前提。</p><p><b> 6 設(shè)計(jì)小結(jié)</b></p><p> 通過本次課程設(shè)計(jì)實(shí)驗(yàn),我很好的鍛煉了理論聯(lián)系實(shí)際,與具體項(xiàng)目、課題相結(jié)合的程序設(shè)計(jì)能力。既讓我懂得了怎樣把理論運(yùn)用于實(shí)際,又讓我懂得了在實(shí)踐中遇到問題怎么樣用理論去解決。我深刻的體會到,學(xué)好《數(shù)據(jù)結(jié)構(gòu)》這門課僅僅通過課堂教學(xué)或平時的自學(xué)獲取理論知識是遠(yuǎn)遠(yuǎn)不夠的,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——樹的遍歷文件目錄結(jié)構(gòu)的顯示
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-----圖的遍歷
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---圖的遍歷
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 圖的遍歷和生成樹求解
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---圖的遍歷和生成樹求解
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--二叉樹的遍歷
- 《數(shù)據(jù)結(jié)構(gòu)遍歷二叉樹》課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)之二叉樹的遍歷
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報告(圖的遍歷)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---二叉樹的遍歷算法集成
- 《圖的建立與遍歷》數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-圖的遍歷和構(gòu)建
- 新數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---圖的遍歷和生成樹求解實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--按層次遍歷二叉樹
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--樹的應(yīng)用
- 圖的廣度優(yōu)先遍歷-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---線索二叉樹的生成及其遍歷
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--二叉樹的遍歷算法分析與設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---二叉樹的建立和遍歷的演示
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---二叉樹和中序遍歷的演示
評論
0/150
提交評論