第一篇:數據結構實驗五報告
實驗五報告
課程名稱: 數據結構 實驗名稱:二叉樹的創建與遍歷
實驗日期
2011/11/16
一、實驗目的:
通過上機實驗進一步掌握棧、隊列、二叉樹的存儲結構及基本操作的實現方法。
二、實驗內容與要求:
基于二叉鏈表存儲結構實現二叉樹的基本運算,要求:
⑴能建立非空二叉樹;
⑵實現二叉樹的先、中、后序遞歸遍歷算法;
⑶實現二叉樹的非遞歸的先(或中、或后)序遍歷算法及層序遍歷算法;
⑷記錄運行結果并對遞歸算法和非遞歸算法的效率加以分析。
三、算法設計 結構體的定義:
typedef struct BiTNote{
struct Node{
};類的定義: class CStack{
//棧 private:
};
class LinkQueue{ //隊列 public: BiTree base;BiTree top;int stacksize;//當前空間分配量 static const int STACK_INIT_SIZE=100;static const int STACKINCREMENT=10;CStack();
void Push(BiTree T);//入棧 void Pop(BiTree &T);//出棧 bool StackEmpty();//判斷是否是空棧 friend class CBiTree;Node(BiTree &d):num(d),next(NULL){} BiTree num;Node *next;char data;struct BiTNote *lchild,*rchild;}BiTNote,*BiTree;public:
};LinkQueue();bool QueueEmpty();void EnQueue(BiTree &T);void DeQueue(BiTree &T);friend class CBiTree;int length;//隊列元素的個數 Node *front;
//隊列的頭指針 Node *rear;
//隊列的尾指針 private: class CBiTree{ public:
};CStack::CStack():stacksize(STACK_INIT_SIZE){ //構造函數,初始化
} void CStack::Push(BiTree T){...} //入棧 void CStack::Pop(BiTree &T){...} //出棧 bool CStack::StackEmpty(){} int i=0;//全局變量
int CBiTree::CreatBiTree(BiTree &T){}//構造二叉樹 //LinkQueue類函數的實現 LinkQueue::LinkQueue(){} bool LinkQueue::QueueEmpty(){} void LinkQueue::EnQueue(BiTree &T){} void LinkQueue::DeQueue(BiTree &T){} int CBiTree::PreOrderTraverse1(BiTree T, int(*Visit)(char)){...} //前序遍歷(遞歸)int CBiTree::InOrderTraverse(BiTree T, int(*Visit)(char)){...} //中序遍歷(遞歸)int CBiTree::PostOrderTraverse(BiTree T, int(*Visit)(char)){...}//后序遍歷(遞歸)int CBiTree::PreOrderTraverse2(BiTree T, int(*Visit)(char)){ //前序遍歷(非遞歸)
BiTree p=T;while(p!=NULL||!s.StackEmpty()){ BiTree p=(BiTree)malloc(STACK_INIT_SIZE*sizeof(BiTNote));base=p;top=base;int CreatBiTree(BiTree &T);//建立二叉樹
int PreOrderTraverse1(BiTree T,int(*Visit)(char e));
//前序遍歷(遞歸)int PreOrderTraverse2(BiTree T,int(*Visit)(char e));
//前序遍歷(非遞歸)
int InOrderTraverse(BiTree T,int(*Visit)(char e));
//中序遍歷(遞歸)int PostOrderTraverse(BiTree T,int(*Visit)(char e));//后序遍歷(遞歸)int LevelOrderTraverse(BiTree T,int(*Visit)(char e));//層序遍歷(非遞歸)CStack s;LinkQueue link;private:
}
} while(p!=NULL){
} if(!s.StackEmpty()){
} s.Pop(p);p=p->rchild;Visit(p->data);s.Push(p);p=p->lchild;return 1;int CBiTree::LevelOrderTraverse(BiTree T, int(*Visit)(char))//層序遍歷(非遞歸){
} //main.cpp #include“BiTree.h” #include“Function.h” #include
}
int main(){
CBiTree Tree;BiTree T;T=(BiTree)malloc(sizeof(BiTNote));cout<<“構造二叉樹:”;Tree.CreatBiTree(T);cout<<“先序遍歷(遞歸):”;Tree.PreOrderTraverse1(T,PrintData);cout< link.EnQueue(T);while(!link.QueueEmpty()){ } return 0;BiTree p;link.DeQueue(p);Visit(p->data);link.EnQueue(p->lchild);link.EnQueue(p->rchild); } cout< 四、測試結果 五、心得體會 這次實驗嘗試用C++寫,好長時間沒接觸了,所以寫的比較吃力,在寫的過程中溫習了C++的一些知識,但代碼寫的很亂,沒有用模板,C++的引用也忘了等。這次還發現自己對指針還是不熟練(一個指針賦值的小錯誤多花了好多時間才找到)。總之覺得自己的編程水平很有待提高。 數據結構實驗二報告 ——簡單計算器 姓名:王稀賓 班 級:06111106 學號:1120111699 一實驗目的 按照四則運算加、減、乘、除、冪(^)和括號的優先關系和慣例,編寫計算器程序。 二實驗內容 要求: 從鍵盤輸入一個完整的表達式,以回車作為表達式輸入結束的標志。輸入表達式中的數值均為大于等于零的整數。中間的計算過程如果出現小數也只取整。 三程序設計 程序模塊: 1輸入模塊,輸入多項式; 2計算模塊,根據輸入內容,判斷分析,計算出結果; 3輸出模塊,輸出計算結果。 定義結構創建結點: typedef struct { double data[50];int top;}OPND_Stack;//運算符結構體 typedef struct { char data[50];int top;}OPTR_Stack;主函數部分: void main(){ char a[80];int m;char b[80];printf(“============簡易計算器============n”);printf(“[四則運算.如:-1+(2+3)*9/(-2)-6].n請輸入一個表達式:n”);while(1){ gets(a); strcpy(b,a); while(1) { int p; m=strlen(a); p=Can(a,m); if(p==0)break; printf(“輸入錯誤.請從新輸入表達式:n”); gets(a); strcpy(b,a); } printf(“=*=*=*=*=*=*表達式結果=*=*=*=*=*=*n”); printf(“該表達式的結果為:n%s=%-10.3lfn”,b,EvaluateExpression(a)); printf(“=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*n”); printf(“繼續使用[四則運算.如:-1+(2+3)*9/(-2)-6].<關閉退出>.n請再輸入 一個表達式:n”);} } 四程序調試分析 1在四則混合運算中,運算符號的優先級比較難判斷。2心得體會: 我對編程是有很濃厚興趣的。在編程的過程中,我深深地體會到力不從心—有些知識沒能深入地理解和掌握以及VC++的許多功能沒能探索和了解使我編程時有好多的思想運用不上(如設計一個美觀的操作界面)。另外,我也感受到了數據結構的重要性,有了結構才能將好的思想付諸實踐。同時經過查詢資料了解到棧由多種運用方法,其中包括棧的順序存儲結構和鏈式存儲結構,棧是計算表達式的經典應用。數據結構中的許多結構都是很經典思想,只有把編程語言和數據結構都熟練掌握的情況下,才能做出一些很好的作品。在編程過程中,雖然有時候是很發悶的,尤其是程序無錯但結果不對,但是在完成一個完整的程序時所帶來的喜悅是其它事情所不能替代的。我很喜歡編程,即使我的知識和能力有限,但我相信經過努力,一切皆有可能。 五用戶使用說明 按要求正確輸入表達式即可得到結果。 六程序運行結果 附程序清單 #include char OP[7]={'+','-','*','/','(',')','#'};//數據結構體 typedef struct { double data[50];int top;}OPND_Stack;//運算符結構體 typedef struct { char data[50];int top;}OPTR_Stack;//初始化運算符棧函數 void InitStack_R(OPTR_Stack *a){ a->top=-1;} //初始化數據站函數 void InitStack_D(OPND_Stack *a){ a->top=-1;} //運算符進棧函數 void Push_R(OPTR_Stack *a,char b){ a->top++;a->data[a->top]=b;} //數據進棧函數 void Push_D(OPND_Stack *a,double b){ a->top++;a->data[a->top]=b;} //取運算符棧頂符函數 void GetTop_R(OPTR_Stack *a,char *b){ *b=a->data[a->top];} //取數據棧頂數函數 void GetTop_D(OPND_Stack *a,double *b){ *b=a->data[a->top];} //判斷數據是否為運算符函數 int In(char a,char *s){ for(int i=0;i<7;i++) if(a==s[i]) return 1;return 0;} //算符優先級判斷函數 char Precede(char a,char b){ int m,n;for(int i=0;i<7;i++){ if(a==OP[i]) m=i; if(b==OP[i]) n=i;} return First[m][n];} //刪除運算符棧頂元素,并取新棧的棧頂元素 void Pop_R(OPTR_Stack *a,char *b){ a->top--;*b=a->data[a->top];} //取數據站的棧頂元素,并從棧中刪除此元素 void Pop_D(OPND_Stack *a,double *b){ *b=a->data[a->top];a->top--;} //算符優先算法求值核心函數 double EvaluateExpression(char *s){ OPND_Stack OPND;OPTR_Stack OPTR;char ch,theta;double x,a,b;int k=0;strcat(s,“#”);InitStack_R(&OPTR);Push_R(&OPTR,'#');InitStack_D(&OPND);GetTop_R(&OPTR,&ch);while(s[k]!='#'||ch!='#'){ if(In(s[k],OP)==0) { x=Getdouble(s,&k); Push_D(&OPND,x); } else { switch(Precede(ch,s[k])) { case'<':Push_R(&OPTR,s[k]); k++; break; case'=':Pop_R(&OPTR,&ch); k++; break; case'>':GetTop_R(&OPTR,&theta);Pop_R(&OPTR,&ch); Pop_D(&OPND,&b);Pop_D(&OPND,&a); Push_D(&OPND,Operate(a,theta,b)); break; } } GetTop_R(&OPTR,&ch);} GetTop_D(&OPND,&x);return x;InitStack_R(&OPTR);Push_R(&OPTR,'#');InitStack_D(&OPND);} //判斷表達式是否輸入正確.int Can(char a[],int n){ int p=0,s=0,t=0;for(int i=0;i if(a[i]=='('||a[i]==')') p++; if((a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/')&&((a[i+1]<'0'&&a[i+1]!='(')||a[i+1]>'9')) s++; if(a[i]=='/'&&a[i+1]=='0') s++; if((a[i]=='('&&(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/'))||(a[i]==')'&&a[i+1]=='(')) s++; if(a[i]==')'&&a[i+1]!='
主站蜘蛛池模板:
欧美内射深喉中文字幕|
国产精品99久久久精品无码|
在线a人片免费观看|
欧美精品a∨在线观看|
国产精品久久久久这里只有精品|
国产开嫩苞实拍在线播放视频|
强行糟蹋人妻hd中文字幕|
97久久精品无码一区二区天美|
欧美日韩精品一区二区在线视频|
亚洲线精品一区二区三区|
含紧一点h边做边走动免费视频|
国产精品天堂avav在线|
又黄又爽的成人免费视频|
伊人久久精品av一区二区|
亚洲综合av永久无码精品一区二区|
69久久夜色精品国产69|
中年国产丰满熟女乱子正在播放|
亚洲精品久久久久中文字幕一区|
久久亚洲国产精品成人av秋霞|
成年女性特黄午夜视频免费看|
日日鲁鲁鲁夜夜爽爽狠狠视频97|
免费a级毛片在线播放不收费|
日本大片在线看黄a∨免费|
亚洲精品自产拍在线观看动漫|
久久青青草原av免费观看|
亚洲精品黑牛一区二区三区|
欧美人与性动交g欧美精器|
欧美日韩午夜群交多人轮换|
三男一女吃奶添下面|
国产国拍亚洲精品永久软件|
欧美日韩国产图片区一区|
把女邻居弄到潮喷的性经历|
综合亚洲伊人午夜网|
亚洲 欧洲 无码 在线观看|
久久久综合香蕉尹人综合网|
国产成人亚洲综合无码|
国产xxxx视频在线观看|
亚洲精品久久久久久|
丝袜老师办公室里做好紧好爽|
中文字幕免费视频|
久久亚洲道色综合久久|
第二篇:數據結構實驗二報告