數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--- 數(shù)據(jù)結(jié)構(gòu)各章算法的演示系統(tǒng)_第1頁
已閱讀1頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  課程設(shè)計(jì)(論文)任務(wù)書</p><p>  信息  學(xué)  院  計(jì)算機(jī) ?! I(yè) 2010-02-17 班    </p><p>  一、課程設(shè)計(jì)(論文)題目   數(shù)據(jù)結(jié)構(gòu)各章算法的演示系統(tǒng)  </p><p>  二、課程設(shè)計(jì)(論文)工作自 2011 年12月19 日起至 2011 年

2、 12月 30 日止。</p><p>  三、課程設(shè)計(jì)(論文) 地點(diǎn): 5-401、402 </p><p>  四、課程設(shè)計(jì)(論文)內(nèi)容要求:</p><p>  1.本課程設(shè)計(jì)的目的</p><p>  1、 使學(xué)生進(jìn)一步理解和掌握課

3、堂上所學(xué)各種基本抽象數(shù)據(jù)類型的邏輯結(jié)</p><p>  構(gòu)、存儲(chǔ)結(jié)構(gòu)和操作實(shí)現(xiàn)算法,以及它們?cè)诔绦蛑械氖褂梅椒ā?lt;/p><p>  2、使學(xué)生掌握軟件設(shè)計(jì)的基本內(nèi)容和設(shè)計(jì)方法,并培養(yǎng)學(xué)生進(jìn)行規(guī)范化</p><p><b>  軟件設(shè)計(jì)的能力。</b></p><p>  3、使學(xué)生掌握使用各種計(jì)算機(jī)資料和有關(guān)參考資料

4、,提高學(xué)生進(jìn)行程序</p><p>  設(shè)計(jì)的基本能力。 </p><p>  2.課程設(shè)計(jì)的任務(wù)及要求</p><p><b>  1)基本要求:</b></p><p>  1. 分析題目,查閱相關(guān)資料;</p><p>  2. 算法設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì); </p&

5、gt;<p>  3. 編寫代碼并調(diào)試;</p><p>  4. 完成課程設(shè)計(jì)報(bào)告。 </p><p><b>  2)創(chuàng)新要求: </b></p><p>  在基本要求達(dá)到后,可進(jìn)行創(chuàng)新設(shè)計(jì)。</p><p>  3)課程設(shè)計(jì)論文編寫要求</p><p> 

6、 (1)要按照書稿的規(guī)格打印謄寫畢業(yè)論文</p><p> ?。?)論文包括目錄、緒論、正文、小結(jié)、參考文獻(xiàn)、謝辭、附錄等</p><p> ?。?)畢業(yè)論文裝訂按學(xué)校的統(tǒng)一要求完成</p><p>  4)答辯與評(píng)分標(biāo)準(zhǔn): </p><p>  (1)完成問題的解決方法分析:20分; </p><p>  (2)算法

7、思想(流程):20分; </p><p>  (3)數(shù)據(jù)結(jié)構(gòu):20分;</p><p>  (4)測(cè)試數(shù)據(jù):20分</p><p> ?。?)回答問題:20分。</p><p>  5)參考文獻(xiàn): </p><p>  《C程序設(shè)計(jì)》(第二版) 譚浩強(qiáng) 著 清華大學(xué)出版社出版</p>

8、;<p>  《C++程序設(shè)計(jì)》 譚浩強(qiáng) 著 清華大學(xué)出版社出版</p><p>  《數(shù)據(jù)結(jié)構(gòu)》(C語言版) 嚴(yán)蔚敏、吳偉民 著 清華大學(xué)出版社出版</p><p>  《數(shù)據(jù)結(jié)構(gòu)輔導(dǎo)與提高》 徐孝凱 著 清華大學(xué)出版社出版 </p><p>  6)課程設(shè)計(jì)進(jìn)度安

9、排</p><p>  內(nèi)容 天數(shù) 地點(diǎn)</p><p>  構(gòu)思及收集資料 4天 圖書館</p><p>  編程與調(diào)試 5天 實(shí)驗(yàn)室</p><p>  撰寫論文 2天

