數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——樹的遍歷文件目錄結(jié)構(gòu)的顯示_第1頁
已閱讀1頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論