數(shù)據(jù)的結(jié)構(gòu)實(shí)驗(yàn)的答案_第1頁
數(shù)據(jù)的結(jié)構(gòu)實(shí)驗(yàn)的答案_第2頁
數(shù)據(jù)的結(jié)構(gòu)實(shí)驗(yàn)的答案_第3頁
數(shù)據(jù)的結(jié)構(gòu)實(shí)驗(yàn)的答案_第4頁
數(shù)據(jù)的結(jié)構(gòu)實(shí)驗(yàn)的答案_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、實(shí)用標(biāo)準(zhǔn)文案數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)2013/ 2014 學(xué)年 第 2 學(xué)期姓 名:學(xué) 號:班 級:指導(dǎo)教師:濰坊學(xué)院計(jì)算機(jī)工程學(xué)院2014精彩文檔預(yù)備實(shí)驗(yàn)、實(shí)驗(yàn)?zāi)康腃語言的函數(shù)數(shù)組指針結(jié)構(gòu)體知識1、復(fù)習(xí)c語言中函數(shù)、數(shù)組、指針和結(jié)構(gòu)體的概念。2、熟悉利用C語言進(jìn)行程序設(shè)計(jì)的一般方法。二、實(shí)驗(yàn)內(nèi)容和要求1、調(diào)試程序:輸出100以內(nèi)所有的素?cái)?shù)(用函數(shù)實(shí)現(xiàn))#include<stdio.h>/*判斷一個(gè)數(shù)是否為素?cái)?shù)*/int isprime(int n)for(int m=2;m*m<=n;m+) if(n%m= =0) return 0;return 1;/*輸出100以內(nèi)所有素?cái)?shù)*/

