![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
进阶的kaola
这个作者很懒,什么都没留下…
展开
-
单链表典型问题总结
1、删除链表中等于给定值**val**的所有节点。 思路分析: 定义两个辅助指针 prev 和 cur,当prev.next.data= val时删除即可 主要是别忘了处理第一个节点 public void removeAllKey(int key) { ListNode prev = this.head; ListNode cur = t...原创 2019-11-14 19:43:54 · 1318 阅读 · 0 评论 -
数据结构与算法之队列
目录 链式队列: 顺序队列(循环队列): 队列的使用: 队列是一种只允许在一端插入数据(队尾),在另一端删除数据(队头)的操作的特殊线性表。 队列的特点:先进先出 队列可以用数组实现,称为顺序队列,又叫循环队列。也可以用链表实现,称为链式队列。 链式队列: 入队头插:O(1), 出队队尾出:O(n)[出队不知道队尾的前驱] 入队尾插:O(n),出队队头出:O(1) 若想要...原创 2019-12-16 20:40:41 · 127 阅读 · 0 评论 -
面试常考的排序算法
目录 预备知识 冒泡排序 算法 冒泡排序的分析 冒泡排序的优化 选择排序 算法 选择排序分析 堆排序 算法 堆排序的分析 直接插入排序 算法 插入排序的分析 希尔排序 算法 希尔排序的分析 快速排序 算法 快速排序的分析 快速排序的优化 快速排序非递归 预备知识 被排序的对象属于Comparable类型,因此可以使用ComparaTo方...原创 2020-01-24 23:33:01 · 510 阅读 · 0 评论 -
数据结构与算法之顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构。一般采用数组存储,在数组上完成数据的增删查改。 分为静态数据表(定长数组存储)和动态顺序表(使用动态开辟的数组存储) 注意: 1、数据表头部或中间的插入删除,时间复杂度为O(N) 2、增容需要申请新空间、拷贝数据、释放旧空间,会有不小的消耗 3、增容一般是2倍增长,会有一定的空间浪费 public class MyArrayL...原创 2019-10-27 22:09:25 · 202 阅读 · 0 评论 -
栈和队列典型习题总结
1.用队列实现栈 例子: 12 23 34 45 56 67 78 思路分析:需要有两个队列实现,栈是先进后出,后进先出。 入队列时:①两个队列都是空的,入qu1 ②有一个队列不是空的,入队列入非空队列。 出队列时:哪个不为空出哪个队列。出n-1到另一个队列,再把最后一个元素出栈。 import java.util.LinkedList; import java.util.Queue...原创 2019-12-16 21:09:01 · 644 阅读 · 0 评论 -
数据结构与算法之堆
二叉树的顺序存储 堆 堆的应用 二叉树的顺序存储 使用数组保存二叉树结构,方式即将二叉树用层序遍历方式放入数组中。 一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费,这种方式的主要用法就是堆的表示。 下标关系: 已知双亲(parent)的下标,则: 左孩子(left)下标 = 2 * parent + 1; 右孩子(right)下标 = 2 * parent...原创 2020-01-19 13:08:01 · 129 阅读 · 0 评论 -
数据结构与算法之链表
node : 当前节点的地址 无头单向非循环链表 1、头插法 ①判断是否为第一次插入head == null ==> head = node ②第二次插入node.next = head head = node public void addFirst(int data) { ListNode node = new ListNode(data); ...原创 2019-11-05 14:22:04 · 198 阅读 · 0 评论 -
数据结构与算法之栈
目录 顺序栈: 链式栈: 栈的使用: 首先:栈是一个特殊的线性表,只允许在一端进行插入(压栈)和删除元素(进栈),这一端称为栈顶。 栈的实现可以用数组实现,称为顺序栈。时间复杂度为O(1) 也可以用链表实现称为链式栈。尾插入栈:O(n),出栈:O(n) 头插入栈:O(1),从头...原创 2019-12-16 21:10:20 · 291 阅读 · 1 评论 -
数据结构与算法之树
目录 树的基本概念: 树的表示形式和应用 二叉树 树的基本概念: 1.树:树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没 有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不...原创 2020-01-19 13:06:47 · 751 阅读 · 0 评论 -
数据结构与算法---栈
栈的介绍: 栈是一个先入后出的有序列表。 栈顶:变化的一端,包括插入和删除 栈底:固定的一端 栈的应用场景: 1、子程序的调用:在跳往子程序前,会将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。 2、处理递归调用:和子程序调用类似,除了存储下个指令的地址,也将参数、区域变量等数据存入堆栈中。 3.表达式转换【中缀表达式转后缀表达式】与求值 4、二叉树遍历 5、...原创 2019-11-14 21:30:17 · 183 阅读 · 0 评论 -
单向环形链表的应用--约瑟夫问题
约瑟夫问题:丢手帕游戏是约瑟夫问题的一个变种,游戏很简单,n个人围成一个圈,标号为1到n,约定编号为k(1<=k<=n)的人从1开始报数,报到第m个的人出列,然后下一个人继续从1开始报数,数到第m的那个人出列,如此循环,直到所有人出列,由此产生一个出队编号的序列。 这里有三个主要的因素: 1、多少个人 2、从多少号开始 3、报到第多少号出列 如果是5个人、从1开始、数到2出列 ...原创 2019-11-09 20:58:30 · 187 阅读 · 0 评论 -
数据结构与算法---链表
链表(Linked List) 基本介绍: 链表是有序的列表,针对有头节点的链表内存分布结构如下: 我们会发现: 1、链表是以节点的方式来存储,链式存储 2、每个节点包括data域,next域(指向下一个节点) 3、链表的各个节点不一定是连续存放 4、链表分为带头节点的链表和没有头节点的链表 逻辑结构: head节点:不存放具体数据,作用就是表示单链表的头。 1、添加...原创 2019-11-05 16:58:11 · 181 阅读 · 0 评论 -
数据结构与算法---队列
队列概述 数组模拟队列 数组模拟环形队列 队列正如其名-排队站列。生活中随处可见,食堂买饭、银行取钱、地铁买票....我们会发现这些事情有一个共同的特点:先进先出 这也就是队列的特点。 队列概述: 队列是一个有序列表,可以用数组或是链表实现。遵循先进先出,即先存入队列的数据,要先取出。后存入的要后取出。那么就说明向队列中加数据是在尾部加,取数据是从顶部取。 数组模拟队列: 1、...原创 2019-10-30 20:08:55 · 147 阅读 · 0 评论 -
数据结构与算法---稀疏数组
首先,我们要对数据结构和算法做最基础的了解 数据结构包括线性结构和非线性结构 线性结构:元素之间存在一对一关系,有两种不同的存储结构,顺序存储(数组)和链式存储(链表)。常见的线性结构有:数组、队列、链表、栈... 顺序存储的存储元素是连续的,即地址连续。 非线性结构:二维数组、多维数组、广义表、树结构、图结构。 稀疏数组 那么,来看看稀疏数组是怎样的呢? 引出:当一个数组的大部分...原创 2019-10-22 13:25:21 · 275 阅读 · 0 评论 -
线性结构---数组
数组的使用 定于数组最常用的两种方法 int[] arr = new int[3]; int[] arr = new int[]{1,2,3}; 我们会发现长度都是不可变的,如何解决这个问题呢? 如何给长度为3的饱和数组中再添加一个元素呢?? 仔细想想,我们可以这样做 public static void main(String[] args) { int arr[]...原创 2019-10-21 17:45:26 · 242 阅读 · 0 评论