数据结构
文章平均质量分 79
鱼爱吃柚子
大三在校,努力,加油!
展开
-
手写LinkedList实现基本功能
你未必出类拔萃,但一定与众不同手写LinkedList实现基本功能文章目录手写LinkedList实现基本功能概述手写内容成员变量和常量Node节点add方法get方法set方法越界问题remove方法clear方法完整代码概述LinkedList主要 特性:顺序访问写快读慢 读的时候需要遍历 底层采用了折半查找提高了效率 但是比起数组来说还是慢的多查看源码public class LinkedList<E> extends AbstractSequent.原创 2021-07-18 22:03:59 · 333 阅读 · 4 评论 -
剑指offer-7题到12题
你未必出类拔萃,但一定与众不同剑指offer文章目录剑指offer题7 重建二叉树题8 二叉树的下一个节点题9 两个栈实现队列题10 斐波那契数列题11旋转数组的最小数字题7 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof二叉树的前序遍历 根左右 .原创 2021-07-14 17:20:21 · 70 阅读 · 0 评论 -
剑指offer-2题到6题
你未必出类拔萃,但一定与众不同剑指offer文章目录剑指offer题2 实现Singleton模式不好解法1:只适用于单线程环境不好解法2:虽然在多线程环境中工作,但效率不高可行解法3:加同步锁前后两次判断实例是否存在推荐解法4 使⽤类的内部类(线程安全)题3 数组中重复的数字题4二维数组中的查找解法1 暴力递归解法二 线性查找题5 替换空格解法一 调用库函数解法二 暴力循环法题6 从尾到头打印链表解法1 利用栈来打印解法二 反转链表后再遍历题2 实现Singleton模式不好解法1:只适用.原创 2021-07-13 10:11:54 · 104 阅读 · 4 评论 -
Java数据结构(16)----实现简单的二叉树
你未必出类拔萃,但一定与众不同原创 2020-05-30 17:59:02 · 310 阅读 · 0 评论 -
Java数据结构(15)----二叉树的三种遍历
二叉树在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。一棵深度为k,且有2^k-1个结点的二叉树,称为满二叉树。这种树的特点是每一层上的结点数都是最大结点数。而在一棵二叉树中,除最后一层外,若其余层都是满的,并且或者最后一层是满的,或者是在右边缺少连续若干结点,则此二叉树为完全二叉树。具有n个结点的完全二叉树的深度为floor(log2n)+1。深度为k的完全二叉原创 2020-05-27 13:22:11 · 179 阅读 · 1 评论 -
Java数据结构(14)----哈希表(基本实现)
哈希表基本概念:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。一般想法:出自Java数据结构书籍理想的散列表数据结构只不过是一个包含原创 2020-05-24 10:34:11 · 206 阅读 · 0 评论 -
Java数据结构(13)----希尔排序
希尔排序希尔排序是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。基本思想先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量 =1原创 2020-05-21 11:43:38 · 163 阅读 · 0 评论 -
Java数据结构(12)----插入排序
插入排序插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动基本思想插入排序的工作方式像许多人排序一手扑克牌。开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位原创 2020-05-18 14:32:07 · 259 阅读 · 1 评论 -
Java数据结构(11)----选择排序
选择排序思路:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素均排序完毕。假设有一个数组原始数组第一轮排序第二轮排序第三轮排序第四轮排序第五轮排序代码如下:public static void selectSort(int[] array) { for(int i = 0;i<array.length-1;i++) { int index = i原创 2020-05-17 10:24:31 · 89 阅读 · 0 评论 -
Java数据结构(10)----冒泡排序
冒泡排序先上代码public static void sort(int[] array) { for(int i = 0;i<array.length-1;i++) { for(int j = i+1;j<array.length;j++) { if(array[i]>array[j]) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } } }原创 2020-05-17 09:51:55 · 117 阅读 · 0 评论 -
Java数据结构(9)----八皇后问题(回溯)
八皇后回溯算法由来1848年,国际西洋棋棋手马克斯·贝瑟尔提出了这样的一个问题在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问一共有多少种摆法。思路先谈谈思路1.将第一个皇后放在第一行第一列上2.将第二个皇后放在第一行第一列上,发现与第一个处在同一列,不符合,遂将第二个皇后放在第二行第二列,发同一斜线,遂将其放在第二行第三列上。3.将第三个皇后,还是第三行的第一列,第二列········到第8个列一个一个试,发现不冲突则将其放在应该原创 2020-05-09 18:19:30 · 395 阅读 · 0 评论 -
Java数据结构(8)----迷宫回溯问题
迷宫回溯问题回溯的基本思想:对一个包括有很多结点且每一个结点都有若干个搜索分支的问题,把原问题分解为对若干个子问题求解的算法。理解:当搜索到某个结点,发现无法再搜索下去,就需要让搜索过程回溯(也称退回)到该结点的上一个结点,继续搜索这个结点的其他尚未搜索过的分支,然后一遍一遍重复这个步骤,直到搜索到问题的解或搜索完了全部可搜索分支没有解存在为止。举例:用回溯来实现迷宫问题使用递归回溯来...原创 2020-04-30 21:13:22 · 201 阅读 · 0 评论 -
Java数据结构(7)----栈实现综合计算器(带多重括号)
栈实现综合计算器(带多重括号)前言今天学习了栈如何实现综合计算器,现在我们来总结一下,再自己画画图深入理解一下,再实现一下没有实现的功能,如何运算带多重括号的运算表达式比如这个(((1623(25-5))+1-5)*3-4)/2表达这个。思路:通过一一个index值(索引),来遍历我们的运算表达式如果我们发现是一个数字,就直接入数栈,发现是符号就进符号栈如果发现当前的符号栈为...原创 2020-04-28 14:59:54 · 1495 阅读 · 4 评论 -
Java数据结构(6)----栈(顺序结构)
栈的顺序结构基本知识栈是一个先入后出的有序列表栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊的线性表,允许插入和删除的一端为变化的一端,称为栈顶(top)另一端为固定的一端,称为栈底。根据栈的定义可知,最先放入的元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。思路1.进栈:top上移,将进入的元素值赋给a...原创 2020-04-28 11:25:43 · 116 阅读 · 0 评论 -
Java数据结构(5)----双向链表
双向链表双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点双向链表比单链表多了一个前驱这里我们直接上代码代码实现//双向链表public class TwoWayLinkListTest { public static void main(String[] args...原创 2020-04-26 19:40:39 · 112 阅读 · 0 评论 -
Java数据结构(4)----单链表反转
单链表反转先上代码://反转单链表 public static void reversetList(LinkNode head) { if(head.next == null || head.next.next == null) { return ; } //定义一个辅助的变量帮助我们遍历原来的链表 LinkNode index = head.next; ...原创 2020-04-26 18:14:26 · 163 阅读 · 0 评论 -
Java数据结构(3)----单链表的增删改查
单链表写在开头的话:业精于勤而荒于戏大一的时候学的c++数据结构,没怎么用心学,但是目前自己走java方向,就要重新学会用java学数据结构,敲数据结构,希望大家一起努力吧大一没多用心学专业,但是现在大二了,应该努力了,不能给自己留下遗憾,毕竟我们也是靠这个吃饭的,我们一起加油,有问题欢迎留言。正文链表由一系列节点组成,这些节点不必在内存中相连。每个节点均含有表元素和到包含该元素后继元...原创 2020-04-25 12:20:37 · 186 阅读 · 0 评论 -
Java数据结构(2)----数组模拟环形队列
数组模拟环形队列思路:1.front指向队列的第一个元素 array[front]就是第一个元素值2.rear指向队列的最后一个元素的后一个位置(假使队列的maxSize为8,事实上队列的有效长度为7,队列满的时候,rear指向的就是最后一个元素的后一个位置,最后的一个位置为预留位置 详细看下面图解)rear尾部指针初始值为0,指向待添加数据的位置,队列添加数据时,因为为环形队列,指针可能再...原创 2020-04-24 19:00:55 · 149 阅读 · 0 评论 -
Java数据结构(1)----二维数组和稀疏数组的互相转化
二维数组和稀疏数组的互相转化代码如下://二维数组转化为稀疏数组 稀疏数组恢复为二维数组public class SparseArrayTest { public static void main(String[] args) { // TODO Auto-generated method stub //定义一个二维数组arrayone(原生二维数组)// Sc...原创 2020-04-23 20:23:59 · 122 阅读 · 0 评论