2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第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><b>  《數(shù)據(jù)結(jié)構(gòu)與算法》</b></p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  (2012— 2013學(xué)年 第 1 學(xué)期)</p><p>  專 業(yè): 網(wǎng)絡(luò)工程 </p><p>  班 級(jí):

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

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

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

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

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

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

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

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

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

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

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

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

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

15、ring2的頭n個(gè)字符添加到String1的尾部,輸出結(jié)果。</p><p>  查找String3在串String1中的位置,若String3在String1中不存在,則插入String3在String1中的m位置上。輸出結(jié)果。</p><p>  2.2.1算法描述及實(shí)驗(yàn)步驟</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)試過程及實(shí)驗(yàn)結(jié)果</p><p><b> 

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

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

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

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

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

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

24、><b>  四. 源程序清單</b></p><p><b>  停車場(chǎng):</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 /*定義一個(gè)全局變量用來存儲(chǔ)停車場(chǎng)的最大容量*/ </p><p>  typedef struct time</p><p><b>  { &l

26、t;/b></p><p>  int hour; </p><p>  int min; </p><p>  }Time; /*用于計(jì)算停車時(shí)間以便計(jì)算停車費(fèi)用*/</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é)點(diǎn)*/ </p><p>  typedef struct NODE</p><p><b&g

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

29、t;/b></p><p>  Car *data; </p><p>  struct car *next; </p><p>  }QNode; /*定義一個(gè)車結(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停車場(chǎng)還有%d個(gè)停車位",N-In->top);</p><p>  printf("\n\t\t請(qǐng)輸入車牌號(hào)碼:"); </p><p>  gets(p->carnum); </p><p>  if(In->top<N) /*停車場(chǎng)未滿,車進(jìn)車場(chǎng)*/ </p><

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

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

39、;  getch(); </p><p>  return(1); </p><p><b>  } </b></p><p>  else /*停車場(chǎng)已滿,車進(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請(qǐng)按任意鍵返回"); </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請(qǐng)輸入車離開的時(shí)間(格式“**:**”):"); </p><p>  scanf("%d:%d",&(p->go.hour),&(p->go.min)); </p><p>  printf("\n\t\t車牌號(hào)碼:"); <

44、/p><p>  puts(p->carnum); </p><p>  printf("\n\t\t車到達(dá)的時(shí)間是: %d:%d",p->reach.hour,p->reach.min); </p><p>  printf("\t\t車離開的時(shí)間是: %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費(fèi)用為: %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>  /*判斷車場(chǎng)內(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請(qǐng)輸入車在停車場(chǎng)的位置:",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)入停車場(chǎng)*/ </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號(hào)車進(jìn)入車場(chǎng)第%d號(hào)停車位。"

56、,t->carnum,In->top); </p><p>  printf("\n\t\t請(qǐng)輸入現(xiàn)在的時(shí)間(格式“**:**”):"); </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停車場(chǎng)里沒有車\n"); /*沒車*/</p><p>  printf("\t\t請(qǐng)按任意鍵返回");</p><p&

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

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

61、t;  printf("\n位置 到達(dá)時(shí)間 車牌號(hào)\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停車場(chǎng)里沒有車"); </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便道中車輛的號(hào)碼為:\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("請(qǐng)按任意鍵返回");&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); /*顯示停車場(chǎng)信息*/ </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********************歡迎使用停車場(chǎng)管理系統(tǒng)******************\n");</p>

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

72、\n 2--------車輛離開");</p><p>  printf("\n 3--------停車場(chǎng)信息");</p><p>  printf(\n4--------退出系統(tǒng)\n");</p><p>  printf("\n\t\t請(qǐng)選擇相應(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按鍵無效,請(qǐng)重新按鍵選擇!");</p><p><b>  }</b></p><p>  printf("\n********************歡迎使用停車場(chǎng)管理系統(tǒng)******************\n"

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

77、intf("\n 2--------車輛離開");</p><p>  printf("\n 3--------停車場(chǎng)信息");</p><p>  printf("\n 4--------退出系統(tǒng)\n");</p><p>  printf("\n\t\t請(qǐng)選擇相應(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出錯(cuò)!");return 0;}</p><p><b>  else</b></p><p><b>  { </b>&

84、lt;/p><p>  //重新申請(qǐng)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個(gè)位置</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ù)元素個(gè)數(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出錯(cuò)!");</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("請(qǐng)輸入插入位置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個(gè)字符添加到String1的尾部,輸出結(jié)果*\n");</p><p>  pr

103、intf("*5.查找sring3在string1的位置*\n");</p><p>  printf("* * * * * * * * * * * * * * * * * * * * * * * * *\n");</p><p>  //輸入第一個(gè)字符串</p><p>  printf("\n請(qǐng)輸入串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>  //輸入第二個(gè)字符串</p><p>  printf(&

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

106、t;p>  printf("\n請(qǐng)輸入串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個(gè)字符添加到S1尾部</p><p>  if(n<S2.length)</p><p>  {printf("請(qǐng)輸入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; //元素?cái)?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é)點(diǎn)到指定結(jié)點(diǎn)的路徑</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é)點(diǎn)的路徑為: %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("請(qǐng)輸入第%d個(gè)數(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("請(qǐng)輸入兩個(gè)要找的節(jié)點(diǎn)

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>  二叉樹運(yùn)算二:</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等.壓縮文件請(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)論