10、 宿舍</p><p>  學(xué)生簽名: </p><p>  2011年 12月 19 日</p><p>  課程設(shè)計(jì)(論文)評(píng)審意見</p><p> ?。?)完成問題分析(20分):優(yōu)(?。⒘迹ā。⒅校ā。⒁话悖ā。?、差(?。?; </p><p> ?。?)算法思想 

11、?。?0分):優(yōu)( )、良( )、中( )、一般( )、差(?。?</p><p> ?。?)數(shù)據(jù)結(jié)構(gòu)  (20分):優(yōu)(?。⒘迹ā。?、中( )、一般( )、差( );</p><p> ?。?)測(cè)試數(shù)據(jù) (20分):優(yōu)(?。?、良(?。?、中(?。⒁话悖ā。?、差(?。?;</p><p> ?。?)回答問題 ?。?0分):優(yōu)(?。?、良(?。?、中(?。?、一般(

12、?。?、差(?。?;</p><p> ?。?)格式規(guī)范性及考勤是否降等級(jí):是(√)、否(?。?lt;/p><p>  評(píng)閱人: 職稱: </p><p>  2011年1月 3 日</p><p><b>  目 錄</b></p><p>  第一章 課

13、程設(shè)計(jì)的目的………………………… 4</p><p>  1.1 課程設(shè)計(jì)的題目及簡(jiǎn)介……………………… 4</p><p>  第二章 課程設(shè)計(jì)的內(nèi)容………………………… 4</p><p>  2.1 課程設(shè)計(jì)的設(shè)計(jì)說明……………………… 4</p><p>  2.2 程序截圖…………………………………….

14、 5</p><p>  2.3 部分程序清單………………………………… 6</p><p>  第三章 測(cè)試數(shù)據(jù)…………………………………… 28</p><p>  3.1 串的基本操作 …………………………… 28</p><p>  3.2 隊(duì)列和二叉樹的基本操作………………… 29</p>

15、<p>  3.3 排序和順序表……………………………… 30</p><p>  第四章 課設(shè)心得………………………………… 31</p><p>  第五章 參考文獻(xiàn)…………………………………… 31 </p><p><b>  一、課程設(shè)計(jì)的目的</b></p><p>  1,課程

16、設(shè)計(jì)的題目及簡(jiǎn)介:</p><p>  課程設(shè)計(jì)是一門鍛煉學(xué)生動(dòng)手操作能力的課程,在了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法的過程中,培養(yǎng)初步的獨(dú)立分析和設(shè)計(jì)能力;初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能;提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問題的能力;訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。為自己以后從事軟件開發(fā)事業(yè)打下基

17、礎(chǔ)。</p><p>  課設(shè)使學(xué)生進(jìn)一步理解和掌握課堂上所學(xué)各種基本抽象數(shù)據(jù)類型的邏輯結(jié)構(gòu),存儲(chǔ)結(jié)構(gòu)和操作實(shí)現(xiàn)算法,以及他們?cè)诔绦蛑械氖褂梅椒āU莆帐褂酶鞣N計(jì)算機(jī)資料和有關(guān)的參考資料,提高程序設(shè)計(jì)的基本能力。同時(shí),為了掌握,鞏固本學(xué)習(xí)所學(xué)的數(shù)據(jù)結(jié)構(gòu)的一些算法和獲取實(shí)現(xiàn)大型的程序設(shè)計(jì)架構(gòu)思想,也為了將整個(gè)數(shù)據(jù)結(jié)構(gòu)課程各個(gè)知識(shí)點(diǎn)有條不紊的聯(lián)系起來,因此我選擇了”數(shù)據(jù)結(jié)構(gòu)各章算法的演示系統(tǒng)”.</p>

18、<p>  還可以使學(xué)生進(jìn)一步理解和掌握課堂上所學(xué)各種基本抽象數(shù)據(jù)類型的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)和操作實(shí)現(xiàn)算法,以及它們?cè)诔绦蛑械氖褂梅椒?使學(xué)生掌握軟件設(shè)計(jì)的基本內(nèi)容和設(shè)計(jì)方法,并培養(yǎng)學(xué)生進(jìn)行規(guī)范化軟件設(shè)計(jì)的能力。</p><p><b>  二、課程設(shè)計(jì)的內(nèi)容</b></p><p><b>  1、設(shè)計(jì)說明</b></p>

19、<p>  本次課程設(shè)計(jì)的主要是每章的ADT算法演示系統(tǒng),從中穿插的程序功能是所定義的數(shù)據(jù)結(jié)構(gòu)類型基本應(yīng)用(比如說二叉樹的左右子樹,字符串的鏈接,排序中的各種算法,圖的BFS,DFS)</p><p>  另外,演示系統(tǒng)設(shè)計(jì)的理念是要更好的引導(dǎo)學(xué)生知道操作的基本,及合理編排程序。</p><p><b>  2、程序截圖</b></p>&l

20、t;p>  圖1 查找表的基本操作</p><p>  圖2 圖的基本操作</p><p><b>  3、程序清單</b></p><p> ?。?)線性表的主要操作</p><p>  //構(gòu)造一個(gè)空的線性表</p><p>  Status InitList(SqList

21、 &L)</p><p><b>  {</b></p><p>  L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));</p><p>  if(!L.elem)</p><p>  return ERROR;//存儲(chǔ)空間失敗</

22、p><p>  L.length = 0;//當(dāng)前長度0</p><p>  L.size = LIST_INIT_SIZE;//初始容量</p><p>  return OK;</p><p><b>  }</b></p><p><b>  //銷毀順序表L</b><

23、;/p><p>  Status DestroyList(SqList &L)</p><p><b>  {</b></p><p>  free(L.elem);</p><p>  L.elem = NULL;</p><p>  L.length = L.size = 0;</p

24、><p>  return OK;</p><p><b>  }</b></p><p><b>  //將L重置為空表</b></p><p>  Status ClearList(SqList &L)</p><p><b>  {</b>&l

25、t;/p><p>  L.length = 0;</p><p>  return OK;</p><p>  }//若L為空白,返回TRUE;否則返回FALSE</p><p>  Status ListEmpty(SqList L)</p><p><b>  {</b></p>&

