樹和二叉樹——數(shù)據(jù)結(jié)構(gòu)實驗報告_第1頁
樹和二叉樹——數(shù)據(jù)結(jié)構(gòu)實驗報告_第2頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精品文檔1歡迎。下載實習(xí)報告題目:編寫一個實現(xiàn)基于二叉樹表示的算術(shù)表達式 Expression 操作程序班級: 姓名: 學(xué)號: 完成日期 /一、需求分析算術(shù)表達式 Expression 內(nèi)可以含有變量(az)、常量(09)和二元算術(shù) 符(+,-,*,/,人(乘幕)。實現(xiàn)以下操作:(1) ReadExpr (E) 以字符序列的形式輸入語法正確的前綴表達式并構(gòu)造 表達式 E。( 2) WriteExpr(E) 用帶括號的中綴表達式輸出表達式E。(3)Assign(V, c)實現(xiàn)對變量 V 的賦值(V=c),變量的初值為 0。(4)Value(E)對算術(shù)表達式 E 求值。(5) CompoundEx

2、pr(p,E1,E2)構(gòu)造一個新的復(fù)合表達式(E1)p(E2)。二、概要設(shè)計1 、數(shù)據(jù)類型的聲明: 在這個課程設(shè)計中,采用了鏈表二叉樹的存儲結(jié)構(gòu),以及兩個順序棧的輔助 存儲結(jié)構(gòu)/* 頭文件以及存儲結(jié)構(gòu) */#include #include #include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW 0typedef int Status;2、表達式的抽象數(shù)據(jù)類型定義ADT Expression 數(shù)據(jù)對象 D: D 是具有數(shù)值的常量 C 和沒有數(shù)值的變量 V;數(shù)據(jù)關(guān)系:R=|V

3、,C D, 表示由運算符 P 結(jié)合起來的表達式 E基本操作:Status Input_Expr(&string,flag)操作結(jié)果: 以字符序列的形式輸入語法正確的前綴表達式, 保存到字符 串string ; 參數(shù) flag 表示輸出的提示信息是什么, 輸入成功返回 OK, 否則,返回 ERRORvoid judge_value(&E,&string,i)初始條件:樹 E 存在,表達式的前綴字符串 string 存在;精品文檔2歡迎。下載操作結(jié)果:判斷字符 stringi ,如果是 0-9 常量之間,二叉樹結(jié) 點 E 存為整型;否則,存為字符型。Status ReadE

4、xpr(&E,&exprstring) 初始條件:表達式的前綴形式字符串exprstring 存在; 操作結(jié)果:以正確的前綴表示式exprstring 并構(gòu)造表達式 E,構(gòu)造成功,返回 0K 否則返回 ERRORStatus Pri_Compare(c1,c2)初始條件:cl 和 c2 是字符; 操作結(jié)果:如果兩個字符是運算符,比較兩個運算符的優(yōu)先級, c1 比 c2 優(yōu)先,返回 0K 否則返回 ERRORvoid WriteExpr(&E)初始條件:表達式 E 存在; 操作條件:用帶括弧的中綴表達式輸入表達式E。void Assign(&E,V,c,&

5、flag)初始條件:表達式 E 存在,flag 為標(biāo)志是否有賦值過; 操作結(jié)果:實現(xiàn)對表達式 E 中的所有變量 V 的賦值(V=c)。 long Operate(opr1,opr,opr2) 初始條件:操作數(shù) opr1 和操作數(shù) opr2 以及操作運算符 opr; 操作結(jié)果:運算符運算求值,參數(shù) opr1,opr2 為常量, opr 為運算符, 根據(jù)不同的運算符,實現(xiàn)不同的運算,返回運算結(jié)果。Status Check(E)初始條件:表達式 E 存在;操作結(jié)果:檢查表達式 E 是否還存在沒有賦值的變量,以便求算數(shù)表達 式 E的值。long Value(E)初始條件:表達式 E 存在;操作結(jié)果:對

6、算術(shù)表達式求值,返回求到的結(jié)果。void CompoundExpr(P,&E1,E2)初始條件:表達式 E1 和 E2 存在; 操作條件:構(gòu)造一個新的復(fù)合表達式(E1)P(E2)。Status Read_Inorder_Expr(&string,&pre_expr) 操作結(jié)果:以表達式的原書寫形式輸入,表達式的原書寫形式字符串 string 變?yōu)樽址?pre_expr ,后調(diào)用 reversal_string() 函數(shù)反轉(zhuǎn)得 到前綴表達式 pre_expr。得到正確的前綴表達式返回 0K 否則,返回ERRORvoid MergeConst(&E)操作結(jié)果:常數(shù)

