![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Racheil
不舍爱与自由
展开
-
算法时间复杂度分析
一、算法复杂度算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合,简单来说就是解决特定问题求解步骤的描述。对于一个问题,一旦某种算法给定并且是正确的,那么重要的一步,就是确定该算法将需要多少时间或者空间等资源量的问题。如果一个问题的求解算法竟然需要长达一年的时间,那么这种算法就很难有什么用处了,同样,一个需要若干个GB内存的算法在当前大多数机器上也是无法使用的。算法复杂度分为时间复...原创 2019-03-19 21:02:21 · 4309 阅读 · 0 评论 -
快速排序的实现和优化
快速排序的三种实现快速排序是对冒泡排序的一种改进,使用了分治的思想。基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。算法描述:从数列中挑出一个元素,称为"基准"(pivot)。 重新排序数列,所有比基准...原创 2019-07-13 21:44:56 · 259 阅读 · 0 评论 -
Java数据结构——八大基本排序算法总结
一、排序算法基本概念排序算法分为内部排序和外部排序,内部排序把数据记录放在内存中进行排序,而外部排序因排序的数据量大,内存不能一次容纳全部的排序记录,所以在排序过程中需要访问外存。八大基本排序算法都是内部排序。 稳定性:如果一个排序算法经过排序后相同元素(不同元素排序后位置会发生改变)的相对位置不改变则可以被称为是稳定的。反之...原创 2019-06-04 11:28:45 · 1492 阅读 · 2 评论 -
返回链表开始入环的第一个节点
题目:给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null分析过程: 设置一个slow指针和一个fast指针,开始时,slow和fast指向链表的头,然后slow每次跳一步,fast每次跳两步。 如果链表无环,那么fast一定先到终点,直接返回null。 如果有环,那么fast和slo...原创 2019-05-18 21:32:50 · 1367 阅读 · 0 评论 -
判断链表是否有环
题目:给定一个链表,判断链表中是否有环分析过程:1)定义两个变量fast、slow都指向第一个节点2) fast每次走两步,slow每次走一步3)如果fast和slow相遇,说明有环,否则说明无环注:1)当fast为null 时,该链表一定无环2)fast=fast.next.next 此处要判断fast.next!=null,否则会出现空指针异常publ...原创 2019-05-18 21:18:17 · 194 阅读 · 0 评论 -
输入一个链表,输出该链表中倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个结点关于这道题目,我首先想到的解决方法就是先求出链表的长度,然后返回第length-k个节点但是,这么做会遍历两次链表,求链表的长度会遍历依次链表,返回第k个节点又会遍历一次链表为了遍历一次链表,就返回倒数第k个节点,我们采用类似于 "尺子" 的方法定义两个节点,让其中一个节点先走k-1步,然后两个节点一起走,直到第一个节点走到尾节点,第二...原创 2019-05-18 19:06:09 · 272 阅读 · 0 评论 -
返回链表的中间节点
给定一个带有头结点head的非空单链表,返回链表的中间结点如果有两个中间结点,则返回第二个中间结点示例 1:输入:[1,2,3,4,5]输出:[3,4,5] 返回的是中间节点,输出该节点之后的所有节点示例2:输入:[1,2,3,4,5,6]输出:[4,5,6] 返回的是中间节点,输出该节点之后的所有节点分析过程:1)求得链表的长度2) 从...原创 2019-05-18 18:44:59 · 626 阅读 · 0 评论 -
反转一个单链表
反转一个单链表示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL分析过程:1) 定义curNext变量,找到反转后链表的头节点reverseHead此处不能通过cur节点,因为倒数第二个节点反转后cur.next不是最后一个节点curNext变量从始至...原创 2019-05-18 18:25:02 · 163 阅读 · 0 评论 -
删除链表中等于给定值 val 的所有节点
删除链表中等于给定值val的所有节点示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5分析过程:1)要想删除所有给定值为val的节点,必须要遍历一次链表2)从第二个节点开始遍历(如果从第一个节点开始遍历,第一个节点的prev会出现空指针异常)3.1)...原创 2019-05-18 16:59:02 · 1084 阅读 · 0 评论 -
Java数据结构——带头单向循环链表
1. 结构图 2.节点类组成class Node { //内部节点类 private int data; //节点数据 private Node next; //下一个节点引用 }3.常用链表操作1)遍历链表2)头插法3) 尾插法...原创 2019-05-18 12:57:44 · 365 阅读 · 0 评论 -
Java数据结构——顺序表
一、线性表线性表是数据结构中最基本、也是最简单的数据存储结构,可以理解为"线性的表"。在线性表中数据元素之间的关系是线性的,所谓的"线性关系",是指数据一个挨着一个,中间没有空隙,除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素。数据在逻辑结构呈线性分布,称这样的存储结构为线性表1.1 线性表特点存储的元素数据类型相同 各个数据元素之间的相...原创 2019-05-07 14:09:33 · 553 阅读 · 0 评论 -
Java数据结构——不带头单向非循环链表
一、链表的概念链表:采用链式存储结构存储的线性表,所谓的链式是指每个节点保存下一个节点的引用链表的分类:单向、双向 带头节点、不带头节点 循环、非循环根据以上三种分类,即可组成八种不同类型的链表链表的特点:链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理,但是链表失去了顺序表可以随机读取的优点,同时,链表增加了节点的指针域,空间开销比较大。二、不带头单...原创 2019-05-13 21:26:41 · 309 阅读 · 0 评论 -
Java数据结构——二叉树的遍历
首先,什么是二叉树的遍历呢?二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。为什么要遍历二叉树呢?因为计算机只会处理线性序列,而我们研究遍历,就是把树中的结点变成某种意义的线性序列,这给程序的实现带来了好处。在遍历二叉树之前,我们首先要创建一个二叉树,想要创建如下图的二叉树,就要先进行二叉树的扩展,也就是将二叉树...原创 2019-07-23 18:44:33 · 320 阅读 · 0 评论