數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--停車場管理系統(tǒng)_第1頁
已閱讀1頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  《數(shù)據(jù)結(jié)構(gòu)與算法》</b></p><p><b>  課程設(shè)計報告</b></p><p> ?。?012— 2013學(xué)年 第 1 學(xué)期)</p><p>  專 業(yè): 網(wǎng)絡(luò)工程 </p><p>  班 級:

2、 11網(wǎng)絡(luò)工程 </p><p>  姓名學(xué)號: </p><p>  指導(dǎo)教師: </p><p>  成 績: </p><p>&l

3、t;b>  計算機科學(xué)與技術(shù)系</b></p><p>  目 錄</p><p>  課程設(shè)計目的與要求……………………………………… 1</p><p>  1.設(shè)計目的…………………………………………………………1 </p><p>  2.設(shè)計任務(wù)及要求………………………………………………… 1<

4、/p><p>  二 .方案實現(xiàn)與調(diào)試 …………………………………………1</p><p>  停車場管理系統(tǒng)…………………………………………………1</p><p>  1.1算法描述及實驗步驟……………………………………………2</p><p>  1.2調(diào)試過程及實驗結(jié)果……………………………………………3</p><

5、;p>  2.字符串操作 ……………………………………………………4</p><p>  2.1算法描述及實驗步驟……………………………………………5</p><p>  2.2調(diào)試過程及實驗結(jié)果……………………………………………6</p><p>  3.找祖先…………………………………………………………8</p><p>  3.1

6、算法描述及實驗步驟……………………………………………9</p><p>  3.2調(diào)試過程及實驗結(jié)果……………………………………………10</p><p>  4.二叉樹運算2……………………………………………………8</p><p>  4.1算法描述及實驗步驟……………………………………………9</p><p>  4.2調(diào)試過程及實驗結(jié)

7、果……………………………………………1</p><p>  三.課程設(shè)計分析與總結(jié)………………………………………10</p><p>  源程序清單…………………………………………………11</p><p>  1.停車場管理系統(tǒng)……………………………………………………11</p><p>  2.字符串操作 …………………………………………

8、……………19</p><p>  3.找祖先……………………………………………………………22</p><p>  4.二叉樹運算2……………………………………………………25</p><p>  五.設(shè)計日志………………………………………………………31</p><p>  六.指導(dǎo)教師評語…………………………………………………32<

9、;/p><p>  一. 課程設(shè)計的目的與要求(含設(shè)計指標(biāo))</p><p><b>  1、設(shè)計目的</b></p><p>  (1)培養(yǎng)學(xué)生運用算法與數(shù)據(jù)結(jié)構(gòu)的基本知識解決實際編程中的數(shù)據(jù)結(jié)構(gòu)設(shè)計和算法設(shè)計問題。</p><p>  (2)培養(yǎng)學(xué)生獨立設(shè)計程序與解決問題的能力,培養(yǎng)學(xué)生團(tuán)隊協(xié)作集成程序模塊及調(diào)試能力。&

10、lt;/p><p>  (3)培養(yǎng)學(xué)生初步的軟件設(shè)計及軟件測試的能力。</p><p><b>  2、設(shè)計任務(wù)及要求</b></p><p><b>  基本要求:</b></p><p>  學(xué)生必須仔細(xì)閱讀《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計指導(dǎo)書,認(rèn)真主動完成課程設(shè)計的要求。有問題及時主動通過各種方式與教師聯(lián)系

11、溝通。學(xué)生要發(fā)揮自主學(xué)習(xí)的能力,充分利用時間,安排好課設(shè)的時間計劃,并在課設(shè)過程中不斷檢測自己的計劃完成情況,及時的向教師匯報。</p><p>  課程設(shè)計按照教學(xué)要求需要一周時間完成,一周中每天(按每周5天)至少要上3-4小時的機來調(diào)試C語言設(shè)計的程序,總共至少要上機調(diào)試程序15小時。</p><p>  根據(jù)設(shè)計報告要求編寫設(shè)計報告,主要內(nèi)容包括目的、意義、原理和實現(xiàn)方法簡介、過程分

