数据结构(八)
2016-02-21 22:07
330 查看
接着二叉树:
已知中序和先序,中序和后序求原始二叉树:先从先序和后序开始找根结点,再定位到中序找出根结点的左子树和右子树,再依次递归找出各位非终端结点。
示例1
先序:ABCDEFGH
中序:BDCEAFHG
求后序:DECBHGFA
示例2
先序:ABDGHCEFI
中序:GDHBAECIF
求后序:GHDBEIFCA
示例3
中序:BDCEAFHG
后序:DECBHGFA
求先序:ABCDEFGH
树的应用:
树是数据库数据组织的一种重要形式
操作系统子父进程的关系本身就是一棵树:
![](http://img.blog.csdn.net/20160221220240360?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
面向对象语言中类的继承关系本身就是一棵树
赫夫曼树
下面是二叉树遍历的算法:
![](http://img.blog.csdn.net/20160221220453569?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
排序算法:排序有很多种,下面介绍快速排序,思路是递归:
![](http://img.blog.csdn.net/20160221220555708?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
再次讨论数据结构:
数据结构是研究数据的存储和数据的操作的一门学问
数据的存储分两部分:
个体的存储
个体关系的存储
从某个角度而言,数据的存储最核心的是个体关系的存储,个体的存储可以忽略不计。
再次讨论什么是泛型
同一种逻辑结构,无论该逻辑结构物理存储是什么样子的,我们可以对它执行相同的操作。
已知中序和先序,中序和后序求原始二叉树:先从先序和后序开始找根结点,再定位到中序找出根结点的左子树和右子树,再依次递归找出各位非终端结点。
示例1
先序:ABCDEFGH
中序:BDCEAFHG
求后序:DECBHGFA
示例2
先序:ABDGHCEFI
中序:GDHBAECIF
求后序:GHDBEIFCA
示例3
中序:BDCEAFHG
后序:DECBHGFA
求先序:ABCDEFGH
树的应用:
树是数据库数据组织的一种重要形式
操作系统子父进程的关系本身就是一棵树:
面向对象语言中类的继承关系本身就是一棵树
赫夫曼树
下面是二叉树遍历的算法:
#include<stdio.h> #include<malloc.h> struct BTNode { char data; struct BTNode * pLchild; struct BTNode * pRchild; }; struct BTNode * CreateBTree(void); void preTraverse(struct BTNode * pA); void middleTraverse(struct BTNode *pA); void afterTraverse(struct BTNode *pA); int main() { struct BTNode * pT = CreateBTree(); printf("\n*******先序*******\n"); preTraverse(pT); printf("\n********中序******\n"); middleTraverse(pT); printf("\n*******后序*******\n"); afterTraverse(pT); return 0; } struct BTNode * CreateBTree(void) { struct BTNode * pA=(struct BTNode *)malloc(sizeof(struct BTNode)); struct BTNode * pB=(struct BTNode *)malloc(sizeof(struct BTNode)); struct BTNode * pC=(struct BTNode *)malloc(sizeof(struct BTNode)); struct BTNode * pD=(struct BTNode *)malloc(sizeof(struct BTNode)); struct BTNode * pE=(struct BTNode *)malloc(sizeof(struct BTNode)); pA->data='A'; pB->data='B'; pC->data='C'; pD->data='D'; pE->data='E'; pA->pLchild=pB; pA->pRchild=pC; pB->pLchild=pB->pRchild=NULL; pC->pLchild=pD; pC->pRchild=NULL; pD->pLchild=NULL; pD->pRchild=pE; pE->pLchild=pE->pRchild=NULL; return pA; } void preTraverse(struct BTNode *pA) { if(pA!=NULL) { printf(" %c ",pA->data); if(pA->pLchild!=NULL) { preTraverse(pA->pLchild); } if(pA->pRchild!=NULL) { preTraverse(pA->pRchild); } } } void middleTraverse(struct BTNode *pA) { if(pA!=NULL) { if(pA->pLchild!=NULL) { preTraverse(pA->pLchild); printf(" %c ",pA->data); } if(pA->pRchild!=NULL) { preTraverse(pA->pRchild); } } } void afterTraverse(struct BTNode *pA) { if(pA!=NULL) { if(pA->pLchild!=NULL) { preTraverse(pA->pLchild); } if(pA->pRchild!=NULL) { preTraverse(pA->pRchild); printf(" %c ",pA->data); } } }
排序算法:排序有很多种,下面介绍快速排序,思路是递归:
#include<stdio.h> void sort(int * a,int low,int high); int findpos(int * a,int low,int high); int main() { int a[6]={12,4,3,1,7,4}; int i; sort(a,0,6); for(i=0;i<6;i++) { printf("%d ",a[i]); } printf("\n"); return 0; } void sort(int * a,int low,int high) { int pos; if(low<high) { pos=findpos(a,low,high); sort(a,low,pos-1); sort(a,pos+1,high); } } int findpos(int *a,int low,int high) { int val=a[low]; while(low<high) { while(low<high&&a[high]>=val) { --high; } a[low]=a[high]; while(low<high&&a[low]<=val) { ++low; } a[high]=a[low]; } a[low]=val; return low; }
再次讨论数据结构:
数据结构是研究数据的存储和数据的操作的一门学问
数据的存储分两部分:
个体的存储
个体关系的存储
从某个角度而言,数据的存储最核心的是个体关系的存储,个体的存储可以忽略不计。
再次讨论什么是泛型
同一种逻辑结构,无论该逻辑结构物理存储是什么样子的,我们可以对它执行相同的操作。
相关文章推荐
- 数据结构(七)
- 数据结构(六)
- 数据结构(五)
- 数据结构(四)
- 数据结构(三)
- 数据结构(二)
- 数据结构(一)
- hdu 3577(线段树区间更新)
- 数据结构: 数组与字符串问题
- 跟我学数据结构之树
- 跟我学数据结构之数组和广义表
- 《数据结构与算法分析(c描述)》——二叉搜索树实现
- 树和递归(一)[leetcode]Balanced Binary Tree
- opencv基本数据结构
- 数据结构(9)--链队列的定义以及相关操作的实现
- 数据结构(8)--栈的应用之行编辑程序、括号匹配检验、数制转换、hanio塔问题
- 最小生成树-普里姆方法(Prim)
- 大学时数据结构课上写的排序算法
- 数据结构基础之图的遍历
- 《数据结构与算法分析(c 描述)》—— 第四章笔记