数据结构/算法
程序媛阿洁
一天比一天努力,热爱生活。
展开
-
[javaDS/面试题]根据前序中序构造二叉树
思想:* 1、前序遍历序列中的第一个元素为根节点* 2、找到该根节点在中序遍历序列中的位置,左侧即为左树的遍历序列,右侧为右树的遍历序列* 3、根据左树遍历序列的数组长度len,找出前序遍历序列的第2到第len+1个元素,第一个元素即为左树中的根节点,右树的根节点是前序遍历序列的最后一个节点* 4、递归进行上述过程,构建树package com.m...原创 2019-06-24 22:23:03 · 964 阅读 · 1 评论 -
[JavaDS] 反转单链表
目录题目描述:解题思路:代码实现:题目描述: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 解题思路:首先我们拿到一个单链表,假设该单链表不为null,并且该单链表至少有两个节点此时我们要思考反转单链表的指向,设反转的节点为 cu...原创 2019-10-23 22:10:43 · 103 阅读 · 0 评论 -
[JavaDS]顺序表
目录线性表顺序表1属性2方法2.1public boolean add(int pos, Object data)//在pos位置插入data2.2public int search(int key)//查找关键字key位置的数组下标2. 3 public boolean contains(Object key)//判断是否包含关键词key是否在顺序表当中...原创 2019-05-12 18:40:41 · 422 阅读 · 0 评论 -
[JavaDS]单链表
目录线性表单链表:1创建节点类Node2 属性3一些内存变化4方法实现4.1public void addFirst(int data)//头插法4.2public void addLast(int data)//尾插法4.3public int size( )//链表长度4.4public void Index(int index,int data)//...原创 2019-05-16 21:21:57 · 263 阅读 · 0 评论 -
[JavaDS]单链表
单链表部分之前有写过博客的,主要以记录代码为主。需要纯代码和部分注释的老铁们自行参考。https://blog.csdn.net/weixin_42645168/article/details/90272271本篇博客以讲解为主。在学习数据结构之前,你需要了解一些基础知识。https://blog.csdn.net/weixin_42645168/article/detai...原创 2019-10-15 21:54:12 · 133 阅读 · 0 评论 -
[JavaDS]选择排序
思想:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完注意:1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用2. 时间复杂度:O(N^2)3. 空间复杂度:O(1)4. 稳定性:不稳定代码实现:package i.DS.base;import java.util.A...原创 2019-05-30 18:43:12 · 95 阅读 · 0 评论 -
[JavaDS]学习数据结构前,你需要掌握什么知识点?
时间复杂度:我们的程序员们写代码要关注效率!那么就引入了:时间复杂度------关注程序运行的快慢空间复杂度------程序运行时所占内存/外存空间的多少它衡量的是一段代码的效率,但是这段代码在什么样的机器上执行,什么样的环境中执行,不确定如果一段代码中存在一些基本操作,这样的基本操作重复次数越多,就认为代码执行越慢public class Test{ pu...原创 2019-10-15 21:09:41 · 770 阅读 · 0 评论 -
[JavaDS]队列
接口:public interface IMyQueue { // 判断这个队列是否为空 boolean empty(); // 返回队首元素,但不出队列 int peek(); // 返回队首元素,并且出队列 int poll(); // 将 item 放入队列中 void add(int item); // 返回元...原创 2019-05-29 22:07:02 · 77 阅读 · 0 评论 -
[JavaDS]栈
接口:interface IMyStack { // 将 item 压入栈中 void push(int item); // 返回栈顶元素,并且出栈 int pop(); // 返回栈顶元素,但不出栈 int peek(); // 判断这个栈是否为空栈 boolean empty(); // 返回元素个数 in...原创 2019-05-29 22:08:07 · 104 阅读 · 0 评论 -
[JavaDS]直接插入法
直接插入排序:-----越有序越快 时间复杂度:O(n^2) 最好情况:O(n) 空间复杂度:O(1) tmp 有稳定性代码实现:public class TestSortDemo { public static void insertSort(int[] array){ for(int i=1;i<arr...原创 2019-05-29 22:12:26 · 346 阅读 · 0 评论 -
[JavaDS]算法执行时间的计算
算法开始: long start=System.currentTimeMillis();//开始算法结束: long end=System.currentTimeMillis();//结束算法执行时间:结束-开始 System.out.println("算法执行时间:"+(end-start));举例:public class TestSortDemo { ...原创 2019-05-29 22:29:32 · 301 阅读 · 0 评论 -
[JavaDS]Shell排序
排序思想:将已知数分成素数组,然后对每组依次进行直接插入排序 组数>1时为预排序。依据直接插入排序算法的特点,越有序,速度越快,即 提升了直接插入排序效率 平均时间复杂度: O(N^1.3—N^2) 稳定性:不稳定代码实现:---插入100个随机数 并进行shell排序package i.DS.base;import java.util.Arrays;i...原创 2019-05-30 17:47:37 · 114 阅读 · 0 评论 -
双向链表的实现
双向链表:传统链表沿着链表的反向遍历是很困难的,为了解决这一问题------引入双向链表双向链表的链结点有两个指向其他节点的引用。一个指向前驱,一个指向后继。图解:双向链表的头插法:分为两种情况a.头结点为空 this.head=node;this.last=node;//头结点和尾结点均为nodeb.头结点不为空node.next=this.hea...原创 2019-06-01 00:35:07 · 147 阅读 · 0 评论 -
[JavaDS]快速排序法
目录1思想:2特点:3步骤:4代码实现:5问题及其优化:5.1优化:------三数取中法5.2优化二:直接插入排序预备知识:Random的用法java中存在两种Random函数:1java.lang.Math.RandomRandom()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间...原创 2019-06-03 22:24:47 · 668 阅读 · 0 评论 -
[JavaDS]堆排序
堆堆中某个结点的值总是不大于或者不小于其父结点的值堆总是一个完全二叉树堆排序如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0,1,2…,则称为小堆...原创 2019-06-06 22:38:07 · 118 阅读 · 0 评论 -
[JavaDS]归并排序法(Java实现)
非递归:思想:将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。注:1. 归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。2. 时间复杂度:O(N*logN)3. 空间复杂度:O(N)4. 稳定性:稳定package a.DS.So...原创 2019-06-04 22:26:08 · 167 阅读 · 0 评论 -
[JavaDS]冒泡排序法
思想:每次比较两个相邻的元素,将较大的元素交换至右端。图解:每排序一趟 确定一个数(从后至前)代码实现:package i.DS.base;import java.util.Arrays;import java.util.Random;//冒泡排序法/*时间复杂度:O(n^2) 优化之后:时间复杂度:O(n)空间复杂度:O(1)具有稳定性 */publi...原创 2019-05-30 22:05:23 · 99 阅读 · 0 评论