數(shù)據(jù)結(jié)構(gòu)上機實驗答案

上傳人:jun****875 文檔編號:23682289 上傳時間:2021-06-10 格式:DOC 頁數(shù):26 大?。?5.41KB
收藏 版權(quán)申訴 舉報 下載
數(shù)據(jù)結(jié)構(gòu)上機實驗答案_第1頁
第1頁 / 共26頁
數(shù)據(jù)結(jié)構(gòu)上機實驗答案_第2頁
第2頁 / 共26頁
數(shù)據(jù)結(jié)構(gòu)上機實驗答案_第3頁
第3頁 / 共26頁

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《數(shù)據(jù)結(jié)構(gòu)上機實驗答案》由會員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)上機實驗答案(26頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、《數(shù)據(jù)結(jié)構(gòu)實驗指導(dǎo)書》答案 實驗一: 1、 請編寫函數(shù)int fun(int *a, int *b),函數(shù)的功能是判斷兩個指針a和b所指存儲單元的值的符號是否相同;若相同函數(shù)返回1,否則返回0。這兩個存儲單元中的值都不為0。在主函數(shù)中輸入2個整數(shù)、調(diào)用函數(shù)fun、輸出結(jié)果。 #include int fun(int *a, int *b) { if (*a*(*b)>0) return(1); else return(0); } main() { int x,y; scanf("%d%d",&x,&y); if (fun(&x,&y))

2、 printf("yes\n"); else printf("no"); } 2、 計算1+2+3+……+100,要求用指針進行設(shè)計。即設(shè)計函數(shù)int fun(int *n)實現(xiàn)求1+2+3+……+*n,在主函數(shù)中輸入、調(diào)用、輸出結(jié)果。 #include int fun(int *n) { int i,sum=0; for (i=1;i<=*n;i++) sum+=i; return(sum); } main() { int x,sum; scanf("%d",&x); printf("the sum is %d\n"

3、,fun(&x)); } 3、 函數(shù)的功能是求數(shù)組a中最大數(shù)的位置(位序號)。在主函數(shù)中輸入10個整數(shù)、調(diào)用函數(shù)fun、輸出結(jié)果。 #define N 10 #include void input(int *a,int n) { int i; for (i=0;i*max) ma

4、x=a+i; return(max-a); } main() {int a[N],maxi; input(a,N); maxi=fun(a,N); printf("\n the max position is %d\n",maxi); } 4、請編寫函數(shù)fun(int *a,int n, int *odd, int *even),函數(shù)的功能是分別求出數(shù)組a中所有奇數(shù)之和和所有偶數(shù)之和。形參n給出數(shù)組中數(shù)據(jù)的個數(shù);利用指針odd和even分別返回奇數(shù)之和和偶數(shù)之和。在主函數(shù)中輸入10個整數(shù)、調(diào)用函數(shù)fun、輸出結(jié)果。 #define N 10 #includ

5、e void input(int *a,int n) { int i; for (i=0;i

6、 } main() {int a[N],odd,even; input(a,N); fun(a,N, &odd, &even); printf("the odd is %d\tthe even is %d\n",odd,even); } 5、請編寫函數(shù)int fun(int *a, int *b,int n),函數(shù)的功能是把數(shù)組a中所有為偶數(shù)的數(shù),放在另一個數(shù)組中b。在主函數(shù)中輸入10個整數(shù)、調(diào)用函數(shù)fun、輸出結(jié)果。 #define N 10 #include void input(int *a,int n) { int i; f

7、or (i=0;i

8、i]; j++;} return(j); } main() {int a[N],b[N],m; input(a,N); m=fun(a,b,N); output(b,m); } 6、請編寫函數(shù)int fun(int *a,,int n),函數(shù)的功能是把數(shù)組a中最大數(shù)和最小數(shù)交換。在主函數(shù)中輸入10個整數(shù)、調(diào)用函數(shù)fun、輸出結(jié)果。 #define N 10 #include void input(int *a,int n) { int i; for (i=0;i