12、析及說明、實驗結(jié)果情況說明、結(jié)論。</p><p>  每個人必須有可運行的程序,學(xué)生能對自己的程序面對教師提問并能熟練地解釋清楚,學(xué)生回答的問題和程序運行的結(jié)果作為評分的主要衡量標(biāo)準(zhǔn); </p><p>  二. 方案實現(xiàn)與調(diào)試</p><p><b>  2.1 題目:</b></p><p>  某停車場可以停放n

13、輛汽車,該停車場只有一個大門, 每輛汽車離開停車場都要求之前的汽車必須先退出停車場為它讓道,而后讓道的汽車再次駛?cè)胪\噲?,停車場示意圖如下:</p><p>  要求設(shè)計停車管理系統(tǒng),實現(xiàn)車輛的進(jìn)入、離開并根據(jù)停車時間計費。</p><p>  2.1.1算法描述及實驗步驟</p><p><b>  停車場管理系統(tǒng)</b></p>

14、<p>  2.1.2調(diào)試過程及實驗結(jié)果</p><p><b>  2.2題目:</b></p><p><b>  字符串的操作:</b></p><p>  任務(wù):字符串采用數(shù)組存儲,建立兩個字符串String1和String2.輸出兩個字符串。</p><p>  將字符串St

15、ring2的頭n個字符添加到String1的尾部,輸出結(jié)果。</p><p>  查找String3在串String1中的位置,若String3在String1中不存在,則插入String3在String1中的m位置上。輸出結(jié)果。</p><p>  2.2.1算法描述及實驗步驟</p><p>  void InitString(Sstring *S,int ma

16、x,char *string);初始化字符串S,將string的字符復(fù)制到S中;</p><p>  int Insert(Sstring *S, int pos, Sstring T):在主串S的pos位置插入子串T;</p><p>  int SubString(Sstring *T,Sstring S, int pos, int len) 取主串S從pos位置開始的長度為len的字

17、串,取成功返回1,失敗返回0;</p><p>  void Destroy(Sstring *S):撤銷串S的所占的空間;</p><p>  void Index(Sstring S,Sstring T,int pos):查找S從pos位置開始的子串T</p><p>  2.2.2調(diào)試過程及實驗結(jié)果</p><p><b> 

18、 2.3題目:</b></p><p>  2.3.1算法描述及實驗步驟</p><p>  通過追蹤兩個節(jié)點的路徑,來找出他們的祖先,還可以通過判斷從根結(jié)點開始,判斷以當(dāng)前結(jié)點為根的樹中左右子樹是不是包含我們要找的兩個結(jié)點。如果兩個結(jié)點都出現(xiàn)在它的左子樹中,那最低的共同父結(jié)點也出現(xiàn)在它的左子樹中。如果兩個結(jié)點都出現(xiàn)在它的右子樹中,那最低的共同父結(jié)點也出現(xiàn)在它的右子樹中。如果兩

19、個結(jié)點一個出現(xiàn)在左子樹中,一個出現(xiàn)在右子樹中,那當(dāng)前的結(jié)點就是最低的共同父結(jié)點</p><p><b>  否</b></p><p><b>  是</b></p><p>  否 </p><p>  是

20、是</p><p>  2.3.2調(diào)試過程及實驗結(jié)果</p><p><b>  2.4題目:</b></p><p><b>  二叉樹的運算2 </b></p><p>  任務(wù) :請設(shè)計一個算法,把二叉樹的葉子結(jié)點按從左到右的順序連成一個單鏈表。二叉樹用二叉鏈存儲,鏈接時用葉子結(jié)點的rchil

21、d 域存放指針。</p><p>  2.4.1算法描述及實驗步驟</p><p>  void insert_data(int x) 創(chuàng)建樹;</p><p>  void leaflink(test *root) 葉子節(jié)點連接;</p><p>  2.4.2調(diào)試過程及實驗結(jié)果</p><p>  三.課程設(shè)

22、計分析與總結(jié)</p><p>  課程設(shè)計是我們專業(yè)課程知識綜合應(yīng)用的實踐訓(xùn)練,著是我們邁向社會,從事職業(yè)工作前一個必不少的過程.”千里之行始于足下”,通過這次課程設(shè)計,我深深體會到這句千古名言的真正含義.我今天認(rèn)真的進(jìn)行課程設(shè)計,學(xué)會腳踏實地邁開這一步,就是為明天能穩(wěn)健地在社會大潮中奔跑打下堅實的基礎(chǔ).通過這次課程設(shè)計,對于數(shù)據(jù)結(jié)構(gòu)有了更深的了解。書本上的知識與老師的講解都比較容易理解,但是當(dāng)自己采用剛學(xué)的知

