![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
linxuh
男
展开
-
树与二叉树
树的基本术语 1:树的度、节点的度 某节点所拥有子树的个数成为该节点的度;各节点度的最大值称为该树的度 2:路径,路径长度 如果树的节点序列{n1,n2,...nk} 满足以下关系:节点ni是节点n(i+1)的双亲,则称为n1,n2,...nk是一条从n1到nk的路径,路径上经过的边称为路径长度。 3:祖先,子孙 4:节原创 2013-09-24 20:46:40 · 735 阅读 · 1 评论 -
表达式树
表达式树通过二叉树来表示一个表达式。它的树叶是操作数,比如常数或变量,而其他的节点是操作符。通过递归的计算左子树和右子树所得到的值应用在根处的运算符操作中而算出表达式的值。 可以通过递归产生一个带括号的左表达式,然后打印出在根处的运算符,最后再递归的产生一个带扩号的有表达式而得到一个中缀表达式。这种一般的方法(左,节点,右)称为中序遍历。 递归打印出左子树、右子树,然后原创 2013-09-25 09:37:28 · 761 阅读 · 0 评论 -
二叉堆
堆是一棵被完全填满的二叉树,有可能的例外是在底层。 因为完全二叉树很有规律,因此可以用数组来表示,而不需要用指针。对于数组中任一位置i上的元素,其左儿子在2i上,右儿子在左儿子后的单元中。它的父亲则在i/2中。因此,遍历该树所需要的操作也非常简单,唯一的问题是最大的堆大小需要事先估计。 因此,一个堆数据结构由一个数组(不论是什么类型)、一个代表最大值的整数以及当前堆的大小组成。原创 2013-10-11 20:45:59 · 537 阅读 · 0 评论 -
二叉查找树
使二叉树成为二叉查找树的性质是,对于树中的每一个节点X,他的左子树中所有关键字值小于X的关键字,而他的右子树中所有关键字值大于X的值。1:二叉查找树的声明#ifndef _Tree_Hstruct TreeNode;typedef struct TreeNode *Position;typedef struct TreeNode *SearchTree;SearchTree M原创 2013-09-27 17:08:02 · 512 阅读 · 0 评论 -
散列
散列是一种用于常数平均时间执行插入、删除和查找的技术。但是,那些需要元素间任何排序信息的操作将不会得到有效支持。因此,诸如FINDMIN、FINDMAX以及线性时间按排序顺序将整个表进行打印的操作都是散列所不支持的 如果当一个元素被插入时另一个元素已经存在,那么就产生一个冲突,这个冲突需要解决。 分离链接法:做法是将散列到同一个值得所有元素保留到一个表中。通常是链表。1原创 2013-09-27 21:19:00 · 514 阅读 · 0 评论 -
彻底弄懂二维树状数组
当要频繁的对数组元素进行修改,同时又要频繁的查询数组内任一区间元素之和的时候,可以考虑使用树状数组. 通常对一维数组最直接的算法可以在O(1)时间内完成一次修改,但是需要O(n)时间来进行一次查询.而树状数组的修改和查询均可在O(log(n))的时间内完成. 一、回顾一维树状数组 假设一维数组为A[i](i=1,2,...n),则与它对应的树状数组C[i](i=1,2,..转载 2013-10-22 21:03:07 · 832 阅读 · 0 评论 -
图和图的表示方法
一个图(graph)G=(V,E)是由顶点(vertex)集 V 和边(edge)集 E 组成,每一条边就是一个点对(v,w),其中 v,w ∈ V。如果点对是有序的,那么图就是有向的(directed)。 图最简单的表示方法是用一个二维数组表示,称为邻接矩阵表示法。对于每条边(u,v),我们置A[ u ][ v ] =1,否则为0;若是赋权图,那么我们可以置A[ u ][ v ]的值等原创 2013-11-09 11:46:11 · 763 阅读 · 0 评论