9、canf("%d",&a[i]);*/ } void output(int *a,int n) { int i; printf("\nthe result is:\n"); for (i=0;i*max) max=a+i; if (a[i]<*min) min

10、=a+i; } printf("the max is %d,the position is %d\n",*max,max-a); printf("the min is %d,the position is %d\n",*min,min-a); if (max!=min) {temp=*max;*max=*min;*min=temp;} } main() {int a[N],m; input(a,N); fun(a,N); output(a,N); } 7、請編寫函數(shù)int fun(int a[4][4]),函數(shù)的功能是把矩陣a轉(zhuǎn)置。在主函數(shù)中輸

11、入、調(diào)用函數(shù)fun、輸出結(jié)果。 #define N 4 #include void input(int a[][4],int n) { int i,j; for (i=0;i

12、 printf("%4d",*(*(a+i)+j)); /*printf("%d",a[i][j]);*/ } } void fun(int a[][4],int n) { int i,j,temp; for (i=0;i

13、*a),函數(shù)的功能是分別求出字符串a(chǎn) 的長度。在主函數(shù)中輸入1個字符串、調(diào)用函數(shù)fun、輸出結(jié)果。 #include int fun(char *a) { int i=0; char *p; p=a; while (*p) {i++; p++; } return(i); } main() { char str[20],*cp; cp=str; gets(cp); printf("the length of %s is %d\n",cp,fun(cp)); } 9、 10、 #include

14、> #include #define N 2 typedef struct student /*定義數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)類型)*/ {long num; char name[10]; int score[3]; /*存放三門課成績 */ float average; /*/平均成績*/ } stu; void intput(stu s[],int n) /*輸入數(shù)據(jù) */ {int i,j; /*i表示處理學(xué)生的下標,J表示成績編號 */ for (i=0;i

15、nput num:\n"); scanf("%ld",&s[i].num); printf("input name:\n"); scanf("%s",s[i].name); printf("input 3 score:\n"); for (j=0;j<3;j++) scanf("%d",&s[i].score[j]); } } void stu_av(stu s[],int n)/*求每個學(xué)生的平均成績*/ { int i,j,sum; for (i=0;i

16、 for (j=0;j<3;j++) sum+=s[i].score[j] ; s[i].average=sum/3.0; } } float av(stu s[],int n)/*求總平均成績*/ { int i; float sum=0.0,ave; for (i=0;i

17、=1;is[maxi].average) maxi=i; return(maxi); } main() {int maxi,j; stu a[N];/*定義變量 */ intput(a,N); stu_av(a,N); printf("the score average is %f\n", av(a,N)); maxi=max(a,N); printf("the max average student data:\n"); printf("%10ld",a[maxi].num

18、); printf("%10s",a[maxi].name); for (j=0;j<3;j++) printf("%5d",a[maxi].score[j]); printf("%5.1f",a[maxi].average); getch(); } 實驗二 1、 #include #define MaxLen 50 typedef int elemtype; struct datatype {elemtype *elem; int length; }; typedef struct datatype s

19、qlist; void create (sqlist *a) { int i,n; a->elem=(elemtype *)malloc(MaxLen*sizeof(elemtype)); printf("創(chuàng)建一個順序表\n"); printf("輸入元素個數(shù)\n"); scanf("%d",&a->length); for (i=0;ilength;i++) { printf("輸入第%d個元素值:",i+1); scanf("%d",a->elem+i); } } void invert(sqlist *a) { int m=a->leng

20、th/2,i; elemtype temp; for (i=0;ielem+i); *(a->elem+i)=*(a->elem+a->length-1-i); *(a->elem+a->length-1-i)=temp; } } void disp(sqlist *a) { int i; for (i=0;ilength;i++) printf("%5d:%d\n",i+1,*(a->elem+i)); getch(); }

21、 void main() { sqlist a; create(&a); disp(&a); invert(&a); disp(&a); } 2、 #include #include #define NULL 0 typedef int elemtype; typedef struct linknode { elemtype data; struct linknode *next; }nodetype; nodetype *create() { elemtype d; nodetype *h,*s,

