数据结构
文章平均质量分 93
Java 实现的数据结构
十七ing
: )
展开
-
一文搞定 KMP 算法
① 在 KMP 思想中,主串指针 i 不回溯,它将一直往右走。② next 数组第一个必填 0,next 数组的第二个 必填 1.③ nextval 数组的第一个必填 0.原创 2023-01-05 13:18:19 · 2021 阅读 · 1 评论 -
模拟顺序表
用Java来实现顺序表一、深入理解顺序表二、创建框架三、代码实现1. 创建一个类Seqlist2. 创建主函数用来测试四、分析代码的部分逻辑五、总结一、深入理解顺序表顺序表(Sequence List)顺序表的定义:顺序表是在计算机内存中以数组的形式保存的线性表顺序表的特点:表中元素的逻辑顺序与其物理顺序相同顺序表的缺点:(1) 顺序表中间/头部的插入删除,时间复杂度为O(N)(2)增容需要申请新空间,拷贝数据,释放旧空间,会有不小的消耗(3)若增容按2倍增长,势必会有一定的空间浪费。例如原创 2022-04-21 22:04:37 · 281 阅读 · 0 评论 -
模拟单链表
拿捏链表一、单向、不带头、非循环链表的结构二、创建框架1. 创建一个类 Node,表示节点2. 模拟链表内部结构3. 初始化一个链表4. 创建一个方法来打印每个节点对应的 val一、单向、不带头、非循环链表的结构模拟五个节点每个节点有两个元素:一个存的是当前节点的值 val,另一个存的是下一个节点的地址二、创建框架1. 创建一个类 Node,表示节点class Node { public int val; public Node next;}创建一个类 Node,表示原创 2022-04-25 13:18:56 · 1400 阅读 · 0 评论 -
链表必刷题一
链表的一些题目一、分割链表1. 链接2. 代码实现3. 分析代码一、分割链表1. 链接分割链表>对应的链接分割链表这是牛客网的一道题目题目要求:现有一链表的头指针 ListNode* head,给一定值 x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。2. 代码实现public class Partition { public ListNode partition(ListNode head, int x) {原创 2022-04-29 13:33:47 · 748 阅读 · 0 评论 -
链表必刷题二
链表必刷题二一、删除链表中重复的结点1. 牛客网链接2. 代码实现3. 代码分析一、删除链表中重复的结点1. 牛客网链接题目要求:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的节点对应的 val 值是相同的,而且是连在一起的。重复的结点不保留,返回链表头指针。例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5.OJ链接2. 代码实现public class Solution { public原创 2022-05-01 21:58:23 · 408 阅读 · 0 评论 -
模拟双向链表
拿捏链表二前言一、双向、不带头、非循环链表的结构二、代码实现三、框架分析0. 对框架进行说明1. 创建一个类 Node,表示节点2. 模拟链表内部结构3. 初始化一个链表4. 打印每个节点对应的 val5. 得到链表的长度6. 头插法7. 尾插法8. 在任一位置插入节点9. 查找关键字key是否在单链表当中10. 删除第一次出现关键字为 key 的节点11. 删除所有出现 key 的节点12. 清空链表总结前言双向链表在单链表的基础上做了一些改进,所以本篇博客对于那些相似的地方,不再赘述,但不同的地方一原创 2022-05-02 21:43:13 · 710 阅读 · 0 评论 -
集合与框架
集合Collection 接口Map 接口泛型的意义包装类Collection 接口程序清单1:public class Test1 { public static void main(String[] args) { Collection<String> collection= new ArrayList<String>(); collection.add("hello"); collection.add("world"原创 2022-05-24 09:33:32 · 84 阅读 · 0 评论 -
利用顺序表实现扑克牌
利用顺序表实现扑克牌代码实现1. 创建一个类 Card2. 创建一个类 Test代码分析代码实现1. 创建一个类 Card创建一个类 Card,表示一张扑克牌的信息,另外生成构造方法和 toString 方法class Card { public String suit; //某张牌的花色 public String number; //某张牌的数字 public Card(String suit, String number) { this.sui原创 2022-05-26 08:51:41 · 272 阅读 · 0 评论 -
Java 中的 ArrayList
ArrayList一些对顺序表操作的方法一些对顺序表操作的方法结论:① 如果 ArrayList 调用不带参数的构造方法,那么顺序表的大小为0,当第一次使用 add( ) 方法的时候,整个顺序表才变为10,当顺序表中的10个数据放满的时候,开始以1.5倍的方式进行扩容。② 如果 ArrayList 调用带参数的构造方法,那么顺序表的大小就是你输入参数时的容量,当放满的时候,依然以1.5倍的方式进行扩容。ArrayList<String> list1 = new ArrayList&l原创 2022-05-26 08:54:16 · 1364 阅读 · 0 评论 -
数据结构——栈
栈和队列1. 什么是栈2. 什么是 Java 虚拟机栈3. 什么是栈帧题目一题目二 中缀表达式 与 后缀表达式1. 什么是栈答:栈是一种数据结构,特点:存进去的数据遵循先进后出原则。2. 什么是 Java 虚拟机栈Java 虚拟机栈是 JVM 中的一块内存,该内存一般用来存放,局部变量等等…3. 什么是栈帧调用函数的时候,我们会为这个函数开辟一块内存,叫做栈帧,而开辟内存的场所就在 Java 虚拟机栈 之中。题目一一个栈的入栈顺序是 a b c d e,则栈不可能的输出序列是:( C原创 2022-05-31 12:03:31 · 500 阅读 · 0 评论 -
数据结构——队列
数据结构——队列理解队列队列的定义队列的操作队列的一些方法通过单链表实现队列理解双端队列双端队列的一些方法环形队列理解环形队列题目一理解队列队列的定义队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列的操作允许插入的一端称为队尾,允许删除的一端称为队头。我们可以将其想象成一个链表,队尾就是链表中的最后一个节点,然后只能对这个链表进行【 尾插、头删 】操作。队列的一些方法程序清单1:public class Test2 { public static原创 2022-06-02 19:03:05 · 1437 阅读 · 0 评论 -
数据结构——二叉树
二叉树二叉树的性质:二叉树的性质:若规定根节点的层数为1,则一颗非空二叉树的第 k 层上最多有 【2^(k - 1)】个节点。若规定根节点的层数为1,则深度为 n 的二叉树最大节点数为 【2^n - 1】(等比数列求和 Sn)对任何一棵二叉树, 如果度为0的结点个数为 n0,度为2的分支结点个数为n2,则有公式:n0 = n2 + 1(其中,度为0的节点也叫叶子节点)推导过程:假设一个二叉树有 n 个节点,那么这个二叉树有 n - 1 条边,那么度为0的节点个数为 n0,度原创 2022-06-06 11:09:13 · 1588 阅读 · 0 评论 -
二叉树必刷题
二叉树必刷题判断两颗二叉树是否为相同的树判断一棵树是不是另一棵树的子树判断两颗二叉树是否为相同的树leetcode 102要求:① 两棵树的结构相等② 两颗树的每个节点的值相等思路:先把所有情况设想出来,再通过每一种情况分析出边界条件。从头节点开始,通过边界条件 null 来判断树的结构是否相等,接着,判断两棵树所对应的节点值是否相等。class Solution { public boolean isSameTree(TreeNode p, TreeNode q) {原创 2022-06-08 17:34:13 · 252 阅读 · 0 评论 -
数据结构——优先队列与堆
优先级队列的底层实际上就是利用堆这种数据结构实现的。堆在逻辑上是一颗完全二叉树,而其物理结构却是数组,二叉树中的每个节点对应着数组的下标,树中的第一个节点(根节点)的数组下标为0,树中的最后一个节点不一定为数组的最后一个元素(数组可能没满),而我们学习的堆,分为两种:① 大顶堆:每个节点的值都 >= 其左右孩子节点的值,此外,第一个根节点的值一定是所有堆中其余节点的最大值。② 小顶堆:每个节点的值都 .........原创 2022-06-13 18:21:15 · 994 阅读 · 0 评论 -
数据结构——排序
对于一组待排序的数据,数据中有两个或两个以上的相同的元素,在经过排序后,这两个或两个以上的相同元素与之前未排序的顺序相同,则说明此排序操作是稳定的。举例说明:在下图中,待排序数据 ① 经过排序成为 ② ,我们发现绿色数字5和红色数字5与排序前的顺序并未发生改变,那么排序 ② 就是稳定的。反之,排序 ③ 就是不稳定的。思路:从数组的第二个元素开始,遍历数组,不断地与数组第一个元素进行比较。输出结果:希尔排序本质上就是直接插入排序,只不过对其进行了分组。当我们给定了一组数据,直接插入排序直接对这组数据进原创 2022-06-15 09:03:20 · 586 阅读 · 0 评论 -
数据结构——二叉搜索树
二叉搜索树又称为(二叉排序树、二叉查找树),什么是二叉搜索树?它是一棵空树,或者具有下列性质的二叉树① 它的左子树不为空,则左子树上所有的节点的值均小于它的根节点的值。② 它的右子树不为空,则右子树上所有的节点的值均大于它的根节点的值。③ 它的左、右子树也分别为二叉搜索树。二叉搜索树的中序遍历的数据是一个已排序好的数据。然而,构造一棵二叉搜索树的目的,不是为了排序,而是为了提高查找、添加、删除数据的速度。本篇博客实现的二叉搜索树的形状如下,也即是对下面这棵树进行操作。一个是 Node 类,表示某个节点原创 2022-06-16 15:43:36 · 438 阅读 · 0 评论 -
Map 和 Set
Map 和 Set 是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。Map是一个接口类,该类没有继承自Collection,该类中存储的是结构的键值对,将键 Key 映射到值 Value 的对象。 地图不能包含重复的键,每个键可以映射到最多一个值。1. Map 的常用方法① Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMap② Map中存放键值对的Key是唯一的,value是可以重复的③ Map中的Key.....原创 2022-06-23 15:30:50 · 417 阅读 · 0 评论 -
数据结构——哈希表
顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。比方说,你需要在一个长度为100 的整型数组中,去查找数字 5 ,那么你就得去和数组中这些 100 个元素进行比较,若相等,就找到了,返回 true;若不想等,就返回 false. 而在链表或树形结构中查找我们想要的元素时,道理是一样的,都得去挨个比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(log2N),搜索的效率取决于搜索过程中元素的比较次数。而有一种理想的搜索方法:可以不原创 2022-06-24 10:50:31 · 467 阅读 · 0 评论 -
顺序表和链表的优缺点总结
顺序表和链表之间的对比。原创 2022-06-27 08:25:12 · 15383 阅读 · 0 评论