26、lt;p>  if(0 == L.length)</p><p>  return TRUE;</p><p><b>  else</b></p><p>  return FALSE;</p><p>  }//返回L中的元素個(gè)數(shù)</p><p>  Status ListLength(

27、SqList L)</p><p><b>  {</b></p><p>  return L.length;</p><p><b>  }</b></p><p>  //返回L中第1個(gè)與e滿足關(guān)系compare()的數(shù)據(jù)元素的位序</p><p>  Status L

28、ocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))</p><p><b>  {</b></p><p>  ElemType *p;</p><p>  int i = 1;//i的初值為第i個(gè)元素的位序</p><p>  p = L

29、.elem;//P的初值為第i個(gè)元素的存儲(chǔ)位置</p><p>  while(i <= L.length && !compare(*p++,e))</p><p><b>  ++i;</b></p><p>  if(i <= L.length)</p><p><b>  re

30、turn i;</b></p><p><b>  else</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  (2)棧的基本操作</b></p>

31、<p>  int InitStack(SqStack &S)</p><p><b>  {</b></p><p><b>  S.base = </b></p><p>  (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));</p&

32、gt;<p>  if(!S.base) return 0;</p><p>  S.top = S.base;</p><p>  S.stacksize = STACK_INIT_SIZE;</p><p><b>  return 1;</b></p><p><b>  }</b&

33、gt;</p><p>  void DestroyStack(SqStack &S) </p><p><b>  { </b></p><p>  free(S.base); </p><p><b>  } </b></p><p>  void ClearSt

34、ack(SqStack &S) </p><p><b>  { </b></p><p>  S.top=S.base; </p><p><b>  } </b></p><p>  int StackEmpty(SqStack S) </p><p><b

35、>  { </b></p><p>  if(S.top==S.base) return 1; </p><p><b>  else </b></p><p>  return 0; </p><p><b>  } </b></p><p>  int

36、StackLength(SqStack S) </p><p><b>  { </b></p><p>  int i; char *p; i=0; </p><p><b>  p=S.top; </b></p><p>  while(p!=S.base) </p><p&

37、gt;<b>  {p--; </b></p><p><b>  i++; </b></p><p><b>  } </b></p><p>  return i; </p><p><b>  }</b></p><p>  

38、int GetTop(SqStack S,SElemType &e)</p><p><b>  {</b></p><p>  if(S.top == S.base) return 0;</p><p>  e = *(S.top-1);</p><p><b>  return 1;<

39、/b></p><p><b>  }</b></p><p>  int Push(SqStack &S,SElemType e)</p><p><b>  {</b></p><p>  if(S.top-S.base>= S.stacksize){</p>

40、;<p>  S.base = (SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));</p><p>  if(!S.base) return 0;</p><p>  S.top = S.base+S.stacksize;</p><p>  S.s

41、tacksize+=STACKINCREMENT;</p><p><b>  }</b></p><p>  *S.top++ = e;</p><p><b>  return 1;</b></p><p><b>  }</b></p><p> 

