![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
菜鸟也有梦想啊
这个作者很懒,什么都没留下…
展开
-
数据结构学习之路四
递归的玩法递归的经典模型就是斐波那契数列和汉诺塔。具体的原理已经到处都是,我们直接从带代码开始看斐波那契数列public class Fibonacci { public static int getNumbe...原创 2019-04-25 21:56:05 · 109 阅读 · 0 评论 -
树(一)
二叉树为什么使用树:因为有序数组的方法插入、删除太慢(查找快) 链表查找慢(插入、删除快)树:快速查找、删除、插入路径:顺着连接节点的边从一个节点到另一个节点走过...原创 2019-04-30 11:14:27 · 132 阅读 · 0 评论 -
树(二)
树的基本操作:插入、查找插入从根节点开始查找,这个节点将成为新插入节点的父节点,父节点找到后,判断新节点的值比父节点的值得大小判断连接到左子节点还是右子节点查找从根节点开始查找,如果查找的节点值比当前节点值小,则继续查找左子节点否则查找右子节点 //定义数据项及初始化 /* *...原创 2019-04-30 11:22:37 · 118 阅读 · 0 评论 -
输入一个整数和一棵二元树
输入一个整数和一棵二元树。 从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。 例如输入整数22 和如下二元树 10 / \ 5 12 / \ 4 7则打印出两条路径:10, 12 和10, 5, 7。使用递归+回溯的方法思路: (1)若根节...原创 2019-07-19 14:49:59 · 2739 阅读 · 1 评论 -
剑指offer:找出数组中的重复的数字Java版
题目: 在一个长度为n的数组里的所有数字都在 0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如:如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出的是重复的数字2或者3。先说一下简单的做法:思路: 将数组排好序,再遍历数组,找到数组中的重复数字即可。使用快排...原创 2019-07-25 14:47:45 · 569 阅读 · 0 评论 -
由两个栈组成的队列
题目: 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek)思路:* 栈的特点是先进后出,队列的特点是先进先出,因此我们只需要* 定义两个栈,其中一个作为压入栈stackPush,另一个作为弹出栈stackPop* 将数据压入stackPush中,然后全部弹出放入stackPop中,* 比如,将12345放入stackPush...原创 2019-07-21 18:19:54 · 158 阅读 · 0 评论 -
打印两个有序链表的公共部分
题目: 给定两个有序链表的头指针head1和head2,打印两个链表的公共部分思路: 因为是有序链表,只需要从俩个链表的头开始判断 1、当head1小于head2的时候,head1向后移动 2、当head1大于head2的时候,head2向后移动 3、当head等于head2的时候,打印,head1和head2都向后移动...原创 2019-07-21 18:39:23 · 365 阅读 · 0 评论 -
用一个栈实现另外一个栈的排序
题目:一个栈中的类型为整形,现在想将该栈从顶到底按从小到大的顺序排序,只允许申请一个栈除此之外,可以申请新的变量,但是不能申请额外的数据结构,如何完成排序。思路: 设计一个cur变量,存放stack栈弹出的当前元素,和辅助栈help的栈顶元素进行比较,若大于辅助栈栈顶元素,则将辅助栈中元素一一弹出,压入stack栈中,若小于辅助栈栈顶元素,则将cur压...原创 2019-07-22 08:48:55 · 271 阅读 · 1 评论 -
在单链表和双链表中删除倒数第K个节点
题目: 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点思路: 如果链表为空或者K值小于1的情况下,直接返回链表。否则让链表从头往后走,没走一步,K值减一,有一下几种情况链表为1-2-3-4-5,K值为6很显然,链表不存在倒数第六个节点链表为1-2-3-4-5,K值为5倒数第5个节点为1节点...原创 2019-07-22 09:54:09 · 548 阅读 · 0 评论 -
快速排序
快速排序:通过将一个数组划分为两个子数组,然后通过递归调用自身,为每一个数组进行快速排序来实现关键字:设定一个关键字,将比关键字小的数据放在一边,比关键字大的数据放在另一边,设置数组最右端的数据为关键字/** 快速排序*/public class QuickSort { /** * 划分数组 */ public static int pa...原创 2019-04-30 11:02:08 · 243 阅读 · 0 评论 -
图
图图:和树相似,有一个固定的形状,由物理或抽象的问题来决定的邻接:如果两个顶点被同一条边连接路径:从一个顶点到另一个顶点经过的序列连通图和非连通图:至少有一条路径可以连接所有的顶点,则为连通图,否则为非连通图有向图无向图:边是有方向的为有...原创 2019-05-04 18:54:15 · 103 阅读 · 0 评论 -
数据结构学习之路五
希尔排序希尔排序:基于插入排序,添加了一些新特性,提高了执行效率优点:通过加大插入排序中元素之间的间隔,并对这些间隔的元素进行插入排序,从而减少移动; 当完成该间隔的排序后,希尔排序会减少数据的间隔再进行排序,依次进行。间隔...原创 2019-04-26 10:48:14 · 126 阅读 · 0 评论 -
数据结构学习之路二
今天本狗想记录一下关于学习链表过程中的一些心得。链表,这是一个让本狗当时比较费脑筋的东西。老规矩,我就不扯从书上看到的知识点了,直接用简单的,本狗的理解出发,链表,本狗认为,就是不连续的数组,他们怎样联系呢?将每一个块分为数据域和指针域两个部分,数据域存放数据,指针域存放下一个块的位置,这样,就可以知道具体的位置了。有关链表的优缺点,大概就是需要和线性表就行比较了。插入、删除方便,...原创 2019-04-22 21:53:33 · 170 阅读 · 0 评论 -
树(三)
删除节点树的节点删除是比较复杂的,因为在删除前需要查找要删除的节点,找到节点后,这个要删除的节点可能会有三种情况需要考虑1、该节点是叶子节点,无子节点 只需要改变该节点的父节点的引用值,将指向该节点的引用设置...原创 2019-05-02 17:03:31 · 172 阅读 · 0 评论 -
哈希表
哈希表:提供了快速插入、查找操作,基于数组来实现哈希值:1、直接将关键字作为索引2、将字母转为ASCII码,进行相加 幂的联乘(容易溢出) 压缩可选值(取余,有发生取余后相等的可能)3、压缩后可能出现的问题 冲突,不能保证每个单词都映射到数组的空白单元解决方法:开放地址法、链地址法定义一个类/*** 员工信息类* @author Adm...原创 2019-05-02 20:53:15 · 164 阅读 · 0 评论 -
数据结构学习之路三
双端链表与双向链表什么是双端链表:链表中保存着最后一个链结点引用的链表。直接从代码开始分析,因为和链表相似,直接在链表的代码基础上进行修改。/** 链结点,相当于是车厢*/public class Node {...原创 2019-04-23 22:35:37 · 85 阅读 · 0 评论 -
开放地址法
哈希表在压缩可选值后仍有冲突的可能,比如1和101,二者最后的取余仍为1,会导致冲突,解决这种冲突的一种方法就是开放地址法。开放地址法:当冲突法生时,通过查找数组的一个空位,并将数据填入,而不再用哈希函数得到的数组下表简单的理解:就是当发生冲突的时候,比如1和101,1占据了一个位置,101进入时候就向下查找,找到下面的一个空位插入, 如果没有继续查找空位,知道找到为止并进行插...原创 2019-05-03 15:28:02 · 8078 阅读 · 2 评论 -
链地址法
解决哈希表冲突的方法:开发地址法,链地址法开发地址法:虽然解决了问题,但是1和101,1占据了一个数组,101只能向下,占据了2的数组,此时来一个取余为2 的值呢,只能向下继续寻找,同理,每一个来的值都只能向下寻找,为了解决这个问题,引入了链地址法链地址法:在哈希表每一个单元中设置链表,某个数据项对的关键字还是像通常一样映射到哈希表的单元中,而数据项本身插入到单元的链表中。简单理解如下:...原创 2019-05-03 16:04:14 · 18019 阅读 · 2 评论 -
数据结构学习之路一
本狗再学习大数据之余同时还在学习数据结构,今天开始就记录一下数据结构的学习过程。先从栈和队列入手,语言选择Java,以后有时间本狗会更新python版本的,毕竟python更简洁。栈:就不从书上的定义开始扯了,毕竟学习计算机的都有一本或者多本数据结构书的,用大白话来说,栈就是先进来的后出去,后进来的先出去,想象一下手枪的子弹,是不是最先放入弹夹的最后才发射出去,这样来理解栈是不是相对来说好...原创 2019-04-19 19:50:59 · 1463 阅读 · 0 评论 -
分别用递归和非递归的方式实现二叉树先序、中序和后序遍历
分析:先序:访问根节点、先序遍历左子树、先序遍历右子树中序:中序遍历左子树,访问根节点,中序遍历右子树后序:后序遍历左子树,后序遍历右子树,访问根节点因此,递归实现就很简单public class test3 { public class Node{ private int value; private Node leftNode; ...原创 2019-07-22 10:49:46 · 838 阅读 · 0 评论