
树和二叉树实验总结
树的话是计算机语言,其中二叉树是树的一个特例,是树每个节点分出2个小节满树的树为二叉树。
求数据结构做二叉树实验的心得体会、、、
楼主你好具体代码如下:#include #include #define MAX 40 typedef struct node\\\/\\\/二叉树结点定义 { char data; struct node *lChild;\\\/\\\/左孩子 struct node *rChild;\\\/\\\/右孩子 }BTNode; \\\/\\\/*************************************二叉树操作*************************************** void Initial_BT(BTNode * &b) { b=NULL; } void Creat_BT(BTNode * &b)\\\/\\\/创建二叉树 { BTNode *St[MAX];\\\/\\\/用栈辅助实现二叉树的建立 BTNode *p=NULL; b=NULL; int top=-1;\\\/\\\/栈指针 int k;\\\/\\\/k为左右孩子标示(1为左孩子、2为右孩子) char ch; printf(Enter the binary tree:\\\ ); ch=getchar(); while(ch!='\\\ ') { switch(ch) { case '(':\\\/\\\/左孩子 top++; St[top]=p; k=1; break; case ')': top--; break; case ',':\\\/\\\/右孩子 k=2; break; default: p=(BTNode *)malloc(sizeof(BTNode)); p->data=ch; p->lChild=p->rChild=NULL; if(!b)\\\/\\\/如果为根节点 b=p; else { switch(k) { case 1: St[top]->lChild=p; break; case 2: St[top]->rChild=p; break; } } } ch=getchar();\\\/\\\/继续读入数据 } }void InOrder(BTNode *b)\\\/\\\/中序遍历 { if(b) { InOrder(b->lChild); printf(%c,b->data); InOrder(b->rChild); } } void PostOrder(BTNode *b)\\\/\\\/后序遍历 { if(b) { PostOrder(b->lChild); PostOrder(b->rChild); printf(%c,b->data); } } int Leaf_Sum(BTNode *b) { if(!b) return 0; else if(b->lChild == NULL && b->rChild == NULL) return 1; else return Leaf_Sum(b->lChild)+Leaf_Sum(b->rChild); } void Start() { BTNode *b;\\\/\\\/二叉树 char choice; b=(BTNode *)malloc(sizeof(BTNode)); Initial_BT(b); GOTO:system(cls); printf(\\\\\\1.创建二叉树.\\\ \\\\\\2.中序遍历.\\\ \\\\\\3.后序遍历.\\\ \\\\\\4.叶子结点个数.\\\ \\\\\\5.退出.\\\ ); printf(输入你的选择:); GOTO1:choice=getchar(); switch(choice) { case '1': getchar(); Creat_BT(b); system(pause); goto GOTO; case '2': InOrder(b); printf(\\\ ); system(pause); getchar(); goto GOTO; case '3': PostOrder(b); printf(\\\ ); system(pause); getchar(); goto GOTO; case '4': printf(共有%d个叶子结点\\\ ,Leaf_Sum(b)); system(pause); getchar(); goto GOTO; case '5': system(pause); break; default: printf(输入错误!\\\ 重新输入:); goto GOTO1; } } int main() { Start(); return 0; }希望能帮助你哈
二叉树中,什么是前序,中序。
后序
1、建立一个单链表,并从屏幕显示单链表元素列表。
2、从键盘输入一个数,查找在以上创建的单链表中是否存在该数;如果存在,显示它的位置;如果不存在,给出相应提示。
3、在上述的单链表中的指定位置插入指定的元素 4、删除上述单链表中指定位置的元素。
源程序:头文件 #include #include typedef char ElemType; typedef int Status; #define OK 1 #define ERROR 0 typedef struct LNode{ ElemType data; LNode *next; }LNode,*LinkList; void about(){ \\\/\\\/版本信息 cout<<单链表的操作 } void showmenu(){ \\\/\\\/功能列表 cout<next; \\\/\\\/从头结点开始扫描 while(p){ \\\/\\\/顺指针向后扫描,直到p->next为NULL或i=j为止 cout<data; p=p->next; } cout<next = NULL; \\\/\\\/ 先建立一个带头结点的单链表 cout<<逆序输入 n 个数据元素,建立带头结点的单链表< 0; --i) { p = new LNode; cin>>p->data; \\\/\\\/ 输入元素值 p->next = L->next; L->next = p; \\\/\\\/ 插入 } } \\\/\\\/ L是带头结点的链表的头指针,以 e 返回第 i 个元素 Status GetElem_L(LinkList L, int i, ElemType &e) { int j; LinkList p; p = L->next; j = 1; \\\/\\\/ p指向第一个结点,j为计数器 while (p && ji ) return ERROR; \\\/\\\/ 第 i 个元素不存在 e = p->data; \\\/\\\/ 取得第 i 个元素 return OK; } \\\/\\\/ 本算法在链表中第i 个结点之前插入新的元素 e Status ListInsert_L(LinkList L, int i, ElemType e) { int j; LinkList p,s; p = L; j = 0; while (p && j < i-1) \\\/\\\/ 寻找第 i-1 个结点 if (!p || j > i-1) return ERROR; \\\/\\\/ i 大于表长或者小于1 s = new LNode; \\\/\\\/ 生成新结点 if ( s == NULL) return ERROR; s->data = e; s->next = p->next; p->next = s; \\\/\\\/ 插入 return OK; } Status ListDelete_L(LinkList L, int i, ElemType &e) {LinkList p,q; int j; p = L; j = 0; while (p->next && j < i-1) \\\/\\\/ 寻找第 i 个结点,并令 p 指向其前趋 if (!(p->next) || j > i-1) return ERROR; \\\/\\\/ 删除位置不合理 q = p->next; p->next = q->next; \\\/\\\/ 删除并释放结点 e = q->data; free(q); return OK; } #includeLinkList.h void main() {LinkList L; int n,choice,i; ElemType e; about(); cout<<请输入链表中元素的个数; cin>>n; CreateList_L(L, n); showmenu(); \\\/\\\/功能列表 cin>>choice; while(choice!=5) { \\\/\\\/输入时候退出程序 switch(choice){ case 1:PrintList(L);break; \\\/\\\/1.查看输入的全部数据 case 2:{ cout<<输入你要查找的元素的位置: ; cin>>i;GetElem_L(L, i, e); cout<<第<>i; cout<>e; ListInsert_L(L, i,e); break;} \\\/\\\/3.链表插入元素 case 4: {cout<<请输入你要删除元素的位置; cin>>i; ListDelete_L(L, i, e) ; break;} \\\/\\\/4.链表删除元素 default:cout<<输入错误,请输入-5,输入重显示功能表^_^ <>choice; } }
学习数据结构的心得体会
数据结构学习体会及教学建议时间过的很快,一转眼一学期的数据结构课程就已经快要告一段落了,在接触这么课以前,我觉得编程无非就是会写代码就好了。
然而事实上数据结构对于程序来说,有着非常重要的地位。
随着计算机应用领域的不断扩大,非数值计算的问题占据了当今计算机应用的绝大部分,简单的数据类型已经远远不能满足需要,个数据元素之间的复杂关系已经不是普通数学方程式能够表达的了,所以数据结构就扮演了十分重要的角色。
在学期初,我觉得数据结构还是比较简单的,但可能由于之前c语言学习对指针掌握的不够熟练,导致在数据结构中接触到与指针有关的问题,例如线性表,堆栈,队列,二叉树等问题的时候,都会显得有些吃力。
但是在不断学习数据结构的过程中我也不断加强了对指针的学习,现在我已经能够基本掌握指针的相关知识并且能够熟练运用了。
这一学期的学习下来我发现想要学好数据结构有以下几点经验{虽然可能我的数据结构学的并不是很好}1.初步了解算法思想、原理想要弄清楚一个算法的实现,首先要知道这个算法的大致原理,这是最简单的一步,也是最基础的一步,只有明白算法想要干什么,才能弄清楚相应的代码段是为什么2.钻研课本代码段对于书上的算法代码,我们一定要仔细钻研每一步的具体含义和目的,在此基础上深入的了解算法的实现过程,而不是一味的四级硬背,不仅无聊,而且效率低下。
3.查找各种算法资料例如排序算法,其实历史上有很多不同的排序算法,书上
二叉排序树实验报告怎么写
其实c语言和C++在我们用数据结构的时候,可简单的区别为输入输出的区别,所以用vc6.0编是完全可以的,我们都是用vc6.0做这个实验的,代码如下:\\\/\\\/==========================================定义头部#include using namespace std;struct BiTNode{ char data; struct BiTNode *lchild, *rchild;\\\/\\\/左右孩子};BiTNode*T;void CreateBiTree(BiTNode* &T);void Inorder(BiTNode* &T);void PreOrderTraverse(BiTNode* &T);void Posorder(BiTNode* &T);\\\/\\\/===========================================主函数int main(){cout<<创建一颗树,其中A->Z字符代表树的数据,用“#”表示空树:< char ch; if((ch=getchar())=='#')T=NULL;\\\/\\\/其中getchar()为逐个读入标准库函数 else{ T=new BiTNode;\\\/\\\/产生新的子树 T->data=ch;\\\/\\\/由getchar()逐个读入来 CreateBiTree(T->lchild);\\\/\\\/递归创建左子树 CreateBiTree(T->rchild);\\\/\\\/递归创建右子树 }}\\\/\\\/CreateTree\\\/\\\/===============================================先序递归遍历二叉树void PreOrderTraverse(BiTNode* &T){ \\\/\\\/先序递归遍历二叉树 if(T){\\\/\\\/当结点不为空的时候执行 cout<data; PreOrderTraverse(T->lchild);\\\/\\\/ PreOrderTraverse(T->rchild); } else cout<<;}\\\/\\\/PreOrderTraverse\\\/\\\/================================================中序遍历二叉树void Inorder(BiTNode* &T){\\\/\\\/中序递归遍历二叉树 if(T){\\\/\\\/bt=null退层 Inorder(T->lchild);\\\/\\\/中序遍历左子树 cout<data;\\\/\\\/访问参数 Inorder(T->rchild);\\\/\\\/中序遍历右子树 } else cout<<; }\\\/\\\/Inorder\\\/\\\/=================================================后序递归遍历二叉树void Posorder(BiTNode* &T){ if(T){ Posorder(T->lchild);\\\/\\\/后序递归遍历左子树 Posorder(T->rchild);\\\/\\\/后序递归遍历右子树 cout<data;\\\/\\\/访问根结点 } else cout<<;}\\\/\\\/=================================================这是我自己做的,有什么不好的地方,欢迎纠错