42、 int Pop(SqStack &S,SElemType &e)</p><p><b>  {</b></p><p>  if(S.top == S.base) return 0;</p><p>  e = *--S.top;</p><p><b>  return 1;<

43、;/b></p><p><b>  }</b></p><p> ?。?)隊(duì)列的基本操作</p><p>  bool InQueue(Queuesq &qu, int size)</p><p><b>  {</b></p><p>  if(size&

44、lt;0)</p><p><b>  {</b></p><p>  cout<<"size的值非法!"<<endl;</p><p>  return false;</p><p><b>  }</b></p><p>  q

45、u.mSize=size+1;</p><p>  qu.queue=new ElemType[qu.mSize];</p><p>  if(!qu.queue)</p><p><b>  {</b></p><p>  cout<<"內(nèi)存空間用完了!"<<endl;<

46、;/p><p>  return false;</p><p><b>  }</b></p><p>  qu.length=0;</p><p>  qu.front=qu.rear=0;</p><p><b>  }</b></p><p>  v

47、oid clear(Queuesq &qu)</p><p><b>  {</b></p><p>  delete []qu.queue;</p><p>  qu.queue=0;</p><p>  qu.front=qu.rear=0;</p><p>  qu.length=

48、0;</p><p>  qu.mSize=0;</p><p><b>  }</b></p><p>  bool enQueue(Queuesq &qu,ElemType item)</p><p><b>  {</b></p><p>  if(((qu.

49、rear+1)%qu.mSize)==qu.front)</p><p><b>  {</b></p><p>  cout<<"隊(duì)列已滿,溢出"<<endl;</p><p>  return false;</p><p><b>  }</b><

50、;/p><p>  qu.rear=(qu.rear+1)%qu.mSize;</p><p>  qu.queue[qu.rear]=item;</p><p>  return true;</p><p><b>  }</b></p><p>  ElemType outQueue(Queues

51、q &qu)</p><p>  { if(qu.front==qu.rear)</p><p><b>  {</b></p><p>  cout<<"隊(duì)列為空"<<endl;</p><p>  return false;</p><p&g

52、t;<b>  }</b></p><p>  qu.front=(qu.front+1)%qu.mSize;</p><p>  qu.length--;</p><p>  return qu.queue[qu.front];</p><p><b>  }</b></p><

53、;p>  ElemType peekQueue(Queuesq &qu)</p><p><b>  {</b></p><p>  if(qu.front==qu.rear)</p><p><b>  {</b></p><p>  cout<<"隊(duì)列為空&q

54、uot;<<endl;</p><p>  return false;</p><p><b>  }</b></p><p>  return qu.queue[(qu.front+1)%qu.mSize];</p><p><b>  }</b></p><p&g

55、t;  int QueueLength(Queuesq qu)</p><p><b>  {</b></p><p>  return(qu.rear+qu.mSize-qu.front)%qu.mSize; }</p><p>  bool Queuetraverse(Queuesq qu)</p><p>&l

56、t;b>  {</b></p><p><b>  int k=0;</b></p><p>  for(k=qu.front+1;k<=qu.rear;k++)</p><p>  cout<<qu.queue[k];</p><p>  cout<<endl;</

57、p><p>  if((qu.rear-qu.front)!=k)</p><p>  return false;</p><p><b>  else </b></p><p>  return true;</p><p><b>  }</b></p><

58、p>  void DestroyQueue(Queuesq &qu)</p><p><b>  {</b></p><p>  free(qu.queue);</p><p><b>  }</b></p><p>  (4) 串的基本操作</p><p> 

59、 void Assign(SqString &s,char t[])</p><p><b>  {</b></p><p><b>  int i=0;</b></p><p>  while (t[i]!='\0')</p><p><b>  {</b&

60、gt;</p><p>  s.ch[i]=t[i]; i++;</p><p><b>  }</b></p><p><b>  s.len=i;</b></p><p><b>  }</b></p><p>  void StrCo

61、py(SqString &s,SqString t)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  for (i=0;i<t.len;i++)</p><p>  s.ch[i]=t.ch[i];</p>