7、合并操作,合并表達式E 中所有常數(shù)運算。ADT Expression3、整體設(shè)計1 、順序棧的基本操作:對于棧 SqStack:Status InitStack(SqStack *S)Status StackEmpty(SqStack S)/* 構(gòu)造一個空棧 S */*若棧 S 為空棧,則返回 TRUE 否則返回 FALSE */精品文檔3歡迎。下載返回 OK 否則返回 ERROR */2、主程序模塊的整體流程在主函數(shù)中,采用多分支程序設(shè)計語句 switch() 使程序產(chǎn)生不同的流向,從而達到實 現(xiàn)課程設(shè)計的各個要求。void main()2、本程序有四個模塊,主程序模塊,二叉樹模塊,兩個順序

8、棧模塊。四者的調(diào)用關(guān)系如下:主程序模塊中的對于表達式的存儲結(jié)構(gòu)調(diào)用了二叉樹模塊, 而在構(gòu)造表達式的二叉樹模 塊中又調(diào)用了順序棧 SqStack 模塊,主程序中在將原表達式形式輸入表達式轉(zhuǎn)換為前綴表達 式操作中調(diào)用了順序棧 SqStack1 模塊。Status Push(SqStack *S,SElemType e) /*插入元素 e 為新的棧頂元素 */Status Pop(SqStack *S,SElemType *e) /*值,并返回 OK 否則返回 ERROR */若棧不空,則刪除S 的棧頂元素,用 e 返回其Status GetTop(SqStack S,SElemType *e) /

9、*回 OK 否則返回 ERROR */對于棧 SqStack1:若棧不空,則用e 返回 S 的棧頂元素,并返Status InitStack1(SqStack1 *S)/* 構(gòu)造一個空棧 S */StatusStackE/*若棧 S 為空棧,則返回TRUE 否則返回 FALSE */Status Push1(SqStack1 *S,SElemType1 e)Status Pop1(SqStack1 *S,SElemType1 *e)回其值,并返回 OK 否則返回 ERROR */Status GetTop1(SqStack1 S,SElemType1 *e) /*/* 插入元素 e 為新的棧頂

10、元素 */* 若棧不空,則刪除 S 的棧頂元素,用 e 返若棧不空,則用 e 返回 S 的棧頂元素,并printf(n1 printf(n2 printf(n3 printf(n4 printf(n5 printf(n0 while(1)switch( )根據(jù)不同的選擇,調(diào)用不同的操作函數(shù),完成各個操作;輸入正確的前綴表達式 ); 帶括弧的中綴表示式輸出 ); 對變量進行賦值 ); 對算數(shù)表達式求值); 構(gòu)造一個新的復(fù)合表達式 );退出);精品文檔4歡迎下載主程序模塊順序棧 SqStack 模塊三、詳細設(shè)計1、二叉樹的存儲類型/*二叉樹結(jié)點類型*/typedef enumINT,CHAREle

11、mTag;/*INT為整型數(shù)據(jù) num, CHAF 為字符型數(shù)據(jù) c*/typedef struct TElemTypeElemTag tag;/*INT,CHAR指示是整型還是字符型 */union int num;/*tag=INT 時,為整型 */ char c;/*tag=CHAR 時,為字符型 */; TElemType;/*二叉樹的二叉鏈表存儲表示*/typedef struct BiTNodeTElemType data;struct BiTNode *lchild,*rchild; /*左右孩子指針 */BiTNode,*BiTree;二叉樹的基本操作已經(jīng)在構(gòu)造表達式和表達式中

12、的基本操作中根據(jù)不同的功能和實際 情況修改了,詳細見各個函數(shù)操作的算法設(shè)計。2、順序棧的存儲類型/*棧的順序存儲表示*/#defi ne STACK_INIT_SIZE 10 /*#defi ne STACKINCREMENT 2 /*兩個順序棧*/在棧構(gòu)造之前和銷毀之后,base 的值為 NULL */棧頂指針*/當(dāng)前已分配的存儲空間,以元素為單位*/SqStack; /* 順序棧 SqStack */順序棧SqStac存儲空間初始分配量 存儲空間分配增量*/*/typedef struct SqStackSElemType *base; /*SElemType *top; /*int st

