数据结构实习报告
int m=count(p->lchild); m+=count(p->rchild); if( !m ) return 1; else return m; } else return 0; } int depth(TreeNode *&p) { if(!p) return 0; int m=depth(p->lchild)+1; int n=depth(p->rchild)+1; return m>n?m:n; } void exchange(TreeNode *&p) { TreeNode *temp; if(p) { temp=p->lchild; p->lchild=p->rchild; p->rchild=temp; exchange(p->lchild); exchange(p->rchild); } } void main(void) { char s[50]; TreeNode *tree; cout<<"输入相应的二叉树:"; cin.getline(s,50); CreateBinTree(tree,s); cout<<"先序为:";
【程序输出结果】
【结果分析、自己的体会和收获】:
我觉得上机实践对我们更深入地学习数据结构很有帮助。虽然我的 C++在上一学期学的还算可以,但毕竟学的只是一些皮毛,而且一个暑 假里没有去接触毕竟还是有些生疏了。不过这学期的数据结构则给了我 一个继续去深入学习编程的机会,让我受益匪浅。第一,以前学习编程 时接触到的程序很小,也比较简单,都是为学习考试的需要而编写的小 程序,不具有实用性,而数据结构中的程序使我们真正领略到编程强大 的功能与无限的魅力之所在,让我们在将来的计算机职场竞争中更具有
pb=pb->next; break; } return ha; } Node *Mul(Node *ha,Node *hb) { Node *hc,*p,*q,*r,*pt,*hp; hc=new Node; hc->exp=-1; hc->next=hc; p=ha->next; while(p!=ha){ hp=new Node; hp->exp=-1; hp->next=hp; pt=hp; q=hb->next; while(q!=hb){ r=new Node; r->coef=p->coef*q->coef; r->exp=p->exp+q->exp; pt->next=r; r->next=hp; pt=r; q=q->next; } hc=Add(hc,hp); p=p->next; } return hc; } void Outport(Node *h) { Node *p; p=h->next; while(p!=h){
preorder(tree); cout<<endl; cout<<"中序为:"; inorder(tree); cout<<endl; cout<<"后序为:"; postorder(tree); cout<<endl; cout<<"结点数为:"<<count(tree)<<endl; cout<<"树高为:"<<depth(tree)<<endl; exchange(tree); cout<<"先序为:"; preorder(tree); cout<<endl; cout<<"中序为:"; inorder(tree); cout<<endl; }
竞争力。比如该程序就可以作为一个软件来运算多项式乘法中的问题, 从而节省时间。其次,在上机实践初期与到了不少的困难,使我们不得 不重新翻开课本温故一下知识点,从而使我们更深刻地理解了它们。还 有,通过上机实践,使我们掌握了不少上机操作技能。 通过这次上机实践无疑大大提高了我们的分析思维能力,由于查阅 大量书籍,与同学进行交流,不仅学习了一些新的知识,也从中学习了 与提高了自学能力与程序设计能力。第二 ,从学习的过程中我也感受 到了学习的快乐和成就感。看着自己费尽辛劳所编的程序最后终于开花 结果,能够流畅的运行并满足了所有的要求,我心中的自豪感油然而 生,以喜悦的心情写下了这份报告书。这么多天的辛勤和脑力折磨终于 有了成果,黄天不负有心人,可以说,这次编程使我那些在课本上已经 懂得了的和那些很多不太明白的地方都有了新的理解。第三,其实这个 程序并不是特别的难,运用的知识都是课本上学过的,但是你要想把他 弄的很好也不是那么的容易的。我知道无论做什么事,既然你要做,那 么你就要尽自己的最大的努力去把他做好,事在人为。
【程序代码】
#include<iostream.h> #include<stdlib.h> struct Node{ double coef; int exp; Node *next; }; Node *Create() { Node *h,*p; double x; int y; h=new Node; h->exp=-1; p=h; while(1){ cin>>x>>y; if(x==0&&y==0) break; if(y<0){ cout<<"指数不能为负!"<<endl; exit(1); } p->next=new Node; p=p->next; p->coef=x; p->exp=y; } p->next=h; return h; }
数据结构 上机实验报告
院系:计算机科学与技术学院 学号:0906840440 姓名:姚凌翔 指导老师:张宏
实验一:多: hc=ha*hb 要求: (1) 输入形式: 以“系数 指数”<Enter>的递减序输入,最后 以“0 0<Enter>”结束 (2) 输出,见格式 例: 5x9-7x2+6x-5 输入为: 输出为: 5X^9-7X^2+6X-5 5 9 -7 2 6 1 5 0 0 0
实验二:二叉树的相关操作
【实验内容及要求】
题目: 建立一棵二叉树,数据以字符串形式从键盘输入。在此二叉树上完成: (1)前序、中序、后序遍历 (2)求出叶子数 (3)求树高 (4)左右子树交换,输出交换后的前序、中序遍历序列 范例: A B C D * E *
* F * * *** *
【程序代码】
if(p->coef>0&&p->coef!=1) if(p!=h->next) if(p->exp>1) cout<<"+"<<p->coef<<"X^"<<p->exp; else switch(p->exp){ case 0: cout<<"+"<<p->coef;break; case 1: cout<<"+"<<p->coef<<"X";break; } else if(p->exp>1) cout<<p->coef<<"X^"<<p->exp; else switch(p->exp){ case 0: cout<<p->coef;break; case 1: cout<<p->coef<<"X";break; } else if(p->coef<0&&p->coef!=-1) if(p->exp>1) cout<<p->coef<<"X^"<<p->exp; else switch(p->exp){ case 0: cout<<p->coef;break; case 1: cout<<p->coef<<"X";break; } else switch(int(p->coef)){ case -1: if(p->exp>1) cout<<"-X^"<<p->exp;
} else p=NULL; } void preorder(TreeNode *p) { if(p!=NULL) { cout<<p->data; preorder(p->lchild); preorder(p->rchild); } } void inorder(TreeNode *p) { if (p) { inorder (p->lchild); cout<<p->data; inorder (p->rchild); } } void postorder(TreeNode *p) { if (p) { postorder (p->lchild); postorder (p->rchild); cout<<p->data; } } int count(TreeNode *p) { if(p) {
【程序输出结果】
【结果分析、自己的体会和收获】:
第一次编写一个关于二叉树的完整程序,确实是一件很不容易的 事。 编程之前先花了两天复习了一遍教材上与二叉树有关的内容,尤其 是二叉树的创建、遍历等内容。值得庆幸的是这个程序涉及到的二叉树 的基本操作基本上老师都讲过,自己也认真的做了一下笔记,复习起来 不是很麻烦。 初拿到这道题目时,我根据课件上源代码的提示,仔细研读书上已 有的代码,认真消化,仔细理解。其中难度最大的就是遍历了。在思考 清楚一系列问题后,接下来就是动手编写程序了。在编写的过程中遇到 了很多之前根本没有考虑到的问题,经过自己的仔细思考和与同学的讨 论,最终还是解决了。 总之,这次上机实践让我切身体会到了什么是二叉树。虽然说总体 上与以往上机题目那种几个功能函数加一个主函数存在一定的相同之 处,但这次最大的不同之处就在于递归函数的多次调用,这在理解难度 和程序编写上都提升了一定的档次。 设计程序光有语法知识是远远不够的,最重要的是多动手,多熟 练,在动手的过程中能强化很多概念。另外对程序全局一定要有个清晰