22、*t; int i=1; h=NULL; printf("建立一個單鏈表\n"); while (1) { printf("輸入第%d節(jié)點data域值:",i); scanf("%d",&d); if (d==0) break ; /*以0表示輸入結(jié)束*/ if(i==1) /*建立第一個結(jié)點*/ { h=(nodetype *)malloc(sizeof(nodetype)); h->data=d;h->next=NULL;t=h; } else { s=(nodetype *)mal

23、loc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s; /*t始終指向生成的單鏈表的最后一個結(jié)點*/ } i++; } return h; } void disp(nodetype *h) { nodetype *p=h; printf("輸出一個單鏈表:\n"); if (p==NULL) printf("空表"); while (p!=NULL) { printf("%d",p->data);p=p->next; } printf("\n"); getch(); } int le

24、n(nodetype *h) { int i=0; nodetype *p=h; while (p) {i++;p=p->next;} return(i); } nodetype *invert(nodetype *h) { nodetype *p,*q,*r; if (len(h)<=1) {printf("逆置的單鏈表至少有2個節(jié)點\n"); return(NULL); } else {p=h;q=p->next; while (q!=NULL) {r=q->next; q->next=p; p=q;q=r; } h->next=NULL

25、; h=p; return h; } } void main() { nodetype *head; head=create(); disp(head); head=invert(head); disp(head); } 4、 (1) #include #define MaxLen 50 typedef struct {long num; int score; }elemtype; typedef struct datatype {elemtype *elem; int length; }sqlist; v

26、oid create (sqlist *a) { long i=0,n; int s; a->elem=(elemtype *)malloc(MaxLen*sizeof(elemtype)); printf("創(chuàng)建一個順序表\n"); printf("輸入學(xué)生學(xué)號和成績:0作為結(jié)束標志\n"); scanf("%ld%d",&n,&s); while (n!=0) { (a->elem)[i].num=n; (a->elem)[i].score=s; i++; scanf("%ld%d",&n,&s); } a->length=i; } voi

27、d disp(sqlist *a) { int i; for (i=0;ilength;i++) printf("%5d:%ld %d\n",i+1,(a->elem)[i].num,(a->elem)[i].score); getch(); } void main() { sqlist a; create(&a); disp(&a); } (2)見5(2) 5、 (1) #include #define MaxLen 50 typedef struct {long num; int score; }e

28、lemtype; typedef struct datatype {elemtype *elem; int length; }sqlist; void create (sqlist *a) { long i=0,n; int s; a->elem=(elemtype *)malloc(MaxLen*sizeof(elemtype)); printf("創(chuàng)建一個順序表\n"); printf("輸入學(xué)生學(xué)號和成績:0作為結(jié)束標志\n"); scanf("%ld%d",&n,&s); while (n!=0) { (a->elem)[i].num=n; (

29、a->elem)[i].score=s; i++; scanf("%ld%d",&n,&s); } a->length=i; } void sort(sqlist *a) { int i,j,k,s; long n; for (i=0;ilength-1;i++) {k=i; for (j=i+1;jlength;j++) if ((a->elem)[j].score<(a->elem)[k].score) k=j; if (k!=i) { n=(a->elem)[i].num

30、;(a->elem)[i].num=(a->elem)[k].num; (a->elem)[k].num=n; s=(a->elem)[i].score;(a->elem)[i].score=(a->elem)[k].score; (a->elem)[k].score=s; } } } void disp(sqlist *a) { int i; for (i=0;ilength;i++) printf("%5d:%ld %d\n",i+1,(a->elem)[i].num,(a->elem)[i

31、].score); getch(); } void main() { sqlist a; create(&a); disp(&a); sort(&a); disp(&a); } (2) #include #include #define NULL 0 typedef struct linknode { long num; int score; struct linknode *next; }nodetype; nodetype *create() { long n; int sc; node

