数据结构
木十一的木马
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数组实现队列
队列的特性:先进先出就好比我们排队打饭,先排的先打着饭;如果解决某个问题时数据的插入和删除操作满足先进先出的特点,那么可以考虑使用队列来实现。队列的两个基本操作:入队 和 出队;利用数组实现队列的代码:public class Queen { private int[] data = new int[10]; private int start = 0; private int end = 0; public boolean push(int d) { if (end <原创 2021-09-20 17:11:02 · 360 阅读 · 0 评论 -
利用数组实现栈
栈的特性:先进后出栈就相当于往井里扔石头,一块一块往下扔,取的时候必须是从最上面拿出来,就是最后扔下去的;如果数据保存的顺序和使用数据相反,可以考虑将数据存放到栈中。栈有两个常规操作:入栈 和 出栈利用数组实现栈:public class Statck { private int[] data = new int[6]; private int index = 0; /** * 入栈操作 * @param d * @return */ public boolean原创 2021-09-20 17:04:57 · 497 阅读 · 0 评论 -
数组基本操作(2)
1.数组的翻转:有两种方法,(1)一种是新建一个数组,将原数组的数据反向添加到新数组中;(2)另一种是在原地修改,从中间分开,将中间后面的数与前面的数进行交换。(1)./** * 数组翻转的第一种实现方法:将原数组的数据反向添加到新数组中。 * @param arr * @return */ public static int[] newArrReverse(int[] arr) { int[] brr = new int[arr.length]; int length原创 2021-09-19 17:55:50 · 301 阅读 · 2 评论 -
数组的基本操作(1)
1.数组的扩容:因为数组一旦创建其长度不可变,当我们要添加一个数据的时候如果原数组已满,那么我们需要将其扩容。原理:代码:public static void main(String[] args) { // TODO Auto-generated method stub //定义数组,初始数组 int[] arr = new int[] {11,22,33}; System.out.println("添加数据前" + Arrays.toString(arr)); //要添原创 2021-09-19 09:33:38 · 293 阅读 · 0 评论 -
leetcode-141. 环形链表:判断链表是否成环
题目:这道题我使用了快慢指针的方法:public class Solution { public boolean hasCycle(ListNode head) { if(head == null){ return false; } ListNode slow = head; ListNode fast = head; while(fast != null && fast.原创 2021-09-19 00:11:47 · 168 阅读 · 0 评论 -
单链表的操作(2)
1.指定位置插入节点思路:首先判断插入的位置是否合法,如果不合法直接return掉;如果合法,那么判断插入的位置是否是头部或尾部,即index=0和index=size();如果不是两端,那么找到index的位置cur和前一个节点pre的位置,让cur成为index的下一个节点,让index成为pre的下一个节点;这样就插入成功了。代码:public static void addNodeAtInsert(int index, int val){ //首先判断index是否合法 if (ind原创 2021-09-18 03:30:00 · 160 阅读 · 0 评论 -
单链表的操作(1)
链表的结构:1.定义单链表的节点public class ListNode { int val; ListNode next; public ListNode(int val) { this.val = val; }}2.建立单链表public class Test { public static void main(String[] args) { //定义一个节点,数据域为1,地址域为null ListNode node1 = new ListNode(1);原创 2021-09-18 03:00:32 · 143 阅读 · 0 评论 -
基数排序(桶排序)
基本思想:将整数按位切割成不同的数字,然后按每个位数分别比较。具体做法是:将所有待比较数值统一为同样的位数长度,数位较短的数前边补零。然后,从最低位开始,依次进行一次排序,这样从最低位排序一直到最高位排序完成后,就变成一个有序数列。图解:代码实现:public class RadixSort { public static void main(String[] args) { int[] data = {654,123,7,12,987,122,234,18,46,10}原创 2021-08-19 05:06:11 · 219 阅读 · 0 评论 -
八大排序之归并排序
归并排序:归并排序是分治法的一种实现算法分治法的基本思想:将一个难以直接解决的大问题分解为多个可容易解决的规模较小的子问题,且须保证这些规模较小的子问题是相互独立与原问题是相同性质的,子问题的解合并可得原问题的解。分治法分为两步:1,。递归的分; 2.合并递归的基本思想:自己直接或间接的调用自身的方法递归要素:递归出口和递归方程 在递归中要先写递归出口再写递归方程算法描述:1.分:在分的方法中定义先两个指针,一个 low 指针指向开头,一个 high 指向结尾;再定义一个指向中间位置的指针 m原创 2021-07-14 01:33:45 · 187 阅读 · 0 评论 -
八大排序之希尔排序
希尔排序:算法介绍:希尔排序也是插入排序的一种,希尔排序也叫分组排序,还叫缩小增量排序。希尔排序的思想是选择一个合适的步长进行分组,将每组数据进行排序,当步长为1时排序完成,这时的数组就是一个有序数组。排序过程图解:如果一个数组为:[2,3,4,5,6,1],若用普通插入排序的话需要经历6轮的交换,而如果使用希尔排序的话,只需要3轮就排好序了,大大的节省了时间。第1轮:第2轮:第3轮:...原创 2021-07-13 00:37:36 · 359 阅读 · 0 评论 -
八大排序之堆排序
堆排序:堆排序的特点:堆排序是利用了堆的数据结构设计的算法;首先堆属于完全二叉树,完全二叉树是一种树的结构,完全二叉树必须满足从上到下,从左到右排序,也就是说有右子树的前提是必须要有左子树;一个数组的完全二叉树为堆分为:大顶堆和小顶堆大顶堆:每个节点的值都大于左右孩子节点的值;小顶堆:每个节点的值都小于左右孩子节点的值;从树形结构中可以得到:N[i] 的左孩子:N[2 * i + 1];N[i] 的右孩子:N[2 * i + 1];N[i] 的父节点:N[(i - 1) / 2];堆排序原创 2021-07-12 03:07:27 · 383 阅读 · 0 评论 -
八大排序之快速排序
快速排序算法描述:通过定义两个指针 i,j ,和一个基准数(一般以第一个数作为基准数);指针 i 从 arr[0] 往后移动,指针 j 从 arr[arr.length - 1] 往前移动。先让指针 j 开始移动,当 j 找到第一个比基准数小的数停止,然后 i 开始移动,当 i 找到第一个比基准数大的数停止;然后让指针 i 和指针 j 位置的数据进行互换,以此方式进行移动,最终指针 i 和指针 j 会碰面(指向同一个值),令这个值与基准数进行互换。第一轮排完序后会发现:基准数左侧的数据都比基准数小,右侧的原创 2021-07-11 03:11:51 · 216 阅读 · 0 评论 -
八大排序之插入排序
插入排序:算法描述:以原数组的第一个数据作为一个新的数组,然后将原数组第一个数据以后的数据插入到新的数组中去;要明白:之前所说的那个新数组是虚拟的,计算机底层不会创建一个新数组,还是在原数组上进行的操作。首先定义一个指针 i 从索引为1开始从前往后移动遍历原数组,注意是索引为1也就是第二个数据,接着再定义一个指针 j ,指针 j = i+1 开始,从后往前移动,将 i 的值插入到新数组中。时间复杂度:O(nlogn)代码实现:public static void main(String[] args原创 2021-07-11 02:13:48 · 109 阅读 · 1 评论 -
八大排序之选择排序
选择排序:算法描述:开始定义一个最小值,随着遍历不断的更新最小值,让最小值往前面移动;比如第一次,从arr[0到]arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1]到arr[n-1]中选取最小值,与arr[1]交换…遍历完后就是一个有序数组。时间复杂度:O(n²)代码实现:public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = {8,65,41,28,6原创 2021-07-11 01:52:12 · 112 阅读 · 0 评论 -
八大排序之冒泡排序
冒泡排序: 基本思想:定义两个指针 i 和 j 对原数组的数据进行遍历,指针 i 从开始遍历到最后,j 从 i+1 往后遍历,每次都比较两个指针值的大小,大的在后边,小的在前边。像水泡一样往上冒。如图所示代码实现:public class maoPao { public static void main(String[] args) { int[] arr = new int[] {12,3,21,54,32,4,5,3,1}; Sort1(arr); System.out.pri原创 2021-07-11 01:22:20 · 145 阅读 · 0 评论
分享