
数据结构
低调小一
Ubuntu重度患者,曾经的服务器开发工程师,如今正在深入学习到Android Framework
展开
-
树的学习
树的定义树(tree)是n(n>=0)个结点的有限集合T,T为空时称为空树,否则它满足如下两个条件:(1)有且仅有一个称之为根(root)的结点(2)其余的结点可分为m(m>=0)个互不相交的子集T1,T2,....,Tm,其中每个子集本身又是一棵树,并称之为根的子树(subtree)注意:树的递归定义刻画了树的固有特性:一棵非空树若是由若干棵子树构成的,而子树又可以由若干棵更原创 2012-11-11 15:36:18 · 1403 阅读 · 0 评论 -
图
图的定义和术语图中数据元素通常称为顶点(Vertex),V是顶点的有穷非空集合VR是两个顶点之间的关系的集合若属于VR,则表示从v到w的一条弧(Arc),且称v为弧尾(Tail)或起始点(Inital node),称w为弧头(Head)或终端点(Terminal node),此图称为有向图(Digraph)若属于VR必有属于VR,即VR是对称的,则以无序原创 2013-03-19 21:43:52 · 2932 阅读 · 2 评论 -
前缀、中缀、后缀表达式学习
前言最近做面试题的时候碰到了前缀、中缀、后缀表达式的问题,题目如下:表达式“X=A+B*(C-D)/E”的后缀表达式?看到这里有点蒙,于是赶紧google,记录一下学习新得吧概述前缀表达式(Prefix Notation)是指将运算符写在前面操作数写在后面的不包含括号的表达式,而且为了纪念其发明者波兰数学家Jan Lukasiewicz,所以前缀表达式也原创 2013-09-06 13:29:15 · 8379 阅读 · 2 评论 -
散列表
散列表的实现常常叫做散列(hashing).散列是一种用于以常数平均时间执行插入、删除和查找的技术。但是,那些需要元素间任何排序信息的操作将不会得到有效的支持。一般想法理想的散列表数据结构只不过是一个包含有关键字的具有固定大小的数组。我们把表的大小记作Table-Size,并将其理解为散列数据结构的一部分而不仅仅是浮动于全局的某个变量。通常的习惯让表从0到TableSize - 1原创 2013-07-19 14:51:04 · 1837 阅读 · 0 评论 -
C 内存分配
图示C内存分配程序代码区存放函数体的二进制代码全局数据区全局变量和静态变量的存储是放在一起的。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。常量数据存放在另一个区域里。这些数据在程序结束后由系统释放。我们所说的BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域翻译 2013-03-18 19:09:16 · 2975 阅读 · 5 评论 -
次小生成树
前言最近一直忙于各种校招笔试,好不容易能停下来做到ACM题目。(吐槽:身在传媒,各种二线互联网公司例如美团、爱奇异连笔试通知都没给,去霸笔感觉答的还行结果依旧没有面试通知,真蛋疼,浪费时间浪费精力)。这里记录一下我做次小生成树的过程,首先要有最小生成树的基础,我一般是用kruskal+并查集实现,参考链接:并查集思路次小生成树其实可通过对kruskal算法进行延伸得到,说简单点原创 2013-10-15 13:10:03 · 5466 阅读 · 0 评论 -
树的学习——(递归构建二叉树、递归非递归前序中序后序遍历二叉树、根据前序序列、中序序列构建二叉树)
前言最近两个星期一直都在断断续续的学习二叉树的数据结构,昨晚突然有点融汇贯通的感觉,这里记录一下吧题目要求给定前序序列,abc##de#g##f###,构建二叉树,并且用递归和非递归两种方法去做前序,中序和后序遍历二叉树的数据结构/** * 定义二叉树的数据结构 */struct btree{ char item; struct btree *lch原创 2012-12-29 10:46:55 · 10424 阅读 · 8 评论 -
并查集——用于不相交集合的数据结构
并查集并查集保持一组不相交的动态集合S={S1, S2, ..., SK}.每个集合通过一个代表来表示,代表即集合中的某个成员。并查集的精髓(即它的三种操作):集合中的每一个元素是由一个对象表示的,设x表示一个对象MAKE-SET(x)建立一个新的集合,其唯一成员(因而其代表)就是x。因为各个集合是不相交的,故要求x没有在其他集合中出现过。初始化后每一个元素的父亲节原创 2013-04-08 15:06:01 · 3446 阅读 · 2 评论 -
红黑树
目录目录前言二叉查找树插入删除小结红黑树树的旋转知识基础数据结构左旋右旋红黑树的插入情况一情况二情况三父节点p和叔叔节点u都是红色父节点p是红色但叔叔节点是黑色或者不存在父节点p是红色但叔叔节点是黑色或者不存在并且插入节点和父节点在一条直线上红黑树的删除情况一情况二情况三情况四情况五情况六前言学习Android Binder机制的时候,看到“宿主进程使原创 2015-05-20 20:30:36 · 4803 阅读 · 4 评论 -
链表的学习
起因记录一下自己线性表的学习过程,当年大学有老师讲的时候听的一塌糊涂,现在研究生二年级了,自己复习一下,总结一些对本科生可用的经验吧线性表的单链表存储结构//线性表的单链表存储结构(教科书恶心版)typedef struct lnode{ int data; struct lnode *next;}lnode, *linklist;我没资格抨击教科书这种书写方式,原创 2012-10-16 15:01:16 · 5221 阅读 · 14 评论 -
B树
用阶定义的B树B树又叫平衡多路查找树。一棵m阶的B树的特性如下:树中每个结点最多含有m个孩子(m >= 2)除根结点和叶子结点外,其它每个结点至少有ceil(m / 2)个孩子(ps:ceil(x)取x的上整数)若根结点不是叶子结点,则至少有2个孩子(特殊情况:没有孩子的根结点,即根节点为叶子结点,整棵树只有一个根结点)所有叶子都出现在同一层每个非终端结点中包含有n个关键字信息:(原创 2013-06-18 11:22:05 · 4270 阅读 · 4 评论 -
栈的学习
1.栈的定义栈(stack)是限制仅在表一端进行插入或删除操作的线性表。(1)通常称插入或删除的一端为栈顶(Top),另一端为栈底(Bottom)(2)当表中没有元素时称为空栈(3)栈为后进先出(last in first out)线性表,也称为LIFO表2.顺序栈顺序栈的类型定义#define stacksize 1000; //预分配的栈的空间最多为1000原创 2012-10-16 18:18:37 · 2305 阅读 · 4 评论 -
矩阵旋转——(c语言)
n阶矩阵旋转矩阵的顺时针旋转基本有四种情况:0度90度180度270度,相当于逆向的90度算法思路矩阵的计算主要是考虑下标之间的变换,先上一张我在纸上分析的图(ps:好大啊,没有压缩)以aij为例,i,j均从1开始计数90度旋转:列号变为行号(n - 行号 + 1)变成列号规律: a[i][j] = b原创 2013-01-17 19:07:33 · 29061 阅读 · 9 评论 -
最优二叉树&&哈夫曼编码
树的路径长度树的路径长度是从树根到树中每一结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。树的带权路径长度(weighted path length of tree,wpl)结点的权值:在一些应用中,赋予树中结点的一个有某种意义的实数、结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积树的带权路径长度(wpl):定义为树中所有结点的带原创 2013-01-04 11:15:54 · 5787 阅读 · 2 评论 -
堆排序
堆排序概述堆排序定义n个关键字序列k(1), k(2), ..., k(n)称为堆,当且仅当该序列满足如下性质(简称为堆性质)k(i) k(i) >= k(2i) && k(i) >= k(2i+1)若将此序列所存储的向量R[1..n]看做是一颗完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在原创 2013-02-25 23:28:41 · 2301 阅读 · 0 评论 -
哈夫曼树
前言学习贪心算法的时候复习了一下哈夫曼树的构造,这里记录一下,参考链接:http://blog.youkuaiyun.com/zinss26914/article/details/8461596主要是记录一道九度的哈夫曼树的题目题目题目描述:哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所原创 2013-02-17 23:46:34 · 2301 阅读 · 1 评论 -
优先级队列
前言用最大堆实现的最大优先级队列一般用来进行作业调度的问题用最小堆实现的最小优先级队列一般用于贪心等概念优先级队列是一种用来维护一组元素构成的集合S的数据结构,这一组元素中的每一个都有一个关键字key。这里以最大堆实现的最大优先级队列为例,支持如下操作:extract_max(A, n) : 去掉并返回A中的具有最大关键字的元素increase_原创 2013-02-26 16:13:25 · 2005 阅读 · 0 评论 -
队列的学习
定义队列(queue)是只允许在一端进行插入,在另一端进行删除的运算受限的线性表。允许插入的一端叫做队尾(rear)允许删除的一端叫做队头(front)当队列中没有元素时叫做空队列队列是一种先进先出的线性表,也称为FIFO表顺序队列顺序队列队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表顺序队列的表示顺序队列用一个向量原创 2012-10-28 16:45:27 · 2524 阅读 · 2 评论 -
图的单源最短路径算法
概述假如你有一张地图,地图上给出了每一对相邻城市的距离,从一个地点到另一个地点,如何找到一条最短的路?最短路算法要解决的就是这类问题。定义:给定一个有(无)向图,每一条边有一个权值w,给定一个起始点S和终止点T,求从S出发走到T的权值最小路径,即为最短路径。最短路径算法依赖一种性质:一条两顶点间的最短路径包含路径上其他最短路径。最简单的说就是:最短路径的子路径是最短路径。松原创 2013-04-23 23:56:05 · 3961 阅读 · 0 评论 -
字典树(c实现与Java实现)
概述字典树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高性质字典树的三个性质:根节点不包含字符,根节点外每一个节点都只包含一个字符从根节点到某一节原创 2013-10-14 21:42:29 · 2088 阅读 · 1 评论