32、type *h,*s,*t; h=(nodetype *)malloc(sizeof(nodetype));; h->next=NULL; t=h; printf("創(chuàng)建一個順序表\n"); printf("輸入學(xué)生學(xué)號和成績:0作為結(jié)束標志\n"); scanf("%ld%d",&n,&sc); while (n!=0) { s=(nodetype *)malloc(sizeof(nodetype)); s->num=n;s->score=sc;t->next=s;t=s; scanf("%ld%d",&n,&sc); }

33、 t->next=NULL; return h; } void disp(nodetype *h) { nodetype *p=h->next; printf("輸出一個單鏈表:\n"); while (p!=NULL) { printf("%ld %d\n",p->num,p->score);p=p->next; } printf("\n"); getch(); } nodetype *insertorder(nodetype *h,nodetype *s) { nodetype *p,*q; q=h;p=q->next; while (

34、p!=NULL && s->score>p->score) { q=p; p=p->next; } s->next=p; q->next=s; return(h); } nodetype *sort(nodetype *h) { nodetype *p,*s; p=h->next; h->next=NULL; while (p!=NULL) { s=p->next; h=insertorder(h,p); p=s; } return h; } void main() {

35、 nodetype *head; head=create(); disp(head); head=sort(head); disp(head); } 實驗三: 7、試寫一個算法,識別依次讀入的一個以@為結(jié)束符的字符序列是否為形如‘序列1&序列2’模式的字符序列。其中序列1和序列2中不包含字符’&’,且序列2是序列1的逆序列。例如,‘a(chǎn)+b&b+a’是屬于該模式的字符序列,而‘1+2&2-1’則不是。 int IsReverse()//判斷輸入的字符串中&前和&后部分是否為逆串,是則返回1,否則返回0 { InitStack(s); while((e=getchar()

36、)!=&) push(s,e); while((e=getchar())!=@) { if(StackEmpty(s)) return 0; pop(s,c); if(e!=c) return 0; } if(!StackEmpty(s)) return 0; return 1; }//IsReverse 8、編寫一個函數(shù)將一般算術(shù)表達式轉(zhuǎn)化為逆波蘭表達式。 解:假設(shè)表達式中的符號以字符形式由鍵盤輸入(為簡單起見,設(shè)算術(shù)表達式中的參加運算的數(shù)都只有一位數(shù)字),該算術(shù)表達式存放在字符型數(shù)組 str 中,其逆波蘭表示式依次存放在字符型數(shù)組 exp 中,在處理函數(shù)中用

37、一個字符型數(shù)組 stack 作為棧。設(shè)字符“#”為表達式的終止符,將算術(shù)表達式轉(zhuǎn)換成逆波蘭表示的方法如下: 依次從鍵盤輸入表達式中的字符 c,對于每一個 c: ① 若 c 為數(shù)字,則將 c 依次存入數(shù)組 exp 中; ② 若 c 為左括弧“(”,則將此括弧壓入棧 stack; ③ 若 c 為右括弧“)”,則將棧 stack 中左括弧“(”以前的字符依次彈出存入數(shù)組 exp中,然后將左括弧“(”彈出; ④ 若 c 為“+”或“-”,則將當(dāng)前棧 stack 中“(”以前的所有字符(運算符)依次彈出存入數(shù)組 exp 中;如果沒有“(”,則將棧stack中的所有字符依次彈出存入數(shù)組

38、exp中,然后將 c 壓入棧 stack 中; ⑤ 若 c 為“*”或“/”,則將當(dāng)前棧 stack 中的棧頂端連續(xù)的“*”或“/”彈出并依次存入數(shù)組 exp 中,然后將 c 壓入棧 stack 中; ⑥ 若 c 為“#”,則將棧 stack 中的所有運算符依次彈出并存入數(shù)組 exp 中,然后再將c 存入數(shù)組 exp 中,最后可得到表達式的波蘭表示在數(shù)組 exp 中。 根據(jù)上述轉(zhuǎn)換原理得到的函數(shù)如下: #define Maxsize 100 /* Maxsize 為算術(shù)表達式中最多字符個數(shù) */ void trans() { char str[Ma