62、<p>  s.len=t.len;</p><p><b>  }</b></p><p>  int StrLength(SqString s)</p><p><b>  {</b></p><p>  return(s.len);</p><p><

63、b>  } </b></p><p>  int StrEqual(SqString s,SqString t)</p><p><b>  {</b></p><p><b>  int i=0;</b></p><p>  if (s.len!=t.len)</p&g

64、t;<p>  return(0);</p><p><b>  else</b></p><p><b>  {</b></p><p>  for (i=0;i<s.len;i++)</p><p>  if (s.ch[i]!=t.ch[i]) </p>&l

65、t;p>  return(0);</p><p>  return(1);</p><p><b>  }</b></p><p><b>  }</b></p><p>  SqString Concat(SqString s,SqString t)</p><p>

66、<b>  {</b></p><p>  SqString r;</p><p><b>  int i,j;</b></p><p>  for (i=0;i<s.len;i++)</p><p>  r.ch[i]=s.ch[i];</p><p>  for

67、 (j=0;j<t.len;j++)</p><p>  r.ch[s.len+j]=t.ch[j];</p><p>  r.len=i+j;</p><p>  return(r);</p><p><b>  } </b></p><p>  void DispStr(Sq

68、String s)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  for (i=0;i<s.len;i++)</p><p>  printf("%c",s.ch[i]);</p><p&g

69、t;  printf("\n");</p><p><b>  }</b></p><p>  int strcompare(SqString s,SqString t)</p><p><b>  {</b></p><p><b>  int i;</b>

70、;</p><p>  for(i=0;i<StrLength(s)&&i<StrLength(t);i++)</p><p>  if(s.ch[i]!=t.ch[i])</p><p>  return s.ch[i]-t.ch[i];</p><p>  return StrLength(s)-StrLeng

71、th(t);</p><p><b>  }</b></p><p><b>  (5)靜態(tài)查找表</b></p><p>  int Create ( LineList &L,int n)</p><p><b>  {int j;</b></p>&

72、lt;p>  L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));</p><p>  if(!L.elem)</p><p><b>  return 0;</b></p><p>  L.length = 0;</p><p>  L.s

73、ize = LIST_INIT_SIZE;</p><p>  cout<<"逐個(gè)輸入元素:"<<endl;</p><p>  for(j=1;j<=n;j++)</p><p>  cin>>L.elem[j];</p><p><b>  return 1;<

74、/b></p><p><b>  }</b></p><p>  int DestroyList(LineList &L)</p><p><b>  {</b></p><p>  free(L.elem);</p><p>  L.elem = NULL;

75、</p><p>  L.length = L.size = 0;</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  int SeqSearch(LineList L,int n,KeyType k)</p><p

76、>  {int i=1;</p><p>  while (i<=n && L.elem[i]!=k) i++;</p><p><b>  if (i>n) </b></p><p>  return(-1);</p><p><b>  else</b><

77、;/p><p>  return(i);</p><p><b>  }</b></p><p>  int ListTraverse(LineList L,int n)</p><p><b>  {</b></p><p>  ElemType *p;</p>

78、<p><b>  int i;</b></p><p><b>  p=L.elem;</b></p><p>  for(i=1;i<=n;i++)</p><p>  cout<<p[i]<<' ';</p><p>  cout<

79、<endl;</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  (6) 二叉樹的基本操作</p><p>  Status CreateBiTree(BiTree &T)</p><p><

80、b>  {char ch;</b></p><p>  scanf("%c",&ch);</p><p>  if(ch=='*') T=NULL; </p><p><b>  else</b></p><p><b>  {</b>

81、</p><p>  if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))</p><p>  exit(overflow);</p><p>  T->data=ch;</p><p>  CreateBiTree(T->lchild);</p><p>  Create

82、BiTree(T->rchild);</p><p><b>  }</b></p><p>  return ok;</p><p><b>  }</b></p><p>  Status PreOrder(BiTree T)</p><p><b>  

