
数据结构与算法
文章平均质量分 81
奔跑de五花肉
这个作者很懒,什么都没留下…
展开
-
顺序表 线性表 数组的区别
数组就是相同数据类型的元素按一定顺序排列的集合。一句话:就是物理上存储在一组联系的地址上。也称为数据结构中的物理结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。一句话:线性表是数据结构中的逻辑结构。可以存储在数组上,也可以存储在链表上。 顺序存的结点按逻辑次序依次存放在一组地址连续的存储单元里的原创 2016-04-03 16:57:31 · 662 阅读 · 0 评论 -
二叉树中序前序序列(或后序)求解树
这种题一般有二种形式,共同点是都已知中序序列。如果没有中序序列,是无法唯一确定一棵树的。已知二叉树的前序序列和中序序列,求解树。1、确定树的根节点。树根是当前树中所有元素在前序遍历中最先出现的元素。2、求解树的子树。找出根节点在中序遍历中的位置,根左边的所有元素就是左子树,根右边的所有元素就是右子树。若根节点左边或右边为空,则该方向子树为空;若根节点边和右边都为空,转载 2016-05-05 21:20:43 · 666 阅读 · 0 评论 -
平衡二叉查找树 [AVL]
在谈论二叉查找树的效率的时候,不同结构的二叉查找树,查找效率有很大的不同(单支树结构的查找效率退化成了顺序查找)。如何解决这个问题呢?关键在于如何最大限度的减小树的深度。正是基于这个想法,平衡二叉树出现了。 平衡二叉树的定义 (AVL—— 发明者为Adel'son-Vel'skii 和 Landis) 平衡二叉查找树,又称 AVL树。 它除了具备二叉查找树的基本特征转载 2016-04-19 22:20:38 · 471 阅读 · 0 评论 -
面试中的二叉树问题总结【Java版】
package Algorithms.tree;import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Queue;import java.util.Stack;/** * REFS: *转载 2016-04-19 21:45:34 · 584 阅读 · 0 评论 -
无处不在的二分查找
我们都知道二分查找算法,实际上二分查找以及其扩展应用是很广泛的。这里收集了一些和二分查找有关的有趣问题。强烈建议大家看完问题后最小化浏览器,先尝试自己去解决,然后再看代码,问题都不是太难。问题1描述给一个已经排序的数组,其中有N个互不相同的元素。要求使用最小的比较次数找出其中的一个元素。(你认为二分查找在排序数组里找一个元素是最优的算法的吗?)不需要太多的理论,这是转载 2016-04-07 09:59:52 · 307 阅读 · 0 评论 -
[经典排序算法][集锦]
经典排序算法 经典排序算法,以下文章参考了大量网上的资料,大部分都给出了出处这一系列重点在理解,所以例子什么的都是最简单的情况,难免失误之处,多指教大多数排序算法都给出了每一步的状态,以方便初学者更容易理解,通俗易懂,部分难以理解的排序算法则给出了大量的图示,也算是一个特色吧经典排序算法 - 快速排序Quick sort 经典排序算法 - 桶排序Bu转载 2016-04-06 16:38:02 · 329 阅读 · 0 评论 -
贪心算法基本思想和典型例题
一、算法思想贪心法的基本思路:——从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。该算法存在问题:1. 不能保证求得的最后解是最佳的;2. 不能用来求最大或最小解问题;3. 只能求满足某些约束条件的可行解的范围。实现该算法的过程:从问题的某一初始解出发;while 能朝给定总目标前进一步 do 求出可...原创 2016-04-06 10:32:56 · 9559 阅读 · 0 评论 -
图的理解:深度优先和广度优先遍历及其 Java 实现
遍历图的遍历,所谓遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略:深度优先遍历广度优先遍历深度优先深度优先遍历,从初始访问结点出发,我们知道初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点。总结起来可以这样说:每次都在访问完当前结点原创 2016-03-16 23:11:23 · 420 阅读 · 0 评论 -
魔术师发牌问题和拉丁方阵问题
本节引言:本节继续带来的是循环链表的两个经典例子,分别是魔术师发牌问题和拉丁方阵问题!1.魔术师发牌问题问题描述:魔术师利用一副牌中的13张黑桃牌,预先将他们排好后叠放在一起,牌面朝下。对观众说:“我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?现场演示。”魔术师将牌堆最上面的哪张排数为1,把他翻过来正好是黑桃A,将黑桃A从牌堆抽出放在原创 2016-04-03 17:35:34 · 800 阅读 · 0 评论 -
求素数的算法
注意: 如果没有特殊说明, 以下讨论的都是针对n为素数时的时间复杂度1. 根据概念判断:如果一个正整数p 只有两个因子, 1和p,则称p为素数.代码:bool isPrime(int n){ if(n < 2) return false; for(int i = 2; i < n; ++i) if(n%i == 0)原创 2016-04-03 17:26:39 · 346 阅读 · 0 评论 -
栈、堆栈、堆、队列,它们之间的关系
堆栈和栈就是一个概念!!!队列是先进先出:就像一条路,有一个入口和一个出口,先进去的就可以先出去。而栈就像一个箱子,后放的在上边,所以后进先出。(堆和它们不同,不存在是先进后出还是先进先出)1.栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FIFO的特性,在编译的时候可以指定需原创 2016-04-03 17:03:37 · 602 阅读 · 0 评论 -
经典排序算法系列7----堆与堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总原创 2016-04-21 15:55:09 · 1663 阅读 · 0 评论