39、xsize]; /*存儲原算術(shù)表達式*/ char exp[Maxsize]; /*存儲轉(zhuǎn)換成的逆波蘭表達式*/ char stack[Maxsize]; /*作為棧使用*/ char ch; int i,j,t,top=0;/*t 作為 exp 的下標,top 作為 stack 的下標,i 作為 str 的下標*/ i=0; /*獲取用戶輸入的表達式*/ do { i++; scanf("%c",&str[i]); } while (str[i]!=’#’ && i<

40、 Maxsize); t=0;i=0; ch=str[i];i++; while (ch!=’#’) { if (ch>=’0’ && ch<=’9’) /*判定為數(shù)字*/ { exp[t]=ch;t++; } else if (ch==’(’) /*判定為左括號*/ { top++;stack[top]=ch;} else if (ch==’)’) /*判定為右括號*/ { while (stack[top]!=’(’) { e

41、xp[t]=stack[top];top--;t++; } top--; } else if (ch==’+’ || ch==’-’) /*判定為加減號*/ { while (top!=0 && stack[top]!=’(’) { exp[t]=stack[top];top--;t++;} top++; stack[top]=ch; } else if (ch==’*’ ||

42、 ch==’/’) /*判定為’*’或’/’號*/ { while (stack[top]==’*’ || stack[top]==’/’) { exp[t]=stack[top];top--;t++;} top++; stack[top]=ch; } ch=str[i];i++; } while (top!=0) { exp[t]=stack[top];t++;top--

43、;} exp[t]=’#’; for (j=1;j<=t;j++) printf("%c",exp[j]); printf("\n"); } 9、編寫一個函數(shù)求逆波蘭表達式的值,其中波蘭表達式是在該函數(shù)中輸入的。 解:對逆波蘭表達式求值函數(shù)中要用到一個數(shù)棧 stack,其實現(xiàn)函數(shù)如下:先用戶以字符形式由鍵盤輸入一個逆波蘭表達式(為簡單起見,設(shè)逆波蘭表達式中的參加運算的數(shù)都只有一位數(shù)字),該逆波蘭表達式存放在字符型數(shù)組 exp 中,從逆波蘭表示式的開始依次掃描這個波蘭表示式,當(dāng)遇到運算對象時,就把它壓入數(shù)棧 stack;當(dāng)遇到運算符時,就執(zhí)行兩次彈出數(shù)棧

44、stack 中的數(shù)的操作,對彈出的數(shù)進行該運算符所指定的運算,再把結(jié)果壓入數(shù)棧 stack,重復(fù)上述過程,直至掃描到表達式的終止符“#”,在數(shù)棧頂?shù)玫奖磉_式的值。 根據(jù)上述計算原理得到的函數(shù)如下: #define Maxsize 100 /* Maxsize 為算術(shù)表達式中最多字符個數(shù) */ void compvalue() { char exp[Maxsize]; /*存儲用戶輸入的逆波蘭表達式*/ float stack[Maxsize],d; /*作為棧使用*/ char c; int i=0,t=0,top

45、=0; /*t 作為 exp 的下標,top 作為 stack 的下標*/ do /*獲取用戶輸入的逆波蘭表達式*/ { i++; scanf("%c",&exp[i]); } while (exp[i]!=’#’ && i< Maxsize); exp[i+1]=’\0’; c=exp[t];t++; while (c!=’#’) { if (c>=’0’ && c<=’9’) /*判定為數(shù)字字符*/ { d=c-’0’;

46、 /*將數(shù)字字符轉(zhuǎn)換成對應(yīng)的數(shù)值*/ top++; stack[top]=d; } else /*判定是運算符*/ { switch (c) { case ’+’: stack[top-1]=stack[top-1]+stack[top];break; case ’-’: stack[top-1]=stack[top-1]-stack[top];break; case ’*’: stack

47、[top-1]=stack[top-1]*stack[top];break; case’/’: if(stack[top]!=0) stack[top-1]=stack[top-1]/stack[top]; else printf("除零錯誤!\n");break; } top--; } c=exp[t];t++; } printf("計算結(jié)果是:%g",stack[top]); } 實驗四: 4、請編寫

