
数据结构
关于数据结构的学习心得
Monster_Girl
对互联网充满兴趣,乐于学习新事物
展开
-
面试题50:求二叉树中两个节点的最近公共祖先
在数据结构中,二叉树是一个比较复杂的数据结构。在面试的时候,很多面试官喜欢通过二叉树来考察一个程序猿的逻辑、代码等基本功。最近正好在看《剑指offer》,并且学习了二叉树的一些相关知识。在《剑指offer》的第50题,求二叉树中两个节点的最近公共祖先。原创 2017-05-06 10:32:34 · 1099 阅读 · 1 评论 -
链表的K组翻转问题
在这两天的刷题中,遇到一个求链表的翻转问题,坦白讲,这个问题我想得思路有很多种,但在这么多种的思路中,没有一个是能够轻易实现的。题目如下。 链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6。原创 2017-08-03 18:04:59 · 652 阅读 · 0 评论 -
栈与队列及面试题
学数据结构的时候,我们总会遇到栈和队列,今天就说说栈和队列的异同。相同点: 1. 都是线性结构 2. 操作模式存在限制 重点内容 3. 都可以通过顺序表和链表进行结构实现 4. 插入删除的时间复杂度相同(都是O(1)),空间复杂度也相同不同点: 1. 栈是后进先出原则,而队列是先进先出 2. 栈只允许在末端进行插入删除,而队列是在队首进行插入删除他们的不同点也就决...原创 2018-03-05 12:03:57 · 442 阅读 · 0 评论 -
面试题30:最小的K个数及topK问题的解决
最近刷题老会被问到一些topK问题,今天把这些问题的解决方案整理一下。题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。原创 2017-08-19 21:09:15 · 1155 阅读 · 0 评论 -
八大排序算法之交换排序
在之前的两篇博客中,我们分别说了插入排序和选择排序,有兴趣的同学还可以戳链接去看看八大排序算法之选择排序、八大排序算法之插入排序。交换排序主要说得是冒泡排序和快速排序,思想就和名字一样是用交换来实现的。原创 2017-08-18 17:49:01 · 1352 阅读 · 0 评论 -
八大排序算法之选择排序
上篇博客我们说了八大排序算法其中的插入算法—直接插入和希尔排序,有兴趣的同学可以移步至八大排序算法之插入算法进行查看。那么今天我们来说说选择排序。常用的选择排序有直接选择排序和堆排序,选择排序的思想呢,是从每一趟(比如第i趟)在后面n-i个待排序对象中选出关键码最小的对象,作为有序对象序列的第i个对象。当n-2趟排完时,待排序对象只剩下最后一个关键码时就不用在进行选择了。原创 2017-08-16 20:07:15 · 993 阅读 · 0 评论 -
堆的实现及堆排序
前两天刷笔试题,判断一个数组的序列可以构成堆。仔细想了想,脑海里几乎已经遗忘了堆的知识,今天又重新去看书,把堆的知识总结一下。原创 2017-08-13 18:06:28 · 519 阅读 · 0 评论 -
有关二叉树的遍历问题
遍历二叉树指的是,按某条搜索路径巡访树中的每个结点,使得每个结点均被访问一次,且仅被访问一次。在二叉树的遍历中最常见的遍历有三种:前序遍历、中序遍历、后序遍历。原创 2017-03-18 20:57:26 · 800 阅读 · 0 评论 -
二叉树的线索化
在上篇博文中我们说到有关二叉树的遍历问题,将树中的所有结点按照某种次序排列在一个线性有序的序列中,然后从某个结点出发就会可以轻易找到在某种次序下的前驱和后继。然而当我们希望快速找到某一结点的前驱后继,同时又不希望对二叉树进行遍历时,这时就需要一个东西去把每个结点的前驱后继记录保存起来。为了做到这一点,数据结构引出一个概念叫线索。原创 2017-03-29 12:55:04 · 486 阅读 · 0 评论 -
红黑树的算法实现
在搜索树的大家族里,红黑树算是用途最广泛的一个代表了。在我们使用的C++STL库中,set、map都是以它作为底层去实现的。当然在一些其他的地方,比如Java集合中的TreeSet和TreeMap,还有Linux虚拟内存的管理,也是通过红黑树去实现的。原创 2017-04-24 11:46:12 · 678 阅读 · 0 评论 -
搜索二叉树的算法实现
搜索二叉树,又叫排序二叉树、二叉查找树。它是一棵空树或者具有以下性质: 1. 每个结点上都有作为搜索依据的关键码,所在结点的关键码互不相同。 2. 左子树上的所有结点小于根结点。 3. 右子树上的所有结点大于跟结点。 4. 左右子树都可以看成搜索二叉树。原创 2017-03-30 14:40:11 · 819 阅读 · 1 评论 -
有关二叉树的遍历问题非递归
最近在刷题,经常会遇到一些树的遍历问题。在之前也写过博客详细讲解二叉树遍历问题的递归实现,可以戳有关二叉树的遍历问题去瞅瞅。这篇博客主要想整理一下非递归的实现及遍历思想。原创 2017-08-07 10:31:05 · 542 阅读 · 0 评论 -
单链表的C语言实现
在学习数据结构中,紧接着顺序表接触的就是单链表,那么单链表是什么呢? 1.什么是单链表? 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。原创 2016-12-09 18:53:20 · 965 阅读 · 0 评论 -
链表面试题总结(一)
上一篇文章中简单地对单链表一些功能的实现进行说明,感兴趣的小伙伴可以戳链接看一下之前的博客——单链表的C语言实现。在我们面试中,单链表也是面试官比较感兴趣的地方。那么今天,我们就将单链表面试题总结一下。原创 2016-12-13 01:57:20 · 827 阅读 · 0 评论 -
八大排序算法之插入排序
在数据结构中,排序是处理数据中经常用到 ,而排序又分为内排序和外排序。内排序指的是排序期间,数据全部放在内存中进行排序;而外排序则是因为在排序期间全部对象个数太多,不能同时放在内存中,在排序的过程中不断进行内外存之间移动的排序。选择合适排序算法这个时候就非常重要,可以帮助我们减少时间、空间等一些可避免的开销。原创 2017-05-11 19:29:15 · 565 阅读 · 0 评论 -
链表面试题总结(二)
昨天总结了一部分基础的面试题,有兴趣的小伙伴可以戳链接去看看链表面试题总结(一)。今天想要总结的是链表面试题的升级部分,关于链表带环部分和相交部分。原创 2016-12-14 23:27:28 · 759 阅读 · 0 评论 -
用C语言实现顺序表的增删查改和逆置
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。原创 2016-09-08 12:00:57 · 2844 阅读 · 0 评论