2015年11月10日

摘要: 前面我们谈到了排序二叉树,还没有熟悉的同学可以看一下这个,二叉树基本操作、二叉树插入、二叉树删除1、删除2、删除3。但是排序二叉树也不是没有缺点,比如说,如果我们想在排序二叉树中删除一段数据的节点怎么办呢?按照现在的结构,我们只能一个一个数据查找验证,首先看看在不在排序二叉树中,如果在那么删除;如果... 阅读全文
posted @ 2015-11-10 16:01 acodewarrior 阅读(237) 评论(0) 推荐(0) 编辑
摘要: hash表,有时候也被称为散列表。个人认为,hash表是介于链表和二叉树之间的一种中间结构。链表使用十分方便,但是数据查找十分麻烦;二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果。hash表既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。 打个比方来说,所有的数据就好像... 阅读全文
posted @ 2015-11-10 15:58 acodewarrior 阅读(816) 评论(0) 推荐(0) 编辑
摘要: 从一堆数据中挑选n个最大的数,这个问题是网上流传的比较广的几个问题之一。具体来说,它的意思就是:假设我们有100个数据,我们需要挑选出最大的n个数据(n length) return; for(outer = length -1; outer > (length - 1 - number); ... 阅读全文
posted @ 2015-11-10 15:57 acodewarrior 阅读(2560) 评论(0) 推荐(0) 编辑
摘要: 八皇后是一道很具典型性的题目。它的基本要求是这样的:在一个8*8的矩阵上面放置8个物体,一个矩阵点只允许放置一个物体,任意两个点不能在一行上,也不能在一列上,不能在一条左斜线上,当然也不能在一条右斜线上。 初看到这道题目,大家的第一印象是遍历,但是经过实践之后发现遍历其实不好写,而且复杂度很低。不仅... 阅读全文
posted @ 2015-11-10 15:56 acodewarrior 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 在数学中,有一些数据选择的内容。举个例子来说,有这样一组数据:1、2、3、4。现在我们打算从中挑选出1个数据,那么有几种选择呢?结果应该是1、2、3、4;那么如果挑选2个数据呢,怎么选呢?那么结果应该是12、13、14、15。以此类推,我们还能挑选出3个数据、4个数据的情况。 那么,在程序上面应该怎... 阅读全文
posted @ 2015-11-10 15:55 acodewarrior 阅读(521) 评论(0) 推荐(0) 编辑
摘要: 基数排序是另外一种比较有特色的排序方式,它是怎么排序的呢?我们可以按照下面的一组数字做出说明:12、 104、 13、 7、 9 (1)按个位数排序是12、13、104、7、9 (2)再根据十位排序104、7、9、12、13 (3)再根据百位排序7、9、12、13、104 这里注意,如果在某一位的... 阅读全文
posted @ 2015-11-10 15:54 acodewarrior 阅读(900) 评论(0) 推荐(0) 编辑
摘要: 在面试环节中,有一道题目也是考官们中意的一道题目:如果统计一段由字符和和空格组成的字符串中有多少个单词? 其实,之所以问这个题目,考官的目的就是想了解一下你对状态机了解多少。 (1) 题目分析 从题目上看,如果对一个字符串进行处理,那么可以有下面几种情形:初始状态,字符状态,空格状态,结束状态。那么... 阅读全文
posted @ 2015-11-10 15:52 acodewarrior 阅读(2035) 评论(0) 推荐(0) 编辑
摘要: 选择排序是和冒泡排序差不多的一种排序。和冒泡排序交换相连数据不一样的是,选择排序只有在确定了最小的数据之后,才会发生交换。怎么交换呢?我们可以以下面一组数据作为测试: 2, 1, 5, 4, 9 第一次排序:1, 2, 5, 4, 9 第二次排序: 1, 2, 5, 4, 9 第三次排序: 1, 2... 阅读全文
posted @ 2015-11-10 15:52 acodewarrior 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 前两天上网的时候看到一个特别有意思的题目,在这里和朋友们分享一下: 有一个人准备开始爬楼梯,假设楼梯有n个,这个人只允许一次爬一个楼梯或者一次爬两个楼梯,请问有多少种爬法? 在揭晓答案之前,朋友们可以自己先考虑一下: 这个人爬n层楼梯,那么它也不是一下子就可以爬这么高的,他只有两个选择,要么从n-2... 阅读全文
posted @ 2015-11-10 15:51 acodewarrior 阅读(3243) 评论(0) 推荐(0) 编辑
摘要: 相比较节点的添加,平衡二叉树的删除要复杂一些。因为在删除的过程中,你要考虑到不同的情况,针对每一种不同的情况,你要有针对性的反应和调整。所以在代码编写的过程中,我们可以一边写代码,一边写测试用例。编写测试用例不光可以验证我们编写的代码是否正确,还能不断提高我们开发代码的自信心。这样,即使我们在开发过... 阅读全文
posted @ 2015-11-10 15:49 acodewarrior 阅读(662) 评论(0) 推荐(0) 编辑
摘要: 二叉树的节点插入比较简单。一般来说,二叉树的插入主要分为以下两个步骤: 1) 对当前的参数进行判断,因为需要考虑到头结点,所以我们使用了指针的指针作为函数的输入参数 2) 分情况讨论: 如果原来二叉树连根节点都没有,那么这个新插入的数据就是根节点; 如果原来的二叉树有根节点,那我们判断这个数... 阅读全文
posted @ 2015-11-10 15:46 acodewarrior 阅读(568) 评论(0) 推荐(0) 编辑
摘要: 前面我们讲过双向链表的数据结构。每一个循环节点有两个指针,一个指向前面一个节点,一个指向后继节点,这样所有的节点像一颗颗珍珠一样被一根线穿在了一起。然而今天我们讨论的数据结构却有一点不同,它有三个节点。它是这样定义的:typedef struct _TREE_NODE{ int data; stru... 阅读全文
posted @ 2015-11-10 15:45 acodewarrior 阅读(718) 评论(0) 推荐(0) 编辑
摘要: 链表逆转是面试环境中经常遇到的一道题目,也是我们在实际开发中可能会遇到的开发需求。和线性逆转不一样,单向链表的节点需要一个一个进行处理。为了显示两者之间的区别,我们分别对线性内存和链表进行逆转: (1)普通连续内存数据的反转分析STATUS normal_revert(int array[], in... 阅读全文
posted @ 2015-11-10 15:43 acodewarrior 阅读(562) 评论(0) 推荐(0) 编辑
摘要: 前面的博客中,我们曾经有一篇专门讲到单向链表的内容。那么今天讨论的链表和上次讨论的链表有什么不同呢?重点就在这个"循环"上面。有了循环,意味着我们可以从任何一个链表节点开始工作,可以把root定在任何链表节点上面,可以从任意一个链表节点访问数据,这就是循环的优势。 那么在实现过程中,循环单向链表有什... 阅读全文
posted @ 2015-11-10 15:42 acodewarrior 阅读(446) 评论(0) 推荐(0) 编辑
摘要: 前面的博客我们介绍了单向链表。那么我们今天介绍的双向链表,顾名思义,就是数据本身具备了左边和右边的双向指针。双向链表相比较单向链表,主要有下面几个特点: (1)在数据结构中具有双向指针 (2)插入数据的时候需要考虑前后的方向的操作 (3)同样,删除数据的是有也需要考虑前后方向的操作 那么,一个非循环... 阅读全文
posted @ 2015-11-10 15:40 acodewarrior 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 有的时候,处于内存中的数据并不是连续的。那么这时候,我们就需要在数据结构中添加一个属性,这个属性会记录下面一个数据的地址。有了这个地址之后,所有的数据就像一条链子一样串起来了,那么这个地址属性就起到了穿线连结的作用。 相比较普通的线性结构,链表结构的优势是什么呢?我们可以总结一下: (1)单个节点创... 阅读全文
posted @ 2015-11-10 15:39 acodewarrior 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 前面我们讲到了队列,今天我们接着讨论另外一种数据结构:堆栈。堆栈几乎是程序设计的命脉,没有堆栈就没有函数调用,当然也就没有软件设计。那么堆栈有什么特殊的属性呢?其实,堆栈的属性主要表现在下面两个方面: (1)堆栈的数据是先入后出 (2)堆栈的长度取决于栈顶的高度 那么,作为连续内存类型的堆栈应该怎... 阅读全文
posted @ 2015-11-10 15:38 acodewarrior 阅读(359) 评论(0) 推荐(0) 编辑
摘要: 这里的线性结构实际上指的就是连续内存的意思,只不过使用“线性”这个词显得比较专业而已。前面一篇博客介绍了现象结构的处理方法,那么在这个基础之上我们是不是添加一些属性形成一种新的数据结构类型呢?答案是肯定的,队列便是其中的一种。 队列的性质很简单: (1)队列有头部和尾部 (2)队列从尾部压入数据 ... 阅读全文
posted @ 2015-11-10 15:37 acodewarrior 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 我们知道,在内存中的空间都是连续的。也就是说,0x00000001下面的地址必然是0x00000002。所以,空间上是不会出现地址的突变的。那什么数据结构类型是连续内部空间呢,其实就是数组,当然也可以是堆。数组有很多优势,它可以在一段连续空间内保存相同类型的数据,并且对这些数据进行管理。所以从这个... 阅读全文
posted @ 2015-11-10 15:36 acodewarrior 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 堆排序是另外一种常用的递归排序。因为堆排序有着优秀的排序性能,所以在软件设计中也经常使用。堆排序有着属于自己的特殊性质,和二叉平衡树基本是一致的。打一个比方说,处于大堆中的每一个数据都必须满足这样一个特性: (1)每一个array[n] 不小于array[2*n] (2)每一个array[n]不小... 阅读全文
posted @ 2015-11-10 15:35 acodewarrior 阅读(204) 评论(0) 推荐(0) 编辑

导航