48、函數(shù)int fun(char *a, char *b),函數(shù)的功能是求在字符串a(chǎn)中出現(xiàn)字符串b次數(shù)。在主函數(shù)中輸入兩個字符串、調(diào)用函數(shù)fun、輸出結(jié)果。 #include #include #define NULL 0 int fun(char *a,char *b) { int num=0,len;/*num計數(shù),len為b串的長度*/ char *p,*s;/*p為源串,s為子串位置*/ p=a; len=strlen(b); while (strlen(p)>len)

49、 {s=strstr(p,b); if (s!= NULL) num++; else break; p=s+len; } return(num); } main() { char str1[81],str2[81],*cp1,*cp2; cp1=str1; cp2=str2; gets(cp1); gets(cp2); printf("the number of %s in %s is %d\n",cp2,cp1,fun(cp1,cp2)); } 6、請編寫函數(shù)void f

50、un(char a[][20], int n),函數(shù)的功能是把n個字符串中所有空格刪除。在主函數(shù)中輸入、調(diào)用函數(shù)fun、輸出結(jié)果。 #include void fun1(char *a) { int i=0; char *p1,*p2; p1=p2=a; while (*p1) {if (*p1!= ) { *p2=*p1; p2++; } p1++; } *p2=\0; } void fun(char a[][20], int n) { int i; for (i=0;i

51、 fun1(a[i]); } main() { int i; char str[][20]={"aa aa a","b bb b "," c c "}; fun(str,3); printf("the string of result is:\n"); for (i=0;i<3;i++) puts(str[i]); getch(); } 7、請編寫函數(shù)void fun(char a[][20], int n),函數(shù)的功能是把n個字符串排序。在主函數(shù)中輸入、調(diào)用函數(shù)fun、輸出結(jié)果。 #include void fu