23、識點編寫程序時卻感到十分棘手,有時表現(xiàn)在想不到適合題意的算法,有時表現(xiàn)在算法想出來后,只能將書本上原有的程序段謄寫到自己的程序中再加以必要的連接以完成程序的編寫。針對這一情況,我會嚴(yán)格要求自己,熟練掌握算法思想,盡量獨立完成程序的編寫與修改工作,只有這樣,才能夠提高運用知識,解決問題的能力。在這次設(shè)計過程中,體會了學(xué)以致用、突出自己勞動成果的喜悅心情,從中發(fā)現(xiàn)自己平時學(xué)習(xí)的不足和薄弱環(huán)節(jié),從而加以彌補。</p><p

24、><b>  四. 源程序清單</b></p><p><b>  停車場:</b></p><p>  #include "stdio.h" </p><p>  #include "stdlib.h" </p><p>  #include

25、"string.h" </p><p>  #include "conio.h"</p><p>  #define N 100 /*定義一個全局變量用來存儲停車場的最大容量*/ </p><p>  typedef struct time</p><p><b>  { &l

26、t;/b></p><p>  int hour; </p><p>  int min; </p><p>  }Time; /*用于計算停車時間以便計算停車費用*/</p><p>  typedef struct node</p><p><b>  { </b></

27、p><p>  char carnum[10]; </p><p>  Time reach; </p><p>  Time go; </p><p>  }Car; /*車輛信息結(jié)點*/ </p><p>  typedef struct NODE</p><p><b&g

28、t;  { </b></p><p>  Car *stack[150]; </p><p>  int top; </p><p>  }SqStack; /*定義一個棧作為停車站*/</p><p>  typedef struct car</p><p><b>  { &l

29、t;/b></p><p>  Car *data; </p><p>  struct car *next; </p><p>  }QNode; /*定義一個車結(jié)構(gòu)*/</p><p>  typedef struct Node</p><p><b>  { </b>&

30、lt;/p><p>  QNode *front; </p><p>  QNode *rear; </p><p>  }LinkQueue; /*等待通道*/ </p><p>  void InitStack(SqStack *s) /*初始化棧*/ </p><p><b>  {

31、</b></p><p><b>  int i; </b></p><p>  s->top=0; </p><p>  for(i=0;i<=N;i++) </p><p>  s->stack[s->top]=NULL; </p><p>

32、<b>  } </b></p><p>  int InitQueue(LinkQueue *Q) /*初始化便道*/ </p><p><b>  { </b></p><p>  Q->front=(QNode *)malloc(sizeof(QNode)); </p><p&

33、gt;  if(Q->front!=NULL) </p><p><b>  { </b></p><p>  Q->front->next=NULL; </p><p>  Q->rear=Q->front; </p><p>  return(1); </p&g

34、t;<p><b>  } </b></p><p>  else return(-1); </p><p><b>  } </b></p><p>  int arrive(SqStack *In,LinkQueue *W) /*車輛到達(dá)*/ </p><p><