2、int main()int i;for(i=2;i<100;i+)if(isprime(i尸=1) printf(" %4d' ,i);return 0;運(yùn)行結(jié)果:1m$711 13 1? 19S3“ 31 ”41 43 476 » fcV 71用 皆爭XIHhv片41中.Miw.2、調(diào)試程序:對一維數(shù)組中的元素進(jìn)行逆序排列。#include<stdio.h>#define N 10int main()int aN尸0,1,2,345,6,7,8,9,i,temp;printf( the original Array is:n ");fo

3、r(i=0;i<N;i+)printf( %4d”,ai);for(i=0;i<N/2;i+)/*交換數(shù)組元素使之逆序*/temp=ai;ai=aN-i-1;aN-i-1=temp;printf( nthe changed Array is:n ");for(i=0;i<N;i+)printf( %4d”,ai);return 0;運(yùn)行結(jié)果:1.he tar-1miii-aiIJLRI*,Khrt £:hAft4|Ad A»l-4y i-E » a t 6 53、調(diào)試程序:在二維數(shù)組中,若某一位置上的元素在該行中最大,而在該列中最小,則

4、該 元素即為該二維數(shù)組的一個(gè)鞍點(diǎn)。要求從鍵盤上輸入一個(gè)二維數(shù)組,當(dāng)鞍點(diǎn)存在時(shí),把鞍點(diǎn)找出來。#include<stdio.h>#define M 3#define N 4int main()int aMN,i,j,k;printf(請輸入二維數(shù)組的數(shù)據(jù):n”);for(i=0;i<M;i+)for(j=0;j<N;j+)scanf( " %d' ,&aij);for(i=0;i<M;i+)/* 輸出矩陣 */for(j=0;j<N;j+)printf(" 4d' ,aij);printf( n”“);for(i=0

5、;i<M;i+)k=0;for(j=1;j<N;j+)/*找出第i行的最大值*/if(ai加aik)k=j;for(j=0;j<M;j+)/*判斷第i行的最大值是否為該列的最小值*/if(a皿k<aik)break;if(j=M)/*在第i行找到鞍點(diǎn)*/printf("%d,%d,id ),aik,i,k);return 0;4、調(diào)試程序:利用指針輸出二維數(shù)組的元素。#include<stdio.h>int main()int a34=1,3,5,7,9,11,13,15,17,19,21,23;int *p;for(p=a0;p<a0+12

6、;p+)if(p-a0)%4= =0) printf( n" ),: printf(%4d ” ,*p);return 0;運(yùn)行結(jié)果:5、調(diào)試程序:輸入10個(gè)學(xué)生的成績,每個(gè)學(xué)生成績包括學(xué)號、姓名和三門課的成績。要 求打印出三門課的平均成績及成績最高者的姓名和成績。#include<stdio.h>#define N 10;struct studentchar num6; /* 學(xué)號 */char name8; /* 姓名 */int score3; /* 成績*/float avr; /* 平均成績 */stuN;int main()int i,j,max,maxi,s

7、um;float average;for(i=0;i<N;i+)/*輸入10個(gè)學(xué)生的成績信息*/printf( n請輸入第d學(xué)生的成績:n”,i+1);printf(學(xué)號:”); scanf( %s”,stui.num); printf(姓名”); scanf( %s”,); for(j=0;j<3;j+)printf(成績 %d”,j+1);scanf( %d” ,&stui.scorej); average=0;max=0;maxi=0;for(i=0;i<N;i+)/*計(jì)算平均成績,找出成績最高的學(xué)生*/sum=0; for(j=0;j<

8、3;j+)sum+=stui.scorej;stui.avr=sum/3.0;average+=stui.avr; if(sum>max) max=sum; maxi=i; average/=10;printf(“學(xué)號 姓名 成績1 成績2 成績3 平均分n);for(i=0;i<10;i+)printf( %8s%10s”,stui.num,);for(j=0;j<3;j+)printf( %7d”,stui.scorej);printf( %6.2fn ”,stui.avr);printf(平均成績是:5.2fn average);printf(最好成績

9、的學(xué)生是:s,總分是 d”,,max);return 0;運(yùn)行結(jié)果一 !41Ji* L_ ?;!q EEJfilJ-rr Ul UV-l感忐嘿喜點(diǎn)哮霆篇域易哮瞬君 -f F.- * 4;,-=t ht' Lx t s 4;4by h 七、圮*TrJ F. * f A AfrJH,rr ¥ m H J- c 忖.T7" V w Q H u Q 帚 n" y E 二 月 而>序 定序 Ntf*tfl:tf?岸 t-lJf« L主?!«1堂;S聚小堇小蟄I .' ' '.'.;L-

10、 ;磨,1,1:,II-九二fl.八7a” - -L成沱叫rV寸 i LUflJChr 二 士彳 yMJS-f E J;饕維熱叫翦B4饕甑數(shù)鶴翦吩蠹QI鱉BT觸IV數(shù)B1期B10+的酎” 受IJ -類.奧哭,一類,變,欠1A 1成Lm棉?呼,.之反.名宅ldir'看-4上#UiUJtZ1強(qiáng)嚏璧也W最好后有的學(xué)生三. JRMBp £ qZWPrBEK rtP W bay tn GtMt jMft.三、實(shí)驗(yàn)小結(jié)對C語言中函數(shù)、數(shù)組、指針和結(jié)構(gòu)體的概念,有了進(jìn)一步的加深。并且可以利用C語言進(jìn)行初步程序設(shè)計(jì)。四、教師評語實(shí)驗(yàn)一順序表與鏈表、實(shí)驗(yàn)?zāi)康?、掌握線性表中元素的前驅(qū)、后續(xù)的概

11、念。2、掌握順序表與鏈表的建立、插入元素、刪除表中某元素的算法。3、對線性表相應(yīng)算法的時(shí)間復(fù)雜度進(jìn)行分析。4、理解順序表、鏈表數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)(優(yōu)缺點(diǎn))。二、實(shí)驗(yàn)內(nèi)容和要求1、閱讀下面程序,在橫線處填寫函數(shù)的基本功能。并運(yùn)行程序,寫出結(jié)果。#include<stdio.h>#include<malloc.h>#define ERROR 0#define OK 1初始分配的順序表長度*/溢出時(shí),順序表長度的增量*/定義表元素的類型*/存儲空間的基地址*/順序表的當(dāng)前長度*/當(dāng)前分配的存儲空間*/#define INIT_SIZE 5 /* #define INCREM 5/

12、*typedef int ElemType; /* typedef struct SqlistElemType *slist; /* int length; /* int listsize; /* Sqlist;int InitList_sq(Sqlist *L); /*初始化順序表 L,并將其長度設(shè)為0*/int CreateList_sq(Sqlist *L,int n); /* 構(gòu)造順序表的長度為n*/int ListInsert_sq(Sqlist *L,int i,ElemType e);/*在順序線性表 L 中第 i 個(gè)輸出順序表的元素*/刪除第i個(gè)元素*/查找值為e的元素*/元素