52、n(char a[][20], int n) { int i,j,k; char *temp; for (i=0;i0) { strcpy(temp,a[j]); strcpy(a[j],a[j+1]); strcpy(a[j+1],temp); } } main() { int i; char str[][20]={"b bb b

53、","aa aa a","c c "}; fun(str,3); printf("the string of result is:\n"); for (i=0;i<3;i++) puts(str[i]); getch(); } 實驗五: 7、對于二維數(shù)組 A[m][n],其中 m≤80,n≤80,先讀入 m 和 n,然后讀該數(shù)組的全部元素,對如下三種情況分別編寫相應(yīng)函數(shù): (1)求數(shù)組 A 靠邊元素之和; (2)求從 A[0][0]開始的互不相鄰的各元素之和; (3)當(dāng) m=n 時,分別求兩條對角線上的元素之和,否則打印出 m≠n 的信息。 解: (

54、1)本小題是計算數(shù)組 A 的最外圍的 4 條邊的所有元素之和,先分別求出各邊的元素之和,累加后減除 4 個角的重復(fù)相加的元素即為所求。 (2)本小題的互不相鄰是指上、下、左、右、對角線均不相鄰,即求第 0,2,4,...的各行中第 0,2,4,...列的所有元素之和,函數(shù)中用 i 和 j 變量控制即可。 (3)本小題中一條對角線是 A[i][i],其中(0≤i≤m-1),另一條對角線是 A[m-i-1,i],其中(0≤i≤m-1),因此用循環(huán)實現(xiàn)即可。實現(xiàn)本題功能的程序如下: #include /*實現(xiàn)(1)小題功能的函數(shù)*/ void p

55、roc1(maxix A) { int s=0,i,j; for (i=0;i

56、for (j=0;j

57、 int s=0,i,j; i=0; while(i

58、proc3(maxix A) { int i,s; if (m!=n) printf("m≠n"); else { s=0; for (i=0;i

59、 } } main() { int m,n,i,j; maxix A; printf("m,n:"); scanf("%d,%d",&m,&n); printf("元素值:\n"); for (i=0;i

60、2(A); /*調(diào)用 proc2()*/ proc3(A); /*調(diào)用 proc3()*/ } 8、假設(shè)稀疏矩陣A采用三元組表示,編寫一個函數(shù)計算其轉(zhuǎn)置矩陣B,要求B也采用三元組表示。 解:三元組表示中要求按行的順序存放,所有轉(zhuǎn)置過程不能直接將行下標和列下標轉(zhuǎn)換,還必須使得列按順序存放。因此在 A 中首先找出第一列中的所有元素,它們是轉(zhuǎn)置矩陣第一行的非0元素,并把它們依次放在轉(zhuǎn)置矩陣三元組數(shù)組B中;然后依次找出第二列中的所有元素,把它們依次放在數(shù)組B中;按照同樣的方法逐列進行,直到找出第n列的所有元素,并把它們依次放在數(shù)組 B 中。實現(xiàn)

61、本題功能的函數(shù)如下: void transpose(A,B) smatrik A,B; /*A 是稀疏矩陣的三元組形式,B 是存放 A 的轉(zhuǎn)置矩陣的三元組數(shù)組*/ { int m,n,p,q,t,col; /*m 為 A 中的行數(shù); n 為 A 中的列數(shù); t 為 A 中非 0 元素個數(shù)*/ /*q 為 B 的下一項位置; p 為 A 的當(dāng)前項*/ m=A[0][0]; n=A[0][1]; t=A[0][2]; B[0][0]=n; B[0][1]=m; B[0][2]=t; /*產(chǎn)生第 0 行的結(jié)果*/ if (

62、t>0) /*非 0 矩陣才做轉(zhuǎn)置*/ { q=1; for (col=0;col

63、 } 實驗六: 11、編寫遞歸算法,求二叉樹中以元素值為x 的結(jié)點為根的子樹的深度。 int Get_Sub_Depth(Bitree T,int x)//求二叉樹中以值為x的結(jié)點為根的子樹深度 { if(T->data==x) { printf("%d\n",Get_Depth(T)); //找到了值為x的結(jié)點,求其深度 exit 1; } else { if(T->lchild) Get_Sub_Depth(T->lchild,x); if(T->rchild) Get_Sub_Depth(T->rchi

64、ld,x); //在左右子樹中繼續(xù)尋找 } }//Get_Sub_Depth int Get_Depth(Bitree T)//求子樹深度的遞歸算法 { if(!T) return 0; else { m=Get_Depth(T->lchild); n=Get_Depth(T->rchild); return (m>n?m:n)+1; } }//Get_Depth 12、已知一棵完全二叉樹存于順序表sa中,sa.elem[1..sa..last]含結(jié)點值。試編寫算法由此順序存儲結(jié)構(gòu)建立該二叉樹的二叉鏈表。 Status

65、CreateBitree_SqList(Bitree &T,SqList sa)//根據(jù)順序存儲結(jié)構(gòu)建立二叉鏈表 { Bitree ptr[sa.last+1]; //該數(shù)組儲存與sa中各結(jié)點對應(yīng)的樹指針 if(!sa.last) { T=NULL; //空樹 return; } ptr[1]=(BTNode*)malloc(sizeof(BTNode)); ptr[1]->data=sa.elem[1]; //建立樹根 T=ptr[1]; for(i=2;i<=sa.last;i++) { if(!sa.e

66、lem[i]) return ERROR; //順序錯誤 ptr[i]=(BTNode*)malloc(sizeof(BTNode)); ptr[i]->data=sa.elem[i]; j=i/2; //找到結(jié)點i的雙親j if(i-j*2) ptr[j]->rchild=ptr[i]; //i是j的右孩子 else ptr[j]->lchild=ptr[i]; //i是j的左孩子 } return OK; }//CreateBitree_SqList 13、試編寫算法,對一棵以孩子-兄弟鏈表表示的樹統(tǒng)計葉子的個數(shù)。 int LeafCount_CSTree(CSTree T)//求孩子兄弟鏈表表示的樹T的葉子數(shù)目 { if(!T->firstchild) return 1; //葉子結(jié)點 else { count=0; for(child=T->firstchild;child;child

展開閱讀全文
溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!