13、acksize; /*精品文檔5歡迎。下載typedef struct SqStack1SElemType1 *base; /*在棧構(gòu)造之前和銷毀之后, base 的值為 NULL */SElemType1 *top; /* 棧頂指針 */int stacksize; /* 當(dāng)前已分配的存儲空間,以元素為單位 */ SqStack1; /* 順序棧 SqStack1 */相關(guān)的基本操作見上面的“ expression.h 文件的整體結(jié)構(gòu)”的說明,詳細的算法設(shè)計 見附錄的程序清單。3、表達式的基本操作Status Input_Expr(char *string,int flag);/* 以字符序

14、列的形式輸入語法正確的前綴表達式,保存到字符串 string*/* 參數(shù) flag=0 表示輸出的提示信息是 請輸入正確的前綴表示式: */*flag=1 表示輸出的提示信息為 請以表達式的原書寫形式輸入正確表示式: */ voidjudge_value(BiTree *E,char *string,int i);/* 判斷字符 stringi ,如果是 0-9 常量之間,二叉樹結(jié)點存為整型;否則,存為 字符型 */Status ReadExpr(BiTree *E,char *exprstring);/* 以正確的前綴表示式并構(gòu)造表達式 E*/Status Pri_Compare(char

15、c1,char c2);/*如果兩個字符是運算符,比較兩個運算符的優(yōu)先級,cl 比 c2 優(yōu)先,返回 0K 否則返回 ERROR*/ void WriteExpr(BiTree E);/* 用帶括弧的中綴表達式輸入表達式 */void Assign(BiTree *E,char V,int c,int *flag);/*實現(xiàn)對表達式中的所有變量V 的賦值(V=c),參數(shù) flag 為表示是否賦值過的標(biāo)志*/long 0perate(int opr1,char opr,int opr2);/* 運算符運算求值,參數(shù) opr1,opr2 為常量, opr 為運算符,根據(jù)不同的運算符,實現(xiàn) 不同的運

16、算,返回運算結(jié)果 */Status Check(BiTree E);/* 檢查表達式是否還存在沒有賦值的變量,以便求算數(shù)表達式的值*/long Value(BiTree E);/* 對算術(shù)表達式求值 */void CompoundExpr(char P,BiTree *E1,BiTree E2);/* 構(gòu)造一個新的復(fù)合表達式 */Status Read_Inorder_Expr(char *string,char *pre_expr);/* 以表達式的原書寫形式輸入,表達式的原書寫形式字符串string 變?yōu)樽址畃re_expr ,后調(diào)用 reversal_string() 函數(shù)反轉(zhuǎn)得到前綴

17、表達式 pre_expr*/ 下面列出部分基本操作的偽碼算法,未列出的請見程序清單。其中部分基本操作的偽碼算法如下:Status Input_Expr(char *string,int flag)if(flag=0)printf(n請輸入正確的前綴表示式: );else printf(n 請以表達式的原書寫形式輸入正確表示式:);flushall();/* 清理緩沖區(qū) */gets(string);/* 從鍵盤輸入一串字符串作為表達式 */精品文檔6歡迎。下載if(strlen(string)=1)/*if(string0=+|string0=-|string0=*|string0=/|str

18、ing0=)/*輸入的表達式只有一個運算符*/printf(n 表達式只有運算符,錯誤! );return ERROR;elseif(string0=0&string0=a&string0=A&string0=0 & stringidata.tag=INT; (*E)-data.num=stringi-48;else if(stringi=1 & stringidata.tag=INT;(*E)-data.num=save_numberstringi;else/* 為變量 */(*E)-data.tag=CHAR;(*E)-data.c=stringi;

19、Status ReadExpr(BiTree *E,char *exprstring)SqStack S;int i,len;/*len 為表達式的長度 */輸入的表達式字符串長度為 1*/精品文檔7歡迎。下載BiTree p,q;(*E)=(BiTree)malloc(sizeof(BiTNode);/* 申請二叉樹的根結(jié)點的空間 */ (*E)-lchild=NULL;(*E)-rchild=NULL; len=strlen(exprstring);/*len 賦值為表達式的長度 */ if(len=1)/* 表達式長度為 1時,二叉樹只有根結(jié)點 */judge_value(E,exprs

20、tring,0);/* 將 exprstring0 存入二叉樹的結(jié)點中 */elsejudge_value(E,exprstring,0);/* 將 exprstring0 存入二叉樹的結(jié)點中 */ InitStack(&S);/* 初始化棧 */q=(*E);Push(&S,q);/* 入棧 */Push(&S,q);/* 入棧,根結(jié)點入棧兩次是為判斷先序輸入的表達式是不是正確的表 達式 */for(i=1; ilchild=NULL;p-rchild=NULL; if(exprstringi=+ | exprstringi=- | exprstringi=* |ex

21、prstri ngi=/ | exprstri ngi=人)/* 為運算符,運算符入棧,左孩子不空,向左孩子走,否則,如果右孩子不 空,向右孩子走 */if(!q-lchild)q-lchild=p; Push(&S,p);q=p;elseq-rchild=p; Push(&S,p);q=p;else/* 不是運算符,運算符出棧 */if(!q-lchild)q-lchild=p; Pop(&S,&q);elseq-rchild=p; Pop(&S,&q);if(StackEmpty(S)&i=len)return OK;/* ??涨?i

22、=len ,說明輸入的表達式是正確的 */else /* 輸入的表達式是錯誤的 */printf(n 輸入的表達式有誤! );精品文檔8歡迎。下載return ERROR;Status Pri_Compare(char c1,char c2)if(c1= A|c1=*|c 仁=-|c1=+|c1=/)&(c2= A|c2=*|c2=- |c2=+|c2=/)if(c1=A)if(c2!=A) return OK;else return ERROR;else if(c1=*|c1=/)if(c2=A|c2=*|c2=/)return ERROR;elsereturn OK;elseret

23、urn ERROR;elsereturn ERROR;/*c1 和 c2 不是運算符 */void WriteExpr(BiTree E)if(E)/* 樹不為空 */ /* 先遞歸左子樹 */if( E-lchild & E-lchild-data.tag=CHAR )/*E的左孩子不為空,且左孩子為字符 */if(Pri_Compare(E-data.c,E-lchild-data.c)/*E-data.c 比 E-lchild-data.c 優(yōu)先 */printf();WriteExpr(E-lchild); printf();/* 帶括弧輸出左子樹 */elseWriteExp

24、r(E-lchild);/* 否則,不帶括弧輸出左子樹 */elseWriteExpr(E-lchild);/* 否則,輸出左子樹 */精品文檔9歡迎。下載if(E-data.tag=INT)/* 訪問輸出根結(jié)點的值 */printf(%d,E-data.num);elseprintf(%c,E-data.c); /* 后遞歸右子樹 */if(E-rchild&E-rchild-data.tag=CHAR)/*E 的右孩子不為空, 且右孩子為字 符*/if(Pri_Compare(E-data.c,E-rchild-data.c)/*E-data.c 比 E-rchild-data.c

25、 優(yōu)先 */printf();WriteExpr(E-rchild);精品文檔10歡。迎下載printf();/* 帶括弧輸出右子樹 */ elseWriteExpr(E-rchild);/* 否則,不帶括弧輸出右子樹 */elseWriteExpr(E-rchild); /* 否則,輸出右子樹 */void Assign(BiTree *E,char V,int c,int *flag)if(*E)if(*E)-data.tag=CHAR & (*E)-data.c=V)/* */(*E)-data.tag=INT;(*E)-data.num=c; *flag=1;Assign(&a

26、mp;(*E)-lchild),V,c,flag);/*遞歸左子樹 */Assign(&(*E)-rchild),V,c,flag);/*遞歸左子樹 */break;case -: result=opr1-opr2; return result; break;case *: result=opr1*opr2; return result; break;case /: result=opr1/opr2; return result; break;case A:result=power(opr1,opr2); return result; break;default: break;Stat

27、us Check(BiTree E)如果找到要賦值的變量,賦值long power(int x,int exp)/* 指數(shù)運算函數(shù),底數(shù)為x,指數(shù)為 exp*/long result; int i;for(i=1,result=1;idata.tag=CHAR)/* 樹不為空 */if(E-data.c!=*&E-data.c!=A&E-data.c!=-&E-data.c!=+&E-data. c!=/)printf(n 表達式中仍存在沒有賦值的變量 !); return ERROR;if(Check(E-lchild)/* 遞歸左子樹 */Check(E-r

28、child);/* 遞歸右子樹 */long Value (BiTree E)if(E)/* 樹不為空 */if(!E-lchild & !E-rchild & E-data.tag=INT) return (E-data.num); /* 結(jié)點的左孩子和右孩子為空,為葉子結(jié)點,返回結(jié)點的值 */ returnOperate(Value(E-lchild),E-data.c,Value(E-rchild);/* 運算求值,后根遍歷的次序?qū)Ρ磉_式求值,其中參數(shù)遞歸調(diào)用了 Value() 函數(shù)求 左子樹的值和右子樹的值 */void CompoundExpr(char P,BiTr

29、ee *E1,BiTree E2)/* 構(gòu) 造 一 個 新 的 復(fù) 合 表 達 式=CompoundExpr=*/BiTree E;E=(BiTree)malloc(sizeof(BiTNode);/* 申請一個結(jié)點存放運算符 P*/ E-data.tag=CHAR;E-data.c=P;/* 申請到的結(jié)點值為 P*/E-lchild=(*E1);/* 結(jié)點的左孩子為 E1*/E-rchild=E2;/* 結(jié)點的右孩子為 E2*/(*E1)=E;/*(*E1) 為根結(jié)點 */printf(n表達式 E 復(fù)合成功!其表達式變?yōu)椋骸?;WriteExpr(E);/* 輸出復(fù)合好的表達式 */Sta

30、tus Read_Inorder_Expr (char *string,char *pre_expr)int i,j,len,char_number=1;/*len 表示字符串 string 的長度, char_number 是記錄數(shù) 組save_number 的個數(shù) */int number;/* 保存大于 9 的常量 */char c,c1;SqStack1 S;/* 棧定義 */精品文檔12歡。迎下載InitStack1(&S);/* 初始棧 */Push1(&S,#);/* 先將字符 # 入棧,用來表示作為棧的最底一個元素 */ len=strlen(string);/

31、*len為字符串 string 的長度 */c=stringlen-1;/* 從字符串的最后一個字符開始向前掃描 */ i=len-1;while(!StackEmpty1(S)&i=0)/* 棧不為空且 i 大于等于 0*/if(c=()/* 字符為 (*/Pop1(&S,&c);/* 出棧,賦值給 c*/while(c!=)/* 假如 c 不為),出棧 */*pre_expr+=c;if(!StackEmpty1(S)&GetTop1(S,&c1)&c1!=#)Pop1(&S,&c);elseprintf(n 輸入的表達式有誤

32、 !);return ERROR; else if(c=)/* 字符為 ) ,入棧 */Push1(&S,c);else if(c=0&c=0&c1=0;j+,i-)/*循 環(huán) 掃 描string 前一個字符,求出常量后賦給 number*/number=(c1-48)*power(10,j)+number;/*number 為掃描到的常量 */ c1=stringi-2;save_numberchar_number=number;/* 將 number 存入到數(shù)組 save_number 中, 下標(biāo)為 char_number*/*pre_expr+=char_numb

33、er+;else if(c=a&c=A&c=0&stringi-1=A&stringi-1=a&stringi-1=0)c=stringi;/*i 不小于 0, c=stringi循環(huán)下一個字符 */else /* 否則,將清空棧 */while(!StackEmpty1(S)&GetTop1(S,&c1)&c1!=#)Pop1(&S,&c); *pre_expr+=c;Pop1(&S,&c);/* 將# 出棧 */*pre_expr=0;/* 字符串結(jié)束符 */ if(i0&StackEm

34、pty1(S)return OK;else return ERROR;void reversal_string(int len,i,j;char temp;len=strlen(exprstring);/*lenfor(i=0,j=len-1;i 輸入正確的前綴表達式 */if(Input_Expr(Expr_String,0) if(ReadExpr(&E,Expr_String)flag=1; printf( 輸入的帶括弧的中綴表達式: );WriteExpr(E);getch(); break;case 2:/*2 帶括弧的中綴表示式輸出 */ if(flag=1)printf(

35、n 帶括弧的中綴表達式為: ); WriteExpr(E);else);精品文檔15歡。迎下載printf(n 表達式未構(gòu)造成功!請重新構(gòu)造表達式! );getch();break;case 3:/*3 對變量進行賦值 */if(flag=1)int Assign_flag=0;printf(n表達式 E 為:”);WriteExpr(E);flushall();/* 清理緩沖區(qū) */printf(n 請輸入要賦值的值 :);V=getchar();printf( 請輸入要將賦值為 :);scanf(%d,&c);Assign(&E,V,c,&Assign_flag);

36、if(Assign_flag)printf(n 賦值成功! n 賦值后的表達式為 :);WriteExpr(E);else printf(n 表達式里沒有c 這個變量! ”,V);else printf(n表達式未構(gòu)造成功!請重新構(gòu)造表達式!);getch();break;case 4:/*4 對算數(shù)表達式求值 */if(flag=1)printf(n 算數(shù)表達式 :);WriteExpr(E);if(Check(E)result=Value(E);printf(n 求算數(shù)表達式的值 :t); WriteExpr(E); printf(=%ld,result);else printf(n 表達

37、式未構(gòu)造成功!請重新構(gòu)造表達式! ); getch();break;case 5:/*5 構(gòu)造一個新的復(fù)合表達式 */if(flag=1)printf(n 表達式 E1 為:); WriteExpr(E); printf(n請構(gòu)造新的表達式E2:);flushall();/* 清理緩沖區(qū) */ if(Input_Expr(string,1)if(Read_Inorder_Expr(string,Expr_String)reversal_string(Expr_String); if(ReadExpr(&E1,Expr_String)flag=1;printf(n 表 達 式 E1 構(gòu)

38、造 成 功 ! );WriteExpr(E1);精品文檔16歡。迎下載printf(n 請輸入要構(gòu)造新的復(fù)合表達式的操作運算 符:);P=getchar();while(P!=* &P!=/&P!=+&P!=-&P!=A)flushall();/* 清理緩沖區(qū) */ printf(n 輸入的操作運算符有誤!請重新輸 入.);P=getchar();CompoundExpr(P,&E,E1);else printf(n 復(fù)合新的表達式失?。≌埌慈我怄I返回主 菜單! ); else printf(n 表達式未構(gòu)造成功!請重新構(gòu)造表達式! ); getch()

39、;break;case 0:/*0 退出 */ printf(n 請按任意鍵退出! ); getch();exit(0); default :printf(n 輸入有誤!請按任意鍵回到主菜單重新選擇! ); getch();break;精品文檔118欠迎下載5、函數(shù)的調(diào)用關(guān)系除了主函數(shù) main()夕卜,其他各個函數(shù)相對于其它函數(shù)來說是獨立的,函數(shù) 的使用都由主函數(shù) main()調(diào)用使用的, 可以簡單的說, 各個函數(shù)都是主函數(shù)下 的從函數(shù)。四、調(diào)試分析1、 在起初設(shè)計上,針對前綴表達式的要求構(gòu)造表達式E,常量的范圍限定在 0-9 之間,后在這個構(gòu)造表達式的架構(gòu)上逐個逐個實現(xiàn)對表達式上的操作;后

40、擴展到以表達式的原書寫形式輸入,整體架構(gòu)是不變的,只是增加一些細節(jié)的處 理功能。這樣的設(shè)計從開始到最后都處于可擴展的模塊化設(shè)計。2、 在對各個功能操作的實現(xiàn)上,時間復(fù)雜度大多數(shù)是0(n),空間上增加了輔助棧,空間復(fù)雜度為 0(n+s)。而在以原表達式形式輸入操作上,實際上是對 字符串的操作,將一串原表達式字符串處理為前綴表達式字符串而已,算法時間復(fù)雜度取決于輸入的字符串的長度 n,即 0(n),空間復(fù)雜度為 0(2n+s)。整體的 算法設(shè)計沒有什么可取之處,對于減少時間復(fù)雜度和空間復(fù)雜度上沒有什么細細 考慮。3、 在調(diào)試的過程中,花費時間最為多的是對輸入錯誤表達式的出錯處理, 更改增加的代碼幾乎都是為了出錯處理.五、用戶手冊1、 本程序的運行環(huán)境為 DOS 操作系統(tǒng),執(zhí)行文件為:tree.exe ;2、 進入演示程序后首先出現(xiàn)一個主菜單,主菜單界面如下:請輸入你笳選擇;3、之后輸入你的選擇,進入你所要進行的操作中六、測試結(jié)果,Userslncvo D 凸 Ictop和二叉樹怙吐 u gtr.ex*1 12 2 3 3 4 4 5 5 0 0_MTN黑K達師達表表酣表綴值合疑啜中值求復(fù)旨-sst仃遼SrSr專正帶一一入出哀暑岀一一口

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論