数据结构与算法
文章平均质量分 63
yushen0
当你的能力还驾驭不了你的目标时,就应该沉下心来,历练。
比如选择一条最快的捷径-----努力。
展开
-
数据结构-单向链表(一)(JAVA)
1.数据结构之链表链表是一种按照线性顺序排列各对象的数据结构。数组的线性顺序是由数组下标决定的,然而与数组不同的是,链表的顺序 是由各个对象里面的指针决定的。链表为动态集合提供了一种简单而灵活的表示方式。单向链表中每个对象有一个元素和一个next指针,指向下一个链表对象:x为单向链表中的一个元素,x.next指向它在链表中的后继元素。链表中最后一个元素是没有后继元素的,它原创 2018-01-30 22:37:13 · 382 阅读 · 0 评论 -
数据结构栈---java实现
数据结构栈,原则是先进后出,就是把羽毛球装到球桶里面,最先放进去的羽毛球,一定是最后拿出来的(排除掉球桶底掉的情况);最后放进去的球,一定是最先拿出来的。栈的操作:push--压栈,将元素压入栈,栈的大小加1(把羽毛球放进球桶,为啥叫压栈,就是放到最底部)pop---出栈,将栈顶的元素取出,栈的大小减1(从球桶中取出一个羽毛球,只能取出第一个羽毛球吧)peek---查看栈顶元素...原创 2018-07-17 23:22:48 · 251 阅读 · 0 评论 -
剑指offer面试题2:实现单例模式-----java实现
最近计划跟着剑指offer的面试题学习一下算法。都是学习。面试题2: 设计一个类,我们只能生成该类的一个实例。我们来提供五种方法来实现:1 最简单的单例模式,但是只适合在单线程下使用(不好)package com.no2;/** * 简单单例模式(只适合单线程下使用) * * @author yushen * */public class Singleton { // 单例模...原创 2018-06-28 22:13:01 · 201 阅读 · 0 评论 -
排序算法之快速排序
几种排序算法中,比较快速且不浪费空间的排序算法,就是快速排序。java实现快速排序的代码:package yushen0.sort;/** * * @class_name QuickSort.java * @package_name yushen0.sort */public class QuickSort { public static void main(String...原创 2018-05-30 11:21:45 · 161 阅读 · 0 评论 -
排序算法之归并排序
学习一下归并排序归并排序采用了“分治法”的策略,对要排序的数组进行分开排序,再合并,并且利用递归的思想实现。 ( 配图借鉴自图解排序算法(四)之归并排序 )2 这样对归并排序的大致思路就了解了,接下来代码实现一下:package yushen0.sort;/** * 归并排序 * * @c...原创 2018-05-22 19:10:31 · 180 阅读 · 0 评论 -
排序算法之选择排序
1 选择排序顾名思义就是排序中会进行一次选择操作。 选择排序的基本思路: 从第一个元素开始,每次从未排序的数组元素中,选择最小的元素出来,加入到前面已排序的行列。 举例: 对数组{8,6,5,9,1,3,2}进行选择排序 原始数组:8,6,5,9,1,3,2 第一次排序:1,6,5,9,8,3,2 第二次排序:1,2,5,9,8,3,6 第三次排序:1,2,3,9,8,5,6 第四...原创 2018-05-22 16:34:53 · 190 阅读 · 0 评论 -
排序算法之插入排序
1 前面对插入排序已经学习过一篇了算法基础学习-直接插入排序上次没写的一次是,插入排序是属于内排序的一种,什么叫内排序呢?就是说在内存中操作存储数据,不会去占用外存空间的排序。冒泡,插入,希尔,堆排序,归并排序,快速排序都是内排序的范畴,我会写下来的,嗯。而插入排序分为直接插入排序和二分法插入排序;二分法插入排序减少了比较的次数。但是实现排序的时间复杂度都是 O(N^2);空间复杂度是O(1);...原创 2018-05-21 19:01:09 · 142 阅读 · 0 评论 -
两个有序数组的合并-------Arrays.sort()方法源码解析
问:如何实现两个有序数组的合并(以int类型数组为例),合并成一个有序数组面试官如果抛出这个问题,答案会有很多种,比如插入排序,比如快速排序,还有归并排序,当然首先应该想到的就是归并排序如果面试官问我这个问题,我会这样回答: 两个有序数组合并,实现选择的排序方法有很多,如果是基本数据类型的数组,而且规模很小,元素个数在47个以内的,可以用插入排序,规模再大一些,286以内的,可以选择快速排序,否则...原创 2018-03-24 21:07:36 · 1115 阅读 · 0 评论 -
数据结构-双向链表(一)(java)
之前学习了单向链表,没写到单向循环链表,这里简单学习记录一下,单向非循环链表的尾节点元素的next指向的是null,也就是没有后继节点,并且头节点没有前驱元素,就是一条链子,首尾不相连。而单向循环链表就是头节点的前驱元素就是尾节点,尾节点的后继元素是头节点,next就不是null了。循环链表就是首尾相连的链子。现在学习一下双向链表的实现(非循环)双向链表的每个元素都有一个关键字和两个指针prev+...原创 2018-03-08 21:37:07 · 209 阅读 · 0 评论 -
算法基础学习---直接插入排序
1.什么是插入排序?算法导论上面举了一个比较形象的例子:扑克牌。桌子上面放一副扑克牌,我们抓牌的时候,刚开始手里是没有牌的,我们开始一张一张拿到牌往左手塞,第一张K,放到手里,这时候左手已经有一张牌了,而且是有序的,这时候就开始有了循环不变的一组(接下来会解释),拿到第二张牌,是Q,就放到K的右边(当然你也可以习惯放到左边),这时候左手已经有两张牌了,而且是有序的,第三张是A,就寻找合适的位置原创 2018-01-24 22:46:56 · 377 阅读 · 1 评论 -
数据结构-单向链表(二)(Java)
上一节写了单向链表的实现,现在来写一下单向链表的排序上一节写的单向链表按照先进后出的原则实现的单向链表,这一节依然按照先进后出的原则实现链表。实现链表的代码在上一节,这里就只按照冒泡排序的方法排序一个链表,顺便可以学习一下冒泡排序。1.冒泡排序冒泡排序是一种比较简单的排序算法。它重复的走访需要排序的数列,每一次比较相邻的元素,如果元素排列部不符合我们的要求(从小到大或从大到小的顺序原创 2018-01-31 23:11:37 · 153 阅读 · 0 评论 -
LeetCode-20:有效的括号(JAVA实现)
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。 解析:对于这种前后匹配的问题,脑袋里第一个想法就是使用栈来实现。代码:class Solution { public boolean isValid(...原创 2018-11-30 11:06:42 · 461 阅读 · 0 评论