数据结构与算法分析
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
华绪1024
我喜欢程序员,他们单纯、固执、容易体会到成就感;
面对压力,能够挑灯夜战不眠不休;
面对困难,能够迎难而上挑战自我。
他们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。
我想说的是,其实我是一个程序员
展开
-
数据结构 No.1 数组
数组 所谓数组,是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。数组是用于储存多个相同原创 2018-01-24 16:31:23 · 203 阅读 · 0 评论 -
数据结构 No.2 简单排序
排序 在计算机科学与数学中,一个排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定排序方式进行排列的一种算法。最常用到的排序方式是数值顺序以及字典顺序。有效的排序算法在一些算法(例如搜索算法与合并算法)中是重要的,如此这些算法才能得到正确解答。排序算法也用在处理文字数据以及产生人类可读的输出结果。基本上,排序算法的输出必须遵守下列两个原则:原创 2018-01-25 09:23:33 · 263 阅读 · 0 评论 -
数据结构 No.3 栈、队列
引言 昨天晚上看到一篇文章,写的是程序猿的个人生涯,其中包括GitHub上被star了多少代表代码能力,动手能力什么,自己的技术博客代表一个人的表达能力,总结能力等,所以决定以后的一些文章要尽量自己去写,可以参考一些文档,看到比较好的文章转载就一个字也不要变。尊重原创栈 堆栈(英语:stack)又称为栈或堆叠,是计算机科学中一种特殊的串列形式的抽象资料型别,其特殊原创 2018-01-26 17:08:14 · 275 阅读 · 0 评论 -
数据结构 No.4 链表
定义链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。简介链表中最原创 2018-01-30 09:27:34 · 174 阅读 · 0 评论 -
数据结构 No.5 双向链表
概念双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。 所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。 一般我们都构造双向循环链表。解释每个节点有两个连接:一个指向前一个节点,(当此“连接”为第一个“连接”时,指向空值或者空列表);而另一个指向下一个节点,(当此“连接”为最后一个“连接”时,指向空原创 2018-02-02 10:36:12 · 268 阅读 · 0 评论 -
数据结构 No.6 java递归的简单应用
定义语言例子从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’”一只狗来到厨房,偷走一小块面包。厨子举起杓子,把那只狗打死了。于是所有的狗都跑来了,给那只狗掘了一个坟墓,还在墓碑上刻了原创 2018-02-05 11:03:31 · 180 阅读 · 0 评论 -
数据结构 No.7 java递归汉诺塔问题
汉诺塔来源及应用相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。原创 2018-02-05 11:33:02 · 285 阅读 · 0 评论 -
数据结构 No.8 插入排序 希尔排序
比较名称数据对象稳定性时间复杂度额外空间复杂度描述平均最坏冒泡排序数组{\displaystyle O(n^{2})}{\displaystyle O(1)}(无序区,有序区)。从无序区通过交换找出最大元素放到有序区前端。选择排序数组{\displaystyle O(n^{2})}{\displaystyle O(1)}(有序区,无序区)。在无序区里找一个最小的元素跟在有序区的后面。对数组:比较得...原创 2018-03-27 16:17:56 · 181 阅读 · 0 评论 -
数据结构 No.9 二叉树入门
定义 在计算机科学中,二叉树(英语:Binary tree)是每个节点最多只有两个分支(不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”和“右子树”。二叉树的分支具有左右次序,不能颠倒。二叉树的第层至多拥有个节点数;深度为的二叉树至多总共有个节点数(定义根节点所在深度 ),而总计拥有节点数匹配的,称为“满二叉树”;深度为有个节点的二叉树,当且仅当其中的每一节点,都可以和同样...原创 2018-02-27 17:38:42 · 298 阅读 · 2 评论 -
数据结构 No.10 遍历二叉树
定义所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。算法实现历方案从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:⑴访问结点本身(N),⑵遍历该结点的左子树(L),...原创 2018-03-19 20:12:23 · 240 阅读 · 0 评论 -
数据结构 No.11 删除二叉树
引言 删除节点是二叉树操作中最复杂的。在删除之前首先要查找要删除的点。找到节点后,这个要删除的节点可能会有三种情况需要考虑。1、这个节点是叶子节点,没有子节点。 这个时候要删除叶子节点,只需要改变改节点的父节点的引用值,将指向该节点的引用设置为null。就可以了2、该节点有一个子节点。 改变父节点的引用,将其直接指向要删除节点的子节点3、该节点有两个子节点 要删除有两个子节点...原创 2018-03-22 10:53:02 · 357 阅读 · 0 评论 -
数据结构 No.12 这里是红黑树 了解一下
为了能以较快的时间O(logN)来搜索一棵树,需要保证树总是平衡的(或者至少大部分是平衡的),这就是说对树中的每个节点在它左边的后代数目和在它右边的后代数目应该大致相等。红-黑树的就是这样的一棵平衡树,对一个要插入的数据项,插入例程要检查会不会破坏树的特征,如果破坏了,程序就会进行纠正,根据需要改变树的结构,从而保持树的平衡。那么红-黑树都有哪些特征呢?1.红-黑树的特征 它主要有两...转载 2018-03-29 16:05:50 · 205 阅读 · 0 评论 -
数据结构 No.13 哈希表
简介: 这里先说一下哈希表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方,说起来可能感觉有点复杂,我想我举个例子你就会明白了,最典型的的例子就是字典,大家估计小学的时候也用过不少新华字典吧,如果我想要获取“按”字详细信息,我肯定会去根据拼音an去查找 拼音索引(当然也可以是偏旁索引),我们首先去查an在字典的位置,查了一下得到“安”...原创 2018-04-10 17:27:04 · 291 阅读 · 0 评论 -
数据结构 No.14 图
概念 图:众所周知图是数据结构中非常重要的一种结构,而且也是比较复杂的。因为在图形结构中,节点间的关系可以是任意的,近几年来图在许多行业迅速发展,所以总的来说掌握图是很重要的。基本概念顶点(Vertex)图的数据元素弧(Arc) 图的边(其中在有向图中有弧头(Head)和弧尾(Tail)即一条边的起点和终点)无向图图中的边没有方向的指向有向图图中的边有方向完全图有1/2*n(n-...原创 2018-04-11 16:24:50 · 216 阅读 · 0 评论