83、{if(T){</b></p><p>  printf("%c",T->data);</p><p>  PreOrder(T->lchild);</p><p>  PreOrder(T->rchild);</p><p><b>  } </b></p>

84、<p>  return ok;</p><p><b>  }</b></p><p>  Status InOrder(BiTree T)</p><p><b>  {</b></p><p><b>  if(T)</b></p><p

85、><b>  {</b></p><p>  InOrder(T->lchild);</p><p>  printf("%c",T->data);</p><p>  InOrder(T->rchild);</p><p><b>  }</b><

86、/p><p>  return ok;</p><p><b>  }</b></p><p>  Status PostOrder(BiTree T)</p><p><b>  {</b></p><p><b>  if(T)</b></p&g

87、t;<p><b>  {</b></p><p>  PostOrder(T->lchild);</p><p>  PostOrder(T->rchild);</p><p>  printf("%c",T->data);</p><p><b>  }&

88、lt;/b></p><p>  return ok;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void LevelorderTraverse(BiTNode* T)</p><p><b>  {&

89、lt;/b></p><p>  const Maxsize=300;</p><p>  BiTNode* Q[Maxsize];</p><p>  int front=0,rear=0;</p><p>  BiTNode* p;</p><p>  if(T!=NULL)</p><p

90、><b>  {</b></p><p>  rear=(rear+1)%Maxsize;</p><p>  Q[rear]=T;</p><p><b>  }</b></p><p>  while(front!=rear)</p><p><b>  

91、{</b></p><p>  front=(front+1)%Maxsize;</p><p>  p=Q[front];</p><p>  printf(“%c”, p->data);</p><p>  if(p->lchild!=NULL)</p><p><b>  {&l

92、t;/b></p><p>  rear=(rear+1)%Maxsize;</p><p>  Q[rear]=p->lchild;</p><p><b>  }</b></p><p>  if(p->rchild!=NULL)</p><p><b>  {&l

93、t;/b></p><p>  rear=(rear+1)%Maxsize;</p><p>  Q[rear]=p->rchild;</p><p><b>  }</b></p><p>  if(front==(rear+1)%Maxsize)</p><p>  cout<

94、;<endl<<endl;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void preorder(BiTree bt)</p><p><b>  {</b></p><p>

95、;<b>  if(bt)</b></p><p><b>  { n++;</b></p><p>  if(bt->lchild==NULL&&bt->rchild==NULL)</p><p>  no++; preorder(bt->lchild);</p>&

96、lt;p>  preorder(bt->rchild);</p><p><b>  }</b></p><p><b>  }</b></p><p>  int Depth(BiTree bt) </p><p>  { int depthval,depthLeft,depthR

97、ight;</p><p>  if (!bt) depthval=0;</p><p><b>  else {</b></p><p>  depthLeft=Depth(bt->lchild);</p><p>  depthRight=Depth(bt->rchild);</p>

98、<p>  depthval=1+(depthLeft>depthRight ?depthLeft:depthRight);</p><p><b>  } </b></p><p>  return depthval;</p><p><b>  }</b></p><p> 

99、 int BiTreeEmpty(BiTree T)</p><p><b>  {</b></p><p><b>  if(T)</b></p><p><b>  return 0;</b></p><p><b>  else</b></p&

100、gt;<p><b>  return 1;</b></p><p><b>  }</b></p><p>  char Root(BiTree T)</p><p><b>  {</b></p><p>  if(BiTreeEmpty(T))</p&

101、gt;<p><b>  return 0;</b></p><p><b>  else</b></p><p>  return T->data;</p><p><b>  }</b></p><p>  char Value(BiTree p)<

102、;/p><p><b>  {</b></p><p>  return p->data;</p><p><b>  }</b></p><p>  BiTree Parent(BiTree T,BiTNode* e)</p><p><b>  {if(T){

103、</b></p><p>  if(T->data==e->data)</p><p>  return NULL;</p><p><b>  }</b></p><p>  if(T->lchild!=NULL&&T->lchild->data==e->

104、data||T->rchild!=NULL&&T->rchild->data==e->data)</p><p><b>  return T;</b></p><p><b>  else{</b></p><p>  BiTNode* tempP=NULL;</p>

105、<p>  if(tempP=Parent(T->lchild,e))</p><p>  return tempP;</p><p>  if(tempP=Parent(T->rchild,e))</p><p>  return tempP;</p><p>  }return NULL;</p>&

106、lt;p><b>  }</b></p><p>  BiTree LeftChild(BiTree T,BiTNode* e){</p><p>  if(!T) return ERROR;</p><p>  if(e->lchild!=NULL) return e->lchild;</p><p>

107、;  else return NULL;</p><p><b>  }</b></p><p><b>  (7)圖的基本操作</b></p><p>  int CreateGraph(ALGraph *G)</p><p><b>  {</b></p>&

108、lt;p>  int i,j,k;</p><p><b>  int w;</b></p><p>  VertexType va,vb;</p><p>  ArcNode *p;</p><p>  scanf("%d",&(*G).kind);</p><p

109、>  scanf("%d%d", &(*G).vexnum, &(*G).arcnum);</p><p>  for(i = 0; i < (*G).vexnum; ++i)</p><p><b>  {</b></p><p>  scanf("%s", (*G).ve

110、rtices[i].data);</p><p>  (*G).vertices[i].firstarc = NULL;</p><p><b>  }</b></p><p>  for(k = 0;k < (*G).arcnum; ++k)</p><p><b>  {</b><

111、/p><p>  if((*G).kind==1||(*G).kind==3)</p><p>  scanf("%d%s%s",&w,va,vb);</p><p><b>  else</b></p><p>  scanf("%s%s",va,vb);</p&

112、gt;<p>  i = LocateVex(*G,va); </p><p>  j = LocateVex(*G,vb); </p><p>  p = (ArcNode*)malloc(sizeof(ArcNode));</p><p>  p->adjvex = j;</p><p>  if((*G).kind

113、 == 1 || (*G).kind == 3)</p><p><b>  {</b></p><p>  p->info = (int *)malloc(sizeof(int));</p><p>  *(p->info) = w;</p><p><b>  }</b></p

114、><p><b>  else</b></p><p>  p->info = NULL; </p><p>  p->nextarc = (*G).vertices[i].firstarc; </p><p>  (*G).vertices[i].firstarc = p;</p><p&g

115、t;  if((*G).kind >= 2) </p><p><b>  {</b></p><p>  p = (ArcNode*)malloc(sizeof(ArcNode));</p><p>  p->adjvex = i;</p><p>  if((*G).kind == 3) </p&

116、gt;<p><b>  {</b></p><p>  p->info = (int*)malloc(sizeof(int));</p><p>  *(p->info) = w;</p><p><b>  }</b></p><p><b>  else&l

117、t;/b></p><p>  p->info = NULL; </p><p>  p->nextarc = (*G).vertices[j].firstarc; </p><p>  (*G).vertices[j].firstarc = p;</p><p><b>  }</b></p&g

118、t;<p><b>  }</b></p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  void DFS(ALGraph G,int v){</p><p><b>  int w;<

119、/b></p><p>  VertexType v1,w1;</p><p>  strcpy(v1,*GetVex(G,v));</p><p>  visited[v] = 1;</p><p>  VisitFunc(G.vertices[v].data);</p><p>  for(w = Firs

120、tAdjVex(G,v1); w >= 0;</p><p>  w = NextAdjVex(G,v1,strcpy(w1,*GetVex(G,w))))</p><p>  if(!visited[w])</p><p>  DFS(G,w);}</p><p>  void DFSTraverse(ALGraph G,void(

121、*Visit)(char*))</p><p><b>  {</b></p><p><b>  int v;</b></p><p>  VisitFunc = Visit; </p><p>  for(v = 0; v < G.vexnum; v++)</p><

122、p>  visited[v] = 0;</p><p>  for(v = 0; v < G.vexnum; v++)</p><p>  if(!visited[v])</p><p>  DFS(G,v);</p><p>  printf("\n");</p><p><

123、;b>  }</b></p><p>  void BFSTraverse(ALGraph G,void(*Visit)(char*))</p><p><b>  {</b></p><p>  int v,u,w;</p><p>  VertexType u1,w1;</p><

124、;p>  LinkQueue Q;</p><p>  for(v = 0; v < G.vexnum; ++v)</p><p>  visited[v]=0;</p><p>  InitQueue(&Q);</p><p>  for(v = 0; v < G.vexnum; v++)</p>

125、;<p>  if(!visited[v])</p><p><b>  {</b></p><p>  visited[v]=1;</p><p>  Visit(G.vertices[v].data);</p><p>  EnQueue(&Q,v);</p><

126、;p>  while(!QueueEmpty(Q))</p><p><b>  {</b></p><p>  DeQueue(&Q,&u);</p><p>  strcpy(u1,*GetVex(G,u));</p><p>  for(w = FirstAdjVex(G,u1); w

127、>= 0; w = NextAdjVex(G, u1, strcpy(w1, *GetVex(G,w))))</p><p>  if(!visited[w])</p><p><b>  {</b></p><p>  visited[w] = 1;</p><p>  Visit(G.vertices[w].

128、data);</p><p>  EnQueue(&Q,w);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("\n"

129、;);</p><p><b>  }</b></p><p><b>  (8)排序</b></p><p><b>  /*快速排序*/</b></p><p>  void QuickSort(LineList R[],int s,int t) </p>&

130、lt;p><b>  {</b></p><p>  int i=s,j=t;</p><p>  LineList tmp;</p><p>  if (s<t) </p><p>  {tmp=R[s]; </p><p>  while (i!=j) <

131、;/p><p>  {while (j>i && R[j].key>tmp.key) </p><p><b>  j--; </b></p><p>  R[i]=R[j];</p><p>  while (i<j && R[i].key<tmp.key)

132、 </p><p><b>  i++;</b></p><p>  R[j]=R[i];</p><p><b>  }</b></p><p><b>  R[i]=tmp;</b></p><p>  QuickSort(R,s,i-1);&l

133、t;/p><p>  QuickSort(R,i+1,t);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  三、測(cè)試數(shù)據(jù):</b></p><p>  圖3 串的基本操作</p&g

134、t;<p>  圖4 隊(duì)列的基本操作</p><p>  圖5 二叉樹的基本操作</p><p><b>  圖6 排序</b></p><p>  圖7 順序表的基本操作</p><p>  圖8 棧的基本操作</p><p>  四、課程設(shè)計(jì)總結(jié)(

135、寫出心得和總結(jié))</p><p>  經(jīng)過本次的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),我可以說是獲益匪淺。學(xué)習(xí)程序設(shè)計(jì)是一個(gè)非常需要實(shí)踐的過程,這一次的課程設(shè)計(jì)正是給了我機(jī)會(huì)。通過設(shè)計(jì)的題目,我不但鞏固了平時(shí)所學(xué),更學(xué)到了平時(shí)沒有注意到的一些技巧。這一次課程設(shè)計(jì)中我選的是所有抽象數(shù)據(jù)類型的ADT,很有挑戰(zhàn)性,也更加讓我重視基礎(chǔ),重視動(dòng)手能力。學(xué)海無涯,我要更加的努力。</p><p>  為了讓自己的設(shè)計(jì)更加

136、完善更符合課設(shè)標(biāo)準(zhǔn),一次次的更改自己的設(shè)計(jì)方案。在做課設(shè)之前一定要想好算法思想,構(gòu)思好各個(gè)功能模塊的布局等然后開始編寫,因?yàn)檫@些程序都是由微小的代碼組成的,所以經(jīng)常會(huì)出現(xiàn)一些錯(cuò)誤,令我最糾結(jié)的是參數(shù)傳遞部分,編譯的過程中經(jīng)常會(huì)出現(xiàn)諸如“cannot convert parameter 1 from 'SqStack' to 'SqStack *'”這種錯(cuò)誤,一開始不明白是什么意思,后來才知道功能調(diào)用的模塊

137、函數(shù)類型要聲明的部分一致,而且傳遞的數(shù)據(jù)個(gè)數(shù)也要一致。</p><p>  還有更令我糾結(jié)的一個(gè)問題是出現(xiàn)在二叉樹中,隊(duì)列調(diào)用不了,輸出總是到最后去,改后就沒錯(cuò)了,原來是c++和c的混編問題,先編譯c,之后,感覺如釋重負(fù)。</p><p>  在這次的課設(shè)中我學(xué)到的還是很多的,鞏固了自己在課堂上所學(xué)習(xí)得東西,同時(shí)學(xué)會(huì)了解決很多自己以前沒碰到的問題,提高了自己實(shí)踐能力。不管怎樣,作為一名工科

138、學(xué)生做此類的課程設(shè)計(jì)還是相當(dāng)具有意義的。也非常感謝學(xué)校給我們提供了這么一個(gè)實(shí)踐平臺(tái)。</p><p><b>  五、參考文獻(xiàn) </b></p><p>  【1】、數(shù)據(jù)結(jié)構(gòu)(C語言版)嚴(yán)蔚敏 吳偉名著 清華大學(xué)出版社</p><p>  【2】C++課程設(shè)計(jì) 王更生 著 北京郵電大學(xué)出版社</p><p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論