35、b>  { </b></p><p>  Car *p; </p><p>  QNode *t; </p><p>  p=(Car *)malloc(sizeof(Car)); </p><p>  flushall(); </p><p>  printf("\n\

36、t\t停車場還有%d個停車位",N-In->top);</p><p>  printf("\n\t\t請輸入車牌號碼:"); </p><p>  gets(p->carnum); </p><p>  if(In->top<N) /*停車場未滿,車進(jìn)車場*/ </p><

37、p><b>  { </b></p><p>  In->top++;</p><p>  printf("\n\t\t停車的位置:%d號停車位。",In->top); </p><p>  printf("\n\t\t請輸入車到達(dá)的時間(格式“**:**”):"); <

38、;/p><p>  scanf("%d:%d",&(p->reach.hour),&(p->reach.min)); </p><p>  In->stack[In->top]=p;</p><p>  printf("\t\t請按任意鍵返回");</p><p>

39、;  getch(); </p><p>  return(1); </p><p><b>  } </b></p><p>  else /*停車場已滿,車進(jìn)便道*/ </p><p><b>  { </b></p><p>  printf(&q

40、uot;\n\t\t停車位已滿,該車須在便道等待!"); </p><p>  t=(QNode *)malloc(sizeof(QNode)); </p><p>  t->data=p; </p><p>  t->next=NULL; </p><p>  W->rear->next=t

41、; </p><p>  W->rear=t; </p><p>  printf("\t\t請按任意鍵返回"); </p><p><b>  getch();</b></p><p>  return(1); </p><p><b>  }

42、</b></p><p><b>  } </b></p><p>  void Print(Car *p,int room) /*輸出停車站車的信息*/ </p><p><b>  { </b></p><p>  int A1,A2,B1,B2; </p&g

43、t;<p>  printf("\n\t\t請輸入車離開的時間(格式“**:**”):"); </p><p>  scanf("%d:%d",&(p->go.hour),&(p->go.min)); </p><p>  printf("\n\t\t車牌號碼:"); <

44、/p><p>  puts(p->carnum); </p><p>  printf("\n\t\t車到達(dá)的時間是: %d:%d",p->reach.hour,p->reach.min); </p><p>  printf("\t\t車離開的時間是: %d:%d",p->go.hour,p-&g

45、t;go.min); </p><p>  A1=p->reach.hour; </p><p>  A2=p->reach.min; </p><p>  B1=p->go.hour; </p><p>  B2=p->go.min; </p><p>  printf(&

46、quot;\n\t\t費用為: %d元",(((B1-A1)*60+(B2-A2)))); </p><p>  free(p); </p><p><b>  }</b></p><p>  void go(SqStack *In,SqStack *Out,LinkQueue *W) /*車輛離開*/ </

47、p><p><b>  { </b></p><p>  int locate; </p><p>  Car *p,*t; </p><p>  QNode *q; </p><p>  /*判斷車場內(nèi)是否有車*/ </p><p>  if(In->t

48、op>0) /*有車*/ </p><p><b>  { </b></p><p>  while(1) /*輸入離開車輛的信息*/ </p><p><b>  { </b></p><p>  printf("\n\t\t請輸入車在停車場的位置:",I

49、n->top); </p><p>  scanf("%d",&locate); </p><p>  if(locate>=1&&locate<=In->top) </p><p><b>  break; </b></p><p><

50、;b>  } </b></p><p>  while(In->top>locate) /*車輛離開*/ </p><p><b>  { </b></p><p>  Out->top++; </p><p>  Out->stack[Out->top]=

51、In->stack[In->top]; </p><p>  In->stack[In->top]=NULL; </p><p>  In->top--; </p><p><b>  } </b></p><p>  p=In->stack[In->top];

52、 </p><p>  In->stack[In->top]=NULL; </p><p>  In->top--; </p><p>  while(Out->top>=1) </p><p><b>  { </b></p><p>  In-&

53、gt;top++; </p><p>  In->stack[In->top]=Out->stack[Out->top]; </p><p>  Out->stack[Out->top]=NULL; </p><p>  Out->top--; </p><p><b>  

54、} </b></p><p>  Print(p,locate); </p><p>  /*判斷通道上是否有車及車站是否已滿*/ </p><p>  if((W->front!=W->rear)&&In->top<N) /*便道的車輛進(jìn)入停車場*/ </p><p>

55、;<b>  { </b></p><p>  q=W->front->next; </p><p>  t=q->data; </p><p>  In->top++; </p><p>  printf("\n\t\t便道的%s號車進(jìn)入車場第%d號停車位。"

56、,t->carnum,In->top); </p><p>  printf("\n\t\t請輸入現(xiàn)在的時間(格式“**:**”):"); </p><p>  scanf("%d:%d",&(t->reach.hour),&(t->reach.min)); </p><p>

57、;  W->front->next=q->next;</p><p>  if(q==W->rear) W->rear=W->front; </p><p>  In->stack[In->top]=t; </p><p><b>  free(q);</b></p><

58、;p><b>  } </b></p><p><b>  } </b></p><p>  else printf("\nt\t停車場里沒有車\n"); /*沒車*/</p><p>  printf("\t\t請按任意鍵返回");</p><p&

59、gt;<b>  getch();</b></p><p><b>  }</b></p><p>  void info1(SqStack *S) /*列表輸出車場信息*/ </p><p><b>  { </b></p><p><b>  int i;

60、 </b></p><p>  if(S->top>0) /*判斷停車場內(nèi)是否有車*/ </p><p><b>  { </b></p><p>  printf("\n->>>>>>>查看車場:"); </p><p&g

61、t;  printf("\n位置 到達(dá)時間 車牌號\n"); </p><p>  for(i=1;i<=S->top;i++) </p><p><b>  { </b></p><p>  printf("%d",i); </p><p> 

62、 printf("\t%d:%d\t",S->stack[i]->reach.hour,S->stack[i]->reach.min); </p><p>  puts(S->stack[i]->carnum); </p><p><b>  } </b></p><p><

63、b>  } </b></p><p>  else printf("\n\t\t停車場里沒有車"); </p><p><b>  } </b></p><p>  void info2(LinkQueue *W) /*顯示便道信息*/ </p><p><b&

64、gt;  { </b></p><p>  QNode *p; </p><p>  p=W->front->next; </p><p>  if(W->front!=W->rear) /*判斷通道上是否有車*/ </p><p><b>  { </b><

65、/p><p>  printf("\n便道中車輛的號碼為:\n"); </p><p>  while(p!=NULL) </p><p><b>  { </b></p><p>  puts(p->data->carnum); </p><p>  

66、p=p->next; </p><p><b>  } </b></p><p><b>  } </b></p><p>  else printf("\n便道里沒有車\n");</p><p>  printf("請按任意鍵返回");&l

67、t;/p><p><b>  getch();</b></p><p><b>  } </b></p><p>  void info(SqStack S,LinkQueue W) </p><p><b>  { </b></p><p> 

68、 info1(&S); /*顯示停車場信息*/ </p><p>  info2(&W); /*顯示停便道信息*/ </p><p><b>  } </b></p><p>  void main() </p><p><b>  { </b></p>

69、;<p>  SqStack In,Out; </p><p>  LinkQueue Wait; </p><p><b>  int a; </b></p><p>  InitStack(&In);</p><p>  InitStack(&Out); </p>

70、<p>  InitQueue(&Wait);</p><p>  while(1) </p><p><b>  { </b></p><p>  printf("\n********************歡迎使用停車場管理系統(tǒng)******************\n");</p>

71、;<p>  printf("\n\t\t該停車場的容量為150:");</p><p>  printf("\n\t\t次停車場的停車費用為1.00元/分鐘。\n");</p><p>  printf("\n 1--------車輛停車");</p><p>  printf("

72、\n 2--------車輛離開");</p><p>  printf("\n 3--------停車場信息");</p><p>  printf(\n4--------退出系統(tǒng)\n");</p><p>  printf("\n\t\t請選擇相應(yīng)操作");</p><p>  

73、while(1) </p><p><b>  { </b></p><p>  scanf("%d",&a);</p><p>  switch(a) </p><p><b>  { </b></p><p>  case 1:

74、arrive(&In,&Wait);break; </p><p>  case 2:go(&In,&Out,&Wait);break; </p><p>  case 3:info(In,Wait);break; </p><p>  case 4:{printf("\t\t謝謝使用!歡迎下次光臨!");

75、exit(0);} </p><p>  default:printf("\n\t\t按鍵無效,請重新按鍵選擇!");</p><p><b>  }</b></p><p>  printf("\n********************歡迎使用停車場管理系統(tǒng)******************\n"

76、);</p><p>  printf("\n\t\t該停車場的容量為150:");</p><p>  printf("\n\t\t次停車場的停車費用為1.00元/分鐘。\n");</p><p>  printf("\n 1--------車輛停車");</p><p>  pr

77、intf("\n 2--------車輛離開");</p><p>  printf("\n 3--------停車場信息");</p><p>  printf("\n 4--------退出系統(tǒng)\n");</p><p>  printf("\n\t\t請選擇相應(yīng)操作");</

78、p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  字符串操作:</b></p><p>  #include<stdio

79、.h></p><p>  #include<malloc.h></p><p>  #include<string.h></p><p>  typedef struct {</p><p><b>  char *ch;</b></p><p>  int Max

80、size;</p><p>  int length;</p><p><b>  }Sstring;</b></p><p>  void InitString(Sstring *S,int max,char *string)</p><p><b>  {</b></p><

81、p><b>  int i;</b></p><p>  S->ch = (char *)malloc(max*sizeof(char));</p><p>  S->Maxsize=max;</p><p>  S->length = strlen(string); </p><p>

82、  for(i = 0; i < S->length; i++)</p><p>  S->ch[i] = string[i];</p><p><b>  }</b></p><p>  int Insert(Sstring *S, int pos, Sstring T)</p><p><b&

83、gt;  {int i;</b></p><p>  if(pos < 0)</p><p>  {printf("參數(shù)pos出錯!");return 0;}</p><p><b>  else</b></p><p><b>  { </b>&

84、lt;/p><p>  //重新申請S->ch所指數(shù)組空間,原數(shù)組元素存放在新數(shù)組的前面</p><p>  if(S->length + T.length > S->Maxsize)</p><p>  realloc(S->ch, (S->length+T.length)*sizeof(char));</p><

85、;p>  S->Maxsize=S->length+T.length;</p><p>  for(i = S->length-1; i >= pos; i--)</p><p>  S->ch[i+T.length] = S->ch[i]; //依次后移T.length個位置</p><p>  for(i = 0; i

86、 < T.length; i++)</p><p>  S->ch[pos+i] = T.ch[i]; //插入字串</p><p>  S->length = S->length + T.length; //改變S的數(shù)據(jù)元素個數(shù)</p><p><b>  return 1;</b></p><

87、p><b>  }</b></p><p><b>  }</b></p><p>  //取主串S從pos位置開始的長度為len的字串,取成功返回1,失敗返回0</p><p>  int SubString(Sstring *T,Sstring S, int pos, int len)</p>&l

88、t;p><b>  {int i;</b></p><p>  if(pos < 0 || len < 0 || pos+len > S.length)</p><p>  { printf("參數(shù)pos和len出錯!");</p><p><b>  return 0;<

89、/b></p><p><b>  }</b></p><p>  if(len>T->Maxsize)</p><p><b>  {</b></p><p>  T->ch=(char*)malloc(len*sizeof(char));</p><p

90、>  T->Maxsize=len;</p><p><b>  }</b></p><p>  for(i = 0; i < len; i++)</p><p>  T->ch[i] = S.ch[pos+i];</p><p>  T->length = len;

91、</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  void Destroy(Sstring *S)</p><p><b>  {</b></p><p>  free(S->c

92、h);</p><p>  S->Maxsize = 0;</p><p>  S->length = 0;</p><p><b>  }</b></p><p>  void Index(Sstring S,Sstring T,int pos)</p><p><b> 

93、 {</b></p><p>  int i=pos,j=0,v;int m;</p><p>  while(i<S.length&&j<T.length)</p><p><b>  {</b></p><p>  if(S.ch[i]==T.ch[j])</p>

94、<p><b>  {i++;</b></p><p><b>  j++;</b></p><p><b>  }</b></p><p><b>  else {</b></p><p><b>  i=i-j+1;</b&

95、gt;</p><p><b>  j=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(j==T.length)</p><p>  {v=i-T.length;</p&g

96、t;<p>  printf("串String3在String1中的%d位置",v);}</p><p><b>  else {</b></p><p>  printf("串String3在String1中不存在!\n");</p><p>  printf("請輸入插入位置m

97、:\n");</p><p>  scanf("%d",&m);</p><p>  Insert(&S,m,T);</p><p>  for(i=0;i<S.length;i++)</p><p>  printf("%c",S.ch[i]);</p>

98、<p>  printf("\n");</p><p><b>  }</b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  

99、Sstring S1,S2,S3,S4;</p><p><b>  int i;</b></p><p><b>  int j;</b></p><p><b>  int n;</b></p><p>  int max1=25,max2=10,max3=20,max4=

100、5;</p><p>  InitString(&S1,max1,"structAreBox");</p><p>  InitString(&S2,max2,"VertexType");</p><p>  InitString(&S3,max3,"Data");</p>

101、;<p>  InitString(&S4,max4,"");</p><p>  printf("* * * * * * * * * * * * * * * * * * * * * * * * *\n");</p><p>  printf("*1.輸入字符串string1*\n");</p>

102、<p>  printf("*2.輸入字符串string2*\n");</p><p>  printf("*3.輸入字符串string3*\n");</p><p>  printf("*4.串String2的頭n個字符添加到String1的尾部,輸出結(jié)果*\n");</p><p>  pr

103、intf("*5.查找sring3在string1的位置*\n");</p><p>  printf("* * * * * * * * * * * * * * * * * * * * * * * * *\n");</p><p>  //輸入第一個字符串</p><p>  printf("\n請輸入串S1:&qu

104、ot;);</p><p>  for(i=0;i<S1.length;i++)</p><p>  printf("%c",S1.ch[i]);</p><p>  printf("\n");</p><p>  //輸入第二個字符串</p><p>  printf(&

105、quot;\n請輸入串S2:");</p><p>  for(i=0;i<S2.length;i++)</p><p>  printf("%c",S2.ch[i]);</p><p>  printf("\n");</p><p>  //輸入第三個字符串</p>&l

106、t;p>  printf("\n請輸入串S3:");</p><p>  for(i=0;i<S3.length;i++)</p><p>  printf("%c",S3.ch[i]);</p><p>  printf("\n");</p><p>  //將字符串2

107、的頭n個字符添加到S1尾部</p><p>  if(n<S2.length)</p><p>  {printf("請輸入n的值:\n");</p><p>  scanf("%d",&n);</p><p>  SubString(&S4,S2,0,n);</p>

108、<p>  Insert( &S1,S1.length,S4);}</p><p>  else printf("輸入不正確");</p><p>  //查找String3在串String1中的位置,若String3在String1中不存在,則插入String3在String1中的m位置上。</p><p>  for(i=

109、0;i<S1.length;i++)</p><p>  printf("%c",S1.ch[i]);</p><p>  printf("\n");</p><p>  Index(S1,S3,0);</p><p>  printf("\n");</p>&l

110、t;p>  Destroy(&S4);</p><p><b>  }</b></p><p><b>  找祖先: </b></p><p>  #include <malloc.h></p><p>  #include<stdio.h></p>

111、;<p>  #include<stdlib.h></p><p>  #define max 100</p><p>  typedef struct node {</p><p>  int data; //元素數(shù)據(jù)</p><p>  struct node * lchild; //指向左孩子</p>

112、;<p>  struct node * rchild; //指向右孩子</p><p><b>  } BTNode;</b></p><p>  BTNode *root;</p><p>  int a[max],c[max],leaf1,leaf2,len1,len2;</p><p>  void

113、 insert_data(int x) /*生成二叉排序樹*/</p><p><b>  { </b></p><p>  BTNode *p,*q,*s;</p><p>  s=(BTNode*)malloc(sizeof(BTNode));</p><p>  s->data=x;</p

114、><p>  s->lchild=NULL;</p><p>  s->rchild=NULL;</p><p><b>  if(!root)</b></p><p><b>  {</b></p><p><b>  root=s; </b>

115、</p><p><b>  }</b></p><p>  p=root; </p><p>  while(p) /*如何接入二叉排序樹的適當(dāng)位置*/</p><p><b>  {</b></p><p><b&

116、gt;  q=p;</b></p><p>  if(p->data==x)</p><p><b>  {</b></p><p>  //printf("data already exist! \n");</p><p><b>  return;</b>&

117、lt;/p><p><b>  }</b></p><p>  else if(x<p->data)</p><p>  p=p->lchild; </p><p><b>  else </b></p><p>  p=p->rchild;</p

118、><p><b>  }</b></p><p>  if(x<q->data)</p><p>  q->lchild=s;</p><p><b>  else </b></p><p>  q->rchild=s;</p><p&

119、gt;<b>  }</b></p><p>  void itemPath(BTNode * b, int path[],int leaf,int* len,int pathlen){ //求出根節(jié)點到指定結(jié)點的路徑</p><p><b>  int i;</b></p><p>  if(b != NULL) {&l

120、t;/p><p>  if(b->data == leaf) {</p><p>  printf(" %d到根節(jié)點的路徑為: %d ",b->data,b->data);</p><p>  a[0] = leaf1;</p><p>  for(i=pathlen-1; i>=0; i--) {&

121、lt;/p><p>  printf("%d ",path[i]);</p><p>  a[pathlen-i] = path[i];</p><p><b>  }</b></p><p>  printf("\n");</p><p>  *len = p

122、athlen;</p><p><b>  } else {</b></p><p>  path[pathlen] = b->data; //將數(shù)據(jù)放入路徑中</p><p>  pathlen++; //路徑增長一</p><p>  itemPath(b->lchild,path,leaf,len,p

123、athlen);</p><p>  itemPath(b->rchild,path,leaf,len,pathlen);</p><p>  pathlen--; //恢復(fù)原態(tài)</p><p><b>  }</b></p><p><b>  }</b></p><p&

124、gt;<b>  }</b></p><p>  void findParent() {</p><p>  int parent,flag=0;</p><p>  for(int i=1; i<=len1; i++) {</p><p>  for(int j=1; j<=len2; j++) {<

125、/p><p>  if(a[i] == a[j]) {</p><p>  parent = a[i];</p><p>  printf(" %d是%d和%d的最近祖先!\n",parent,leaf1,leaf2);</p><p><b>  flag = 1;</b></p>&l

126、t;p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(flag)</b></p><p><b>  break;</b>&l

127、t;/p><p><b>  }</b></p><p><b>  }</b></p><p>  int main()</p><p><b>  {</b></p><p>  int i,x,l1,l2;</p><p>  

128、printf("===========找祖先===========\n");</p><p>  int path1[100],path2[100];</p><p><b>  i=1; </b></p><p>  root=NULL; /*千萬別忘了賦初值給root!*/</p>&

129、lt;p><b>  do</b></p><p><b>  {</b></p><p>  printf("請輸入第%d個數(shù):",i);</p><p><b>  i++;</b></p><p>  scanf("%d",&

130、amp;x); /*從鍵盤采集數(shù)據(jù),以-9999表示輸入結(jié)束*/</p><p>  if(x==-9999){ </p><p>  //printf("\nNow output data value:\n"); </p><p><b>  }</b></p><p><

131、b>  else </b></p><p>  insert_data(x); /*調(diào)用插入數(shù)據(jù)元素的函數(shù)*/</p><p><b>  } </b></p><p>  while(x!=-9999); </p><p>  printf("請輸入兩個要找的節(jié)點

132、: ");</p><p>  scanf("%d%d",&leaf1,&leaf2);</p><p>  l1 = leaf1;</p><p>  l2 = leaf2;</p><p>  itemPath(root,path1,l1,&len1,0);</p>&l

133、t;p>  itemPath(root,path2,l2,&len2,0);</p><p>  findParent();</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  二叉樹運算二:</b

134、></p><p>  #include <stdio.h></p><p>  #include <stdlib.h></p><p>  typedef struct lnode</p><p><b>  {</b></p><p><b>  int

135、 data;</b></p><p>  struct lnode *lchild,*rchild;</p><p><b>  }test;</b></p><p>  test *root,*k,*n; </p><p>  void insert_data(int x) &l

136、t;/p><p><b>  { </b></p><p>  test *p,*q,*s;</p><p>  s=(test*)malloc(sizeof(test));</p><p>  s->data=x;</p><p>  s->lchild=NULL;</p>

137、<p>  s->rchild=NULL;</p><p><b>  if(!root)</b></p><p><b>  {</b></p><p><b>  root=s; </b></p><p><b>  return;</b&

138、gt;</p><p><b>  }</b></p><p>  p=root; </p><p>  while(p) </p><p><b>  {</b></p><p>  q=p; </p>

139、<p>  if(p->data==x)</p><p><b>  {</b></p><p>  printf("data already exist! \n");</p><p><b>  return;</b></p><p><b>  

140、}</b></p><p>  else if(x<p->data)</p><p>  p=p->lchild; </p><p><b>  else </b></p><p>  p=p->rchild;</p><p><b>  }<

141、/b></p><p>  if(x<q->data)</p><p>  q->lchild=s;</p><p><b>  else </b></p><p>  q->rchild=s;</p><p><b>  }</b></p

142、><p>  void leaflink(test *root)</p><p><b>  {</b></p><p>  if(!root)return;</p><p>  if(root->lchild==NULL&&root->rchild==NULL){</p><

143、p>  if(k==NULL)k=n=root; </p><p>  else {n->rchild=root;n=n->rchild;}}</p><p>  if(root->lchild)leaflink(root->lchild);</p><p>  if(root->rchild)leaflink(root->

溫馨提示

  • 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

提交評論