
数据结构
evanoma
d-y-chp@live.cn
展开
-
递归
栈的应用:递归 将函数的调用位置,局部变量和寄存器等信息作为1种称作激活记录的数据结构。(图P147和P148) 用通用方法将大型问题简化为类似性质但规模更小的问题。 一直递归直到将子问题简化到无需递归即可解答。关键步骤:确定普遍使用的划分原则 停止规则:确定算法能够处理特例,例如什么不做时能正常返回。 递归函数执行关键步骤直到符合停止规则将指令放在一个区域,将其他数据放在每个用户独立的区原创 2017-09-12 20:58:58 · 289 阅读 · 0 评论 -
排序
有序表: 按键检索 按键插入 查找树 分支:键比较的结果 高度:(最坏)循环次数 外部路径长度E: 遍历从根到树中每个树叶所经历的分支数(不是节点数) 内部路径长度I: 遍历从根到树中每个非树叶所经历的分支数(不是节点数) E=I+2q(非树叶的顶点数目) 由于树每层的最大结点数是其上一层的2倍。所以第t层的最大节点数为2^t。所以当第t层有k个节点,t≥lg k。 注意...原创 2017-09-28 12:32:32 · 280 阅读 · 0 评论 -
图
邻接链表:稀疏图 邻接矩阵:稠密图 深度优先遍历:栈 广度优先遍历:队列 时间复杂度为Θ(V+E) 使用map实现邻接链表。使用set标记遍历过的节点。 https://github.com/EVANOMA/nonlinear-structure 拓扑排序: 例如课程的学习具有先后顺序,在修课程B前需要预修课程A。 需要用vector记录每个节点的入度(为0表示没有前驱节...原创 2018-04-23 10:29:33 · 154 阅读 · 0 评论 -
散列表
在关键字范围远大于元素个数时,减少储存空间的大小。 关键字通过散列函数计算出相应的下标。 散列函数:尽量将每个关键字散列到所有的位置 装填因子α:表示平均储存元素。当需要插入的元素个数为n,散列表的槽位数为m。α=n/m 链地址:相同的放在同一链表中 最坏情况:全部在同一个槽,查找的时间复杂度为Θ(n) 平均情况:计算的复杂度为O(1),在平均情况下,1次查找成功的复杂度为O(1+α)...原创 2018-04-24 08:13:31 · 277 阅读 · 0 评论 -
面经
二叉树的镜像 写代码的时候要考虑到各种情况。包括NULL,只有一个结点,普通二叉树,二叉树所有结点只有左结点/右结点等。针对下面几种情况都要满足需求。 void MirrorRecursively(TreeNode *pRoot) 2 { 3 if((pRoot == NULL) || (pRoot->left == NULL && pRoot->rig...原创 2018-03-10 12:10:29 · 172 阅读 · 0 评论 -
树
深度: 从根到节点路径的长度 树的每一层包含了同一深度的所有节点 高度: 根到叶节点最长的路径 树中节点的最大深度原创 2018-04-23 09:35:44 · 163 阅读 · 0 评论 -
查找
查找: 性能主要取决于键比较的次数 平均次数:所有可能的(按照程序中的所有分支情况)键比较次数除以元素个数 查找树 分支:键比较的结果 高度:循环次数 外部路径长度E: 遍历从根到树中每个树叶所经历的分支数(不是节点数) 内部路径长度I: 遍历从根到树中每个非树叶所经历的分支数(不是节点数) E=I+2q(非树叶的顶点数目) 由于树每层的最大结点数是其上一层的2倍。所以第t层的最大节点数为2^原创 2017-09-20 08:45:36 · 631 阅读 · 0 评论