![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 50
hello_bravo_
这个作者很懒,什么都没留下…
展开
-
堆排序
堆排序的基本思想:如果把待排序的数据元素集合构成一个完全二叉树结构,则每次选择出一个最大(或最小)的数据元素只需比较完全二叉树的数值为高度的次数,即log2n次,时间复杂度就是O(nlog2n)堆的两个性质: (1)最大堆的根节点是堆中值最大的数据元素,最小堆的根节点是堆中值最小的数据元素,称堆的根节点元素为堆顶元素。 (2)对于最大堆,从根节点到每个叶节点的路径上,数据元素组成的序列都是递减有原创 2016-10-22 10:49:12 · 346 阅读 · 0 评论 -
二叉树非递归三种遍历
非递归先序void nicePreOrder(treeNode* s)//非递归先序{ if (s == NULL) { return; } stack<treeNode*> st; while (s != NULL || !st.empty()) { while (s != NULL) {原创 2017-01-30 21:31:21 · 340 阅读 · 0 评论 -
数据结构(面试)
看了剑指offer发现一个问题有好多种思路去解决,之前自己考虑的都太普遍性,应当多样化的来思考问题 最深体会:写出实现功能的代码,和写出优异的代码是两回事! 1.链表的倒叙打印 (1)是否可以改变链表结构,可以改变就改变以后打印 (2)不允许改变链表结构可以直接使用循环,但是时间复杂度会是O(n) (3)使用栈来存储,那么就会简单很多,只需要O(n)的时间复杂度 (4)由递归和循环的关系原创 2016-12-28 20:23:04 · 683 阅读 · 0 评论 -
数据结构--图
图:一种新的非线性数据结构,在图结构中,数据元素之间的关系是多对多的,即如果任选一个结点作为初始结点,则途中任意一个结点有多个前驱结点和多个后继结点。两种图: (1)有向图: n个结点的图中 有n(n-1)条边,任意两个节点之间有方向相反的两条边,则称此图为有向完全图 (2)无向图 n个结点的图中 有n(n-1)/2条边,任意两个结点之间有且只有一条边,则称此图为无向完全图。原创 2016-10-31 22:43:09 · 470 阅读 · 0 评论 -
数据结构--哈希表
概念:如果我们构造一个查找表,是数据源怒刷的存放位置和数据元素的关键字之间存在某种对应关系,则我们可以直接由数据元素的关键字得到该数据元素的存放位置,这样的查找表就是哈希表哈希函数:我们把数据元素的关键字和该数据元素的存放位置之间的映射函数称为哈希函数(哈希表是通过哈希函数来确定数据元素存放位置的一种特殊表结构)哈希冲突:对于两个关键字Ki和kj他们的映射h(Ki)==h(Kj)这就叫做哈原创 2016-10-17 16:43:55 · 433 阅读 · 2 评论 -
数据结构:二叉树
之前自己看书去写了个二叉树,现在看来写的简直误人子弟。。。所以删了,决定重新写一篇。 二叉树:关于二叉树的学习过程中我的感悟最深的就是你要学好二叉树,那么前提你必须把递归掌握熟练,所以说递归对于二叉树来说至关重要。 关于二叉树的结点结构,需要一个数据域,两个指针域typedef struct BtNode{BtNode *leftchild;BtNode *righ原创 2016-07-28 10:25:38 · 379 阅读 · 0 评论 -
AVL树(平衡二叉树)的构造
特点:平衡二叉树要求对于每一个节点来说,他的左右子树的高度之差不超过1,如果插入或者删除一个结点使得高度之差大于1,就要进行节点之间的旋转(左旋或者右旋),将二叉树重新维持在一个平衡状态。 解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最坏和最好情况都维持在O(logN)。 旋转缺点:频繁旋转会牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了许多。平衡二叉树原创 2016-10-27 19:27:52 · 5483 阅读 · 3 评论 -
哈夫曼树--最优二叉树
哈夫曼树,又称最优树,是一类带权路径长度最短的树。 路径:从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径 路径长度:路径上的分支数目称作路径长度 树的路径长度:从树根到每一个每一个结点的路径长度之和。 结点的带权路径长度:从该结点到树根之间的路径长度与结点上权的乘积。 树的带权路径长度:树中所有叶子结点的带权路径长度之和上图中 结点对应的路径如下: a:0 b:10原创 2016-10-13 19:57:16 · 627 阅读 · 0 评论 -
数据结构特性总结(1)
对数据结构已经能够做到自己实现的人可以接下来去考虑数据结构的特性和应用了线性表:是一种可以在任意位置进行插入和删除数据元素操作的,由n(n>=0)个相同类型数据元素a0,a1,a2,...,an-1组成的线性结构(1)顺序存储结构:效率分析:顺序表上的插入和删除是顺序表中时间复杂度最高的成员函数。(有顺序的插入所以需要比较,无顺序的插入不予考虑)原创 2016-10-15 11:23:32 · 521 阅读 · 0 评论 -
数据结构学习感悟
数据结构渐进式学习 数据结构毫无疑问的是在编程上非常重要的一部分内容,在我的学习过程中,我经历了迷茫,入门,熟悉等阶段,我以个人经历为例子,讲解一下我对数据结构从惧怕到熟悉的过程。 我是一个学习编程主动性很强的人,大二上学期,我知道了数据结构这门课程对于编程的重要性,加上自己自学完了C语言,就开始在网络上查找资料学习数据结构了,一开始光靠自己看,进度真的很慢很慢,一开始原创 2016-10-14 10:29:30 · 6016 阅读 · 2 评论 -
数据结构--线索树
线索树的构造思路 (1)首先构造出一棵二叉树 (2)然后将二叉树线索化(1.中序2.先序3.后序)关于二叉树的建立(方法之一) (1)用一个字符串来表示二叉树上的元素,其中’#’代表无效结点,然后可以根据自己的需求来调整字符串顺序 char *str = “ABC##DE##F##G#H##”;希望构建中序遍历是 C B E D F A G H 先序遍历 A B C D E F GH原创 2016-10-23 16:42:20 · 655 阅读 · 0 评论 -
根据顺序构造二叉树
https://leetcode-cn.com/problemset/all/?search=%E5%89%8D%E5%BA%8F105 前序中序106 中序后序889 前序后序//前序中序func pre_order(leftpre,rightpre,leftin,rightin int,pre,in []int) *TreeNode{ if leftpre>r...原创 2019-09-11 22:09:11 · 568 阅读 · 0 评论