![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java数据结构
姑娘加油
加油
展开
-
java实现顺序表
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。1,创建一个顺序表 class TestSqlist{ int usedSize;//顺序表实际长度 int[] elem;/...原创 2018-05-03 22:13:33 · 12065 阅读 · 3 评论 -
图的存储
图的存储1,邻接矩阵存储法建立一个顶点表(记录各个顶点信息)和一个邻接矩阵(表示各个顶点之间关系)。 特点:无向图的邻接矩阵是对称的; 顶点i 的度=第 i 行 (列) 中1 的个数;java实现代码如下:package com.graph;import java.util.Scanner;/* * 定义图的结构...原创 2019-04-06 16:00:05 · 350 阅读 · 0 评论 -
二叉树的前中后序遍历(递归+非递归)
/** * 二叉树节点类 * @author wj * */class TreeNode{ int value; TreeNode left_Node; TreeNode right_Node; public TreeNode(int value) { this.value = value; this.left_Node = null; this.right_N...原创 2018-10-10 09:33:00 · 231 阅读 · 0 评论 -
Java泛型实现单链表
class GenericLink<T>{ public Entry<T> head;//定义头结点 class Entry<T>{ private T data;//数据 private Entry<T> next; public Entry(){//初始化结点 data = null; next = null...原创 2018-05-31 22:31:16 · 1138 阅读 · 0 评论 -
快速排序
快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。简单来说就是找基准。使基准前面的数都比它大(小),后面的数都比它小(大)。再采用分治思想将问题一次次分为规模较小的子问题,通过这样进行排序,最终实现整个序列的有序。1,首...原创 2018-05-15 16:46:59 · 203 阅读 · 1 评论 -
shell(希尔)排序
shell排序是一种插入排序算法,它出自D.L.Shell,因此而得名。Shell排序又称作缩小增量排序。Shell排序的执行时间依赖于增量序列。先取一个增量序列(例如:5,3,1)将一串需排序的数列先按照5分组,每组三个数。对每组三个数进行排序。接下来按照3分组,每组五个数。对每组五个数进行排序。接下来是1 也就是进行直接插入排序。Shell排序的执行时间依赖于增量序列。好的增量序...原创 2018-05-15 15:20:43 · 13822 阅读 · 1 评论 -
链栈----循环队列---用两个栈实现队列
1,链栈(用链表实现栈)>1,初始化栈class Entry{ int data; Entry next; public Entry(){ this.data = -1; this.next = null; } public Entry(int val){ this.data = val; this.next = null; } } ...原创 2018-05-08 18:02:12 · 665 阅读 · 1 评论 -
栈的应用之中缀表达式转后缀表达式
我们把平时计算的表达式叫做中缀表达式,比如“2+3*5-4*(5-3)”,因为计算符号在数字中间。现在我们需要将中缀表达式转为后缀表达式。 首先我们需要一个 newstack[ ] 栈 和strLast[ ] 数组。1,如果遇到数字将数字存入数组strLast中2,遇到运算符 如果newstack为空就将其存放进去3,遇到运算符 如果newstack不为空则遵循以...原创 2018-05-08 16:30:00 · 282 阅读 · 1 评论 -
基数排序
基数排序属于"分配式排序"(distribution sort),又称"桶子法"(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些"桶"中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),(百度百科)我们来 看一个例子1.比较个位数字,分别将它们放到对应号码的桶里。然后分别取出来(从桶底取出来)。2.比...原创 2018-05-20 16:36:28 · 94 阅读 · 0 评论 -
归并排序
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。如图先排粉色试它们之间有序后(粉色自身就是有序的),在它们有序后,再对绿色进行排序,然后有序后再队蓝色进行排序public static void mergeSort(int[] array){ for(...原创 2018-05-20 16:17:06 · 122 阅读 · 0 评论 -
Kmp算法
KMP算法:KMP算法是由Knuth,Morris,Pratt三位学者研究出的模式匹配算法,大大的避免了重复遍历的情况。算法目的:确定主串中所含子串第一次出现的位置。 在这之前呢,有一个BF算法 (~暴力匹配~)。>_<BF算法设计思想:1,将主串的第pos个字符和模式的第1个字符比较, 2,若相等,继续逐个比较后续字符;3,若不等,从主串的下一字符(...原创 2018-05-12 21:42:06 · 320 阅读 · 0 评论 -
Java链表的操作--循环链表、双向链表和顺序栈
Java数据结构1. 循环单链表对于单链表来说,尾节点的next为空,而循环链表的尾节点的next指向头节点1. 首先定义内部结点类Entry,包括data和next。class Entry{ int data; Entry next; public Entry(){ this.data = -1; next = null; } publi...原创 2018-05-06 12:08:43 · 994 阅读 · 0 评论 -
堆排序
堆排序这里的堆指的是完全二叉树。我们先来了解一下大根堆与小根堆。大根堆就是二叉树中所有的父节点都大于子节点,小根堆是二叉树中所有子节点都大于父节点。数列从小到大排列需要使用大根堆,从大到小需要小根堆首先我们先看一组数列现在我们将它先组成一个完全二叉树--------》将这个完全二叉树变为一个大根堆 最后将第一个数与最后一个交换这是第一次调整后面每次进行一次大的调整(第一个数的调整)就可以实现...原创 2018-05-18 12:32:34 · 467 阅读 · 0 评论 -
快速排序的优化
(快速排序的实现请看上一篇)快速排序的优化:1,随机选取基准法2,三分基准法3,当代排序数组当中数据比较少的时候用直接插入法4,聚集相同元素法(基准一样的元素)一,当序列有序的时候快速排序的时间复杂度将会变成O(n2)。 例如:1 2 3 4 5 6 7 8 9 所以我们要采取优化来使基准不会一直被选取最小的那个数。 这...原创 2018-05-17 20:41:20 · 174 阅读 · 0 评论 -
Java实现链表
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。(逻辑地址相连,物理地址不相连)我们来用java的内部类来实现单链表的创建class Link{//一个链表类 publi...原创 2018-04-27 00:47:32 · 33315 阅读 · 8 评论 -
两个队实现一个栈
两个队列实现栈的操作1>将不为空的队列的数出队并入到另一个队列,直到剩下一个元素2>将剩下的最后一个元素出队,便是实现了栈的后进先 出3>入栈时在两个队列都为空时,随便入到哪个队列中不为空时入到不为空的队列中4>这样出栈时重复之前的步骤public static void enterStack(Queue q1,Queue q2,int val){ Queue p1 =...原创 2018-05-10 12:02:19 · 676 阅读 · 0 评论 -
链队和优先级队列
链队 1,入队(尾插法) O(1)2,出队 O(1)使front指向它头结点,rear一直指向尾结点。这样保证入队出 队的复杂度都为o(1)1>初始化一个队class Entry{ int data; Entry next; public Entry(){ data = -1; next = null; } public Entry(int v...原创 2018-05-10 11:27:33 · 368 阅读 · 2 评论 -
图的深度遍历与广度遍历
图的遍历1,DFS(深度优先遍历) 访问起始点 v; 若v的第1个邻接点没访问过,深度遍历此邻接点; 若当前邻接点已访问过,再找v的第2个邻接点重新遍历。 结果:代码实现 图的创建输出看https://blog.csdn.net/qq_37937537/article/details/89056696基于邻接表实现...原创 2019-04-06 17:34:22 · 1361 阅读 · 1 评论