13、之前插入新的元素e */ int PrintList_sq(Sqlist *L); /*int ListDelete_sq(Sqlist *L,int i); /*int ListLocate(Sqlist *L,ElemType e); /* int InitList_sq(Sqlist *L)L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType);if(!L->slist) return ERROR;L->length=0;L->listsize=INIT_SIZE;return OK;/*InitList*/in

14、t CreateList_sq(Sqlist *L,int n)ElemType e;int i;for(i=0;i<n;i+)printf("input data %d",i+1);scanf("%d",&e);if(!ListInsert_sq(L,i+1,e)return ERROR;return OK;/*CreateList*/*輸出順序表中的元素*/int PrintList_sq(Sqlist *L)int i;for(i=1;i<=L->length;i+)printf("%5d",L->

15、;slisti-1);return OK;/*PrintList*/int ListInsert_sq(Sqlist *L,int ElemType e)int k;if(i<1|i>L->length+1)return ERROR;if(L->length>=L->listsize)L->slist=(ElemType*)realloc(L->slist,(INIT_SIZE+INCREM)*sizeof(ElemType);if(!L->slist)return ERROR;L->listsize+=INCREM;for(k=L-

16、>length-1;k>=i-1;k-)L->slistk+1=k;L->slisti-1=e;L->length+;return OK;/*ListInsert*/*在順序表中刪除第i個(gè)元素*/int ListDelete_sq(Sqlist *L,int i)if(i<1)|(i>L->length) return ERROR;for(p=i-1;p<->length-1;p+)L->slistp=L->slistp+1;L->length-; return OK;/*在順序表中查找指定值元素,返回其序號 */

17、int ListLocate(Sqlist *L,ElemType e) int main()Sqlist sl;int n;printf("please input n:"); /*輸入順序表的元素個(gè)數(shù)*/scanf("%d",&n);if(n>0)printf("n1-Create Sqlist:n");InitList_sq(&sl);CreateList_sq(&sl,n);printf("n2-Print Sqlist:n");PrintList_sq(&sl);el

18、seprintf("ERROR");return 0;算法分析與運(yùn)行結(jié)果please input n:51-Create Sqlist:input data 10input data 25input data 38input data 43input data 562-Print Sqlist:0 5 8 3 6Press any key to continueSqlis t :dat«data ddta1025384356input input £n pint input input2-Print Sqlist:。5 電 36Press dny key

19、 t<3 cent inue2、為第1題補(bǔ)充刪除和查找功能函數(shù),并在主函數(shù)中補(bǔ)充代碼驗(yàn)證算法的正確性。 算法代碼:int ListDelete_sq(Sqlist *L,int i) int p;if(i<1)|(i>L->length) return ERROR;for(p=i-1;p<L->length-1;p+) L->slistp=L->slistp+1;L->length-;return OK;/*在順序表中查找指定值元素,返回其序號*/int ListLocate(Sqlist *L,ElemType e)int i=0;whi

20、le(i<=L->length)&&(L->slisti!=e)i+;if(i<=L->length)return(i+1);elsereturn(-1);3、閱讀下面程序,在橫線處填寫函數(shù)的基本功能。并運(yùn)行程序,寫出結(jié)果。#include<stdio.h>#include<malloc.h>#define ERROR 0#define OK 1typedef int ElemType; /* typedef struct LNode /* ElemType data;struct LNode *next;LNode,*Li

21、nkList;定義表元素的類型*/線性表的單鏈表存儲*/LinkList*/CreateList(intn);/構(gòu) 造 順 序 表 的 長 度void PrintList(LinkList L); /*輸出帶頭結(jié)點(diǎn)單鏈表的所有元素*/int GetElem(LinkList L,int i,ElemType *e);/*在順序線性表 L 中,當(dāng)?shù)?i個(gè)元素存在時(shí),將其賦值為e */LinkList CreateList(int n)LNode *p,*q,*head;int i;head=(LinkList)malloc(sizeof(LNode); head->next=NULL;p=

22、head;for(i=0;i<n;i+)q=(LinkList)malloc(sizeof(LNode); data %i:",i+1);scanf("%d",&q->data); /* q->next=NULL;/*p->next=q;/*p=q; return head; /*CreateList*/printf("input輸入元素值*/結(jié)點(diǎn)指針域置空*/新結(jié)點(diǎn)連在表末尾*/void PrintList(LinkList L)LNode *p;p=L->next; /*p指向單鏈表的第 1個(gè)元素*/while(

23、p!=NULL)printf("%5d",p->data);p=p->next;/*PrintList*/ int GetElem(LinkList L,int i,ElemType *e)LNode *p;int j=1;p=L->next;while(p&&j<i)p=p->next;j+;if(!p|j>i)return ERROR;*e=p->data;return OK;/*GetElem*/int main()int n,i;ElemType e;LinkList L=NULL; /*定義指向單鏈表的指針

24、*/printf("please input n:"); /*輸入單鏈表的元素個(gè)數(shù)*/scanf("%d",&n);if(n>0)printf("n1-Create LinkList:n");L=CreateList(n);printf("n2-Print LinkList:n");PrintList(L);printf("n3-GetElem from LinkList:n");printf("input i=");scanf("%d",&

25、amp;i);if(GetElem(L,i,&e)printf("No%i is %d",i,e);elseprintf("not exists");elseprintf("ERROR");return 0;算法分析與運(yùn)行結(jié)果please input n:5 1-Create LinkList:input data 1:8input data 2:6input data 3:3input data 4:5input data 5:42-Print LinkList:8 6 3 5 43-GetElem from LinkLis

26、t:input i=2No2 is 6Press any key to continuelc4sc input1 -Create LinkLi": input data 1;H Input data 2-b input data 3:3 input dnt&t 4:5 input data 虧:4z-Ppint LiiikLisi;8 G 3 S 4 3-G«tElen fran LinkList: input i-2 Ha2 4Pressto tontinuE4、為第3題補(bǔ)充插入功能函數(shù)和刪除功能函數(shù)。并在主函數(shù)中補(bǔ)充代碼驗(yàn)證算法的正確性。算法代碼int List

27、Insert_sq(LNode *L,int i,ElemType e)int k;if(i<1|i>L->length+1)return ERROR;if(L->length>=L->listsize)L->data =(ElemType*)realloc(L->data,(INIT_SIZE+INCREM)*sizeof(ElemType);if(!L->data)return ERROR;L->listsize+=INCREM;#include<stdio.h>#include<malloc.h>#def

28、ine ERROR 0#define OK 1定義表元素的類型*/ 線性表的單鏈表存儲*/typedef int ElemType; /*typedef struct LNode /* ElemType data;struct LNode *next;LNode,*LinkList;LinkList CreateList(int n);/*以下為選做實(shí)驗(yàn):5、循環(huán)鏈表的應(yīng)用(約瑟夫回環(huán)問題)n個(gè)數(shù)據(jù)元素構(gòu)成一個(gè)環(huán),從環(huán)中任意位置開始計(jì)數(shù),計(jì)到m將該元素從表中取出,重復(fù)上述過程,直至表中只剩下一個(gè)元素。提示:用一個(gè)無頭結(jié)點(diǎn)的循環(huán)單鏈表來實(shí)現(xiàn)n個(gè)元素的存儲。算法代碼6、設(shè)一帶頭結(jié)點(diǎn)的單鏈表,設(shè)計(jì)算

29、法將表中值相同的元素僅保留一個(gè)結(jié)點(diǎn)。提示:指針p從鏈表的第一個(gè)元素開始,利用指針q從指針p位置開始向后搜索整個(gè)鏈表,刪除與之值相同的元素;指針 p繼續(xù)指向下一個(gè)元素,開始下一輪的刪除,直至p= null為至,既完成了對整個(gè)鏈表元素的刪除相同值。算法代碼三、實(shí)驗(yàn)小結(jié)具體的掌握線性表中元素的前驅(qū)、后續(xù)的概念。以及順序表與鏈表的建立、插入元素、刪除 表中某元素的算法。并學(xué)習(xí)了對線性表相應(yīng)算法的時(shí)間復(fù)雜度進(jìn)行分析。四、教師評語實(shí)驗(yàn)二棧和隊(duì)列、實(shí)驗(yàn)?zāi)康?、掌握棧的結(jié)構(gòu)特性及其入棧,出棧操作;2、掌握隊(duì)列的結(jié)構(gòu)特性及其入隊(duì)、出隊(duì)的操作,掌握循環(huán)隊(duì)列的特點(diǎn)及其操作。、實(shí)驗(yàn)內(nèi)容和要求1、閱讀下面程序,將函數(shù)

30、Push和函數(shù)Pop補(bǔ)充完整。要求車入元素序列1 2 3 4 5 e ,運(yùn)行結(jié)果如下所示。#include<stdio.h>#include<malloc.h> #define ERROR 0#define OK 1#define STACKINTSIZE 10 /*#define STACKINCREMENT 5 typedef int ElemType; /* typedef structElemType *base;ElemType *top; int stacksize; /*SqStack;/*存儲空間初始分配量*/ 存儲空間分配增量*/ 定義元素的類型*/當(dāng)

31、前已分配的存儲空間*/構(gòu)造空棧*/入棧*/出棧*/創(chuàng)建棧*/出棧并輸出棧中元素*/int InitStack(SqStack *S); /*int push(SqStack *S,ElemType *e); /* int Pop(SqStack *S,ElemType *e); /* int CreateStack(SqStack *S);/*void PrintStack(SqStack *S); /* int InitStack(SqStack *S)S->base=(ElemType *)malloc(STACK_INT_SIZE *sizeof(ElemType);if(!S-&

32、gt;base) return ERROR;S->top=S->base;S->stacksize=STACK_INT_SIZE;return OK;/*InitStack*/int Push(SqStack *S,ElemType e)/*Push*/int Pop(SqStack *S,ElemType *e)/*Pop*/int CreateStack(SqStack *S)int e;if(InitStack(S)printf("Init Success!n");elseprintf("Init Fail!n");return

33、ERROR;printf("input data:(Terminated by inputing a character)n");while(scanf("%d",&e)Push(S,e);return OK;/*CreateStack*/void PrintStack(SqStack *S)ElemType e;while(Pop(S,&e)printf("%3d",e);/*Pop_and_Print*/int main()SqStack ss;printf("n1-createStack'n&q

34、uot;);CreateStack(&ss);printf("n2-Pop&Print'n");PrintStack(&ss);return 0;算法分析:輸入元素序列 1 2 3 4 5 ,為什么輸出序列為5 4 3 2 1?體現(xiàn)了棧的什么特性?2、在第1題的程序中,編寫一個(gè)十進(jìn)制轉(zhuǎn)換為二進(jìn)制的數(shù)制轉(zhuǎn)換算法函數(shù)(要求利用棧來 實(shí)現(xiàn)),并驗(yàn)證其正確性。實(shí)現(xiàn)代碼void conveshen(SqStack *S) ElemType n,h;int m=0,k=0;InitStack(S);printf("Input elementn&

35、quot;);scanf("%d",&n);while(n)m+;Push(S,n%2);n=n/2;while(k<m)k+;Pop(S,&h);printf("%d",h);int main()SqStack S;conveshen(&S);printf("n");3、閱讀并運(yùn)行程序,并分析程序功能。#include<stdio.h>#include<malloc.h>#include<string.h>#define M 20#define elemtype ch

36、artypedef structelemtype stackM;int top;stacknode;void init(stacknode *st);void push(stacknode *st,elemtype x);void pop(stacknode *st);void init(stacknode *st)st->top=0;void push(stacknode *st,elemtype x)if(st->top=M)printf("the stack is overflow!n"); elsest->top=st->top+1;st-&

37、gt;stackst->top=x;void pop(stacknode *st)st->top=st->top-1;int main()char sM;int i;printf("create a empty stack!n");stacknode *sp;sp=malloc(sizeof(stacknode);init(sp);printf("input a expression:n");gets(s);for(i=0;i<strlen(s);i+)if(si='(')push(sp,si);if(si=

38、9;)')pop(sp);if(sp->top=0)printf("'('match')'!n");elseprintf("'('not match')'!n");return 0;輸入:2+(c-d)*6-(f-7)*a)/6運(yùn)行輸入:a-(c-d)*6-(s/3-x)/2cre<tte a empty st&£k? input a Exp/虺a摩ion+2-d 4YF J <* not natc hJ >* * ijny k上學(xué) to c

39、ent intic程序的基本功能:以下為選做實(shí)驗(yàn):4、設(shè)計(jì)算法,將一個(gè)表達(dá)式轉(zhuǎn)換為后綴表達(dá)式,并按照后綴表達(dá)式進(jìn)行計(jì)算,得出表達(dá)式 得結(jié)果。實(shí)現(xiàn)代碼5、假設(shè)以帶頭結(jié)點(diǎn)的循環(huán)鏈表表示隊(duì)列,并且只設(shè)一個(gè)指針指向隊(duì)尾結(jié)點(diǎn)(不設(shè)隊(duì)頭指針)試編寫相應(yīng)的置空隊(duì)列、入隊(duì)列、出隊(duì)列的算法。實(shí)現(xiàn)代碼:三、實(shí)驗(yàn)小結(jié)基本掌握棧的結(jié)構(gòu)特性及其入棧,出棧操作;以及隊(duì)列的結(jié)構(gòu)特性及其入隊(duì)、出隊(duì)的操作, 掌握循環(huán)隊(duì)列的特點(diǎn)及其操作四、教師評語實(shí)驗(yàn)三串的模式匹配一、實(shí)驗(yàn)?zāi)康?、了解串的基本概念2、掌握串的模式匹配算法的實(shí)現(xiàn)二、實(shí)驗(yàn)內(nèi)容和要求1、閱讀并運(yùn)行下面程序,根據(jù)輸入寫出運(yùn)行結(jié)果。#include<stdio.h&

40、gt;#include<string.h>#define MAXSIZE 100typedef structchar dataMAXSIZE;int length;SqString;int strCompare(SqString *s1,SqString *s2); /*串的比較 */void show_strCompare();void strSub(SqString *s,int start,int sublen,SqString *sub);/*求子串*/void show_subString();int strCompare(SqString *s1,SqString *s

41、2) int i;for(i=0;i<s1->length&&i<s1->length;i+)if(s1->datai!=s2->datai)return s1->datai-s2->datai;return s1->length-s2->length;void show_strCompare()SqString s1,s2;int k;printf("n*show Compare*n");printf("input string s1:");gets(s1.data);s1.l

42、ength=strlen(s1.data);printf("input string s2:");gets(s2.data);s2.length=strlen(s2.data);if(k=strCompare(&s1,&s2)=0)printf("s1=s2n");else if(k<0)printf("s1<s2n");elseprintf("s1>s2n");printf("n*show over*n");void strSub(SqString *s,in

43、t start,int sublen,SqString *sub) int i;if(start<1|start>s->length|sublen>s->length-start+1) sub->length=0;for(i=0;i<sublen;i+)sub->datai=s->datastart+i-1;sub->length=sublen;void show_subString()SqString s,sub;int start,sublen,i;printf("n*show subString*n");pr

44、intf("input string s:");gets(s.data);s.length=strlen(s.data);printf("input start:");scanf("%d",&start);printf("input sublen:");scanf("%d",&sublen);strSub(&s,start,sublen,&sub);if(sub.length=0)printf("ERROR!n");elseprintf(&qu

45、ot;subString is :");for(i=0;i<sublen;i+)printf("%c",sub.datai);printf("n*show over*n");int main()int n;do printf("n-String-n");printf("1. strCompare'n");printf("2. subString'n");printf("0. EXIT'n");printf("ninput ch

46、oice:");scanf("%d",&n);getchar();switch(n)case 1:show_strCompare();break;case 2:show_subString();break;default:n=0;break;while(n);return 0;運(yùn)行程序輸入:1studentstudents2Computer Data Stuctures104運(yùn)行結(jié)果:1. strCompare 2, subString 0. EXIT*F:C + +WENIANDebug 供瞼三.exe'input choice:l*show C

47、ompare* input string slxstudent input七 sti*±nsf s2 : students sl<s2*sliow oveP*一-Strin g- 1. strConpare 2r substring 乩 EXITinput cho ice:2*sh???substring*in put string s zCojnputei* Data StructuresInput :10 input sublen:4 substring is :Data *3how over*一-Strin31. stConpaire 2- substring 0, EX

48、ITinput cho ice:2、實(shí)現(xiàn)串的模式匹配算法。補(bǔ)充下面程序,實(shí)現(xiàn)串的BF和KMP算法。#include<stdio.h> #include<string.h>#define MAXSIZE 100 typedef structchar dataMAXSIZE;int length;SqString;int index_bf(SqString *s,SqString *t,int start);void getNext(SqString *t,int next);int index_kmp(SqString *s,SqString *t,int start,i

49、nt next);void show_index();int index_bf(SqString *s,SqString *t,int start)void getNext(SqString *t,int next口兒int i=0,j=-1;next0=-1;while(i<t->length)if(j=-1)|(t->datai=t->dataj) i+;j+;nexti=j;elsej=nextjint index_kmp(SqString *s,SqString *t,int start,int next)void show_index()SqString s,

50、t;int k,nextMAXSIZE尸0,i;printf("n*show index*n");printf("input string s:");gets(s.data);s.length=strlen(s.data);printf("input string t:");gets(t.data);t.length=strlen(t.data);printf("input start position:");scanf("%d",&k);printf("BF:nthe res

51、ult of BF is %dn",index_bf(&s,&t,k);getNext(&t,next);printf("KMP:n");printf("next:");for(i=0;i<t.length;i+)printf("%3d",nexti);printf("n");printf("the result of KMP is %dn",index_kmp(&s,&t,k,next); printf("n*show over

52、*n");int main()show_index();return 0;輸入:abcaabbabcabaacbacbaabcabaa運(yùn)行結(jié)果:三、實(shí)驗(yàn)小結(jié)通過對算法的運(yùn)行, 加上思考可以深刻了解串的基本概念。并且可以掌握串的模式匹配算法的建立。四、教師評語實(shí)驗(yàn)四二叉樹、實(shí)驗(yàn)?zāi)康?、掌握二叉樹的基本特性2、掌握二叉樹的遞歸遍歷算法3、理解二叉樹的非遞歸算法4、通過二叉樹的深度和層次遍歷算法,理解二叉樹的基本特性二、實(shí)驗(yàn)內(nèi)容和要求1、閱讀并運(yùn)行下面程序,根據(jù)輸入寫出運(yùn)行結(jié)果,并畫出二叉樹的形態(tài)。#include<stdio.h>#include<malloc.h>

53、;#define MAX 20typedef struct BTNode /* char data ;/*struct BTNode *lchild; struct BTNode *rchild ; /*BiTree;節(jié)點(diǎn)結(jié)構(gòu)聲明*/節(jié)點(diǎn)數(shù)據(jù)*/指針*/void createBiTree(BiTree *t) /*char s;BiTree q;printf("nplease input data:(exit for #)");s=getche();if(s='#')*t=NULL; return;先序遍歷創(chuàng)建二叉樹*/q=(BiTree)malloc(si

54、zeof(struct BTNode);if(q=NULL)printf("Memory alloc failure!"); exit(0); q->data=s;*t=q;createBiTree(&q->lchild); /* createBiTree(&q->rchild); /* 遞歸建立左子樹*/ 遞歸建立右子樹*/void PreOrder(BiTree p) /* if ( p!= NULL ) printf("%c", p->data); PreOrder( p->lchild ); PreO

55、rder( p->rchild);void InOrder(BiTree p) /* if( p!= NULL ) 先序遍歷二叉樹*/中序遍歷二叉樹*/InOrder( p->lchild );printf("%c", p->data);InOrder( p->rchild);void PostOrder(BiTree p) /*后序遍歷二叉樹 */if ( p!= NULL ) PostOrder( p->lchild );PostOrder( p->rchild);printf("%c", p->data);

56、void Preorder_n(BiTree p) /*先序遍歷的非遞歸算法 */BiTree stackMAX,q;int top=0,i;for(i=0;i<MAX;i+) stacki=NULL;/*初始化棧 */q=p; while(q!=NULL)printf("%c",q->data);if(q->rchild!=NULL) stacktop+=q->rchild;if(q->lchild!=NULL) q=q->lchild; else if(top>0) q=stack-top;else q=NULL;void release(BiTree t) /*釋放二叉樹空間 */if(t!=NULL)release(t->lchild);release(t->rchild); free(t);int main()BiTree t=NULL;createBiTree(&t);printf("nnPreOrder the tree is:");PreOrder(t);

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論