自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

转载 《数据结构与算法》之红黑树

二叉查找树对于某个节点而言,其左子树的节点关键值都小于该节点关键值,右子树的所有节点关键值都大于该节点关键值。二叉查找树作为一种数据结构,其查找、插入和删除操作的时间复杂度都为 O(logN) ,底数为 2。但是我们说这个时间复杂度是在平衡的二叉查找树上体现的,也就是如果插入的数据是随机的,则效率很高,但是如果插入的数据是有序的,这种情况下查找的时间复杂度为 O(N),而不是 O(logN) 。当...

2018-12-10 20:52:51 233

原创 《数据结构与算法》之二叉树

在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。二叉查找树要求:若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值; 它的左、右子树也分别为二叉排序树。二叉查找树的实现:1...

2018-12-09 17:03:46 143

转载 《数据结构与算法》之递归(3)

4、汉诺塔问题汉诺塔问题是由很多放置在三个塔座上的盘子组成的一个古老的难题。如下图所示,所有盘子的直径是不同的,并且盘子中央都有一个洞使得它们刚好可以放在塔座上。所有的盘子刚开始都放置在A 塔座上。这个难题的目标是将所有的盘子都从塔座A移动到塔座C上,每次只可以移动一个盘子,并且任何一个盘子都不可以放置在比自己小的盘子之上。递归算法为:  ①、从初始塔座A上移动包含n-1个盘子到中介塔...

2018-12-09 10:43:49 115

转载 《数据结构与算法》之递归(2)

2、递归的二分查找注意!!!二分查找的数组一定是有序的。在有序数组array[]中,不断将数组的中间值(mid)和被查找的值比较,如果被查找的值等于array[mid],就返回下标mid; 否则,就将查找范围缩小一半。如果被查找的值小于array[mid], 就继续在左半边查找;如果被查找的值大于array[mid],  就继续在右半边查找。 直到查找到该值或者查找范围为空时, 查找结束。...

2018-12-06 21:08:22 132

转载 《数据结构与算法》之递归(1)

递归是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。递归三要素:(1)边界条件、(2)递归前进段、(3)递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归...

2018-12-05 20:42:30 402

原创 《数据结构与算法》之队列(基于链表构造)

在队列的形成过程中,可以利用线性链表的原理,来生成一个队列。新元素(等待进入队列的元素)总是被插入到链表的尾部,而读取的时候总是从链表的头部开始读取。每次读取一个元素,释放一个元素,即所谓的动态创建,动态释放。因而不存在溢出等问题。由于链表由节点连接而成,遍历也方便。public class Queue3 { private DoubleLinkedList array; private...

2018-11-21 21:32:21 106

原创 《数据结构与算法》之队列(基于数组构造)

队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。数组实现队列,分为顺序队列和循环队列。1、顺序队列建立顺序队列结构需要分配静态内存或者动态申请连续的内存,设置队头指针front和队尾指针rear。当在队尾插入一...

2018-11-13 10:44:06 210

原创 《数据结构与算法》之栈的应用

1、字符串的翻转(逆序)根据栈“后进先出”的特点,可以利用栈对字符串进行反转,即实现字符串的逆序。借助于《数据结构与算法》之栈(2)中的栈结构,相应实现的代码如下: public static void ReverString() { BigStack stack = new BigStack(); String str="123456789"; System.out.p...

2018-11-10 19:30:44 168

原创 《数据结构与算法》之栈(2)

如《数据结构与算法》之栈(1)所述,所构建的栈存在着如下问题:(1)容量固定问题,即栈创建之后,容量固定,不能够进行扩容,对于小型的可预知的应用来说,简单的栈就可以了。但是对于不可预知的应用,此栈结构将不再适合,需要构建容量可扩展的栈结构;(2)此栈只能存储int类型数据,对于其它类型数据将不再适用,可以用object类型代替int类型做数据定义。针对以上问题,下面提供一种新的栈结构:...

2018-11-10 18:57:27 137

原创 《数据结构与算法》之栈(1)

栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top),相对地,把另一端称为栈底。对栈的基本操作有push(进栈)和pop(出栈),前者相当于插入,后者则是删除最后插入的元素。由于堆叠数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。栈也称为后进先出表。其实现代码如下:public cla...

2018-11-10 16:41:53 140

原创 《数据结构与算法》之链表—双向链表

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。双向链表构造代码如下:public class DoubleLinkedList { private Node head; // 链表头 private Node tail; // 链表尾 private in...

2018-11-10 11:21:30 657

原创 《数据结构与算法》之排序算法(归并排序)

 5、归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。其时间复杂度为O(nlogn),空间复杂度为O(n),是稳定的排序算法。归并排序算法的工作原理如...

2018-11-10 08:39:04 258

原创 《数据结构与算法》之排序算法(插入排序、希尔排序)

3、插入排序插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2),是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到...

2018-11-09 21:19:08 524

原创 《数据结构与算法》之排序算法(冒泡排序、选择排序)

排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。排序算法分类:一、非线性时间比较类排序1、交换排序(冒泡排序、快速排序)2、插入排序(简单插入排序、布尔排序)3、选择排序(简单选择排序、堆排序)4、归并排序(二路归并排序、多路归并排序)二、线性时间非比较类排序1、计数排序2、...

2018-11-08 20:30:17 275

原创 《数据结构与算法》之算法简介

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。一个算法应该具有以下五个...

2018-11-07 21:34:34 422

原创 《数据结构与算法》之数据结构简介

数据结构=数据+结构,数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。一、数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。逻辑结构包括:集合 ...

2018-11-07 20:36:15 370

原创 《数据结构与算法》之链表—有序链表

2、有序链表有序链表是在单链表的基础上对单链表的表头节点插入进行修改,从表头开始根据插入值与链表中原先存在的数据节点进行比较判断,若大于(或小于)该节点就向后移一个节点进行比较,直至不大于(或小于)该节点,最终实现按照从小到大(或从大到小)的顺序排列链表。// 插入节点,并按照从小到大的顺序排列 public void insert(int value) { Node node =...

2018-11-06 21:35:05 1257 1

原创 《数据结构与算法》之抽象数据类型(ADT)

抽象数据类型(abstract data type,ADT)是带有一组操作的一些对象的集合。抽象数据类型是数学的抽象,只不过这种数据类型带有自己的操作。比如表、集合、图以及与它们各自的操作一起形成的这些对象都可以看做抽象数据类型,就像整数、实数、布尔数等都是数据类型一样。整数、实数、布尔数都有各自相关的操作,而抽象数据类型也是如此。对于集合ADT,可以有添加、删除、以及其它一些操作。也可以只要两种...

2018-11-06 20:53:04 1877

原创 《数据结构与算法》之链表—双端链表

2、双端链表双端链表就是在单链表的基础上增加一个尾节点,使链表既有头节点又有尾节点,这样方便进行链表尾的访问和删除。其计算复杂度如下:1、在表头插入一个新的节点,时间复杂度O(1) ;2、在表尾插入一个新的节点,时间复杂度O(1) ;3、删除表头的节点,时间复杂度O(1) ;4、删除表尾的节点,由于只保存了表尾的节点,而没有保存表尾的前一个节点(单向,只能从前往后推),所以在删除表尾节点时需要...

2018-11-06 20:04:08 186

原创 《数据结构与算法》之链表—单向链表

链表(LinkedList)链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点(链表中每一个元素称为节点)组成,节点可以在运行时动态生成。每个节点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。相比于线性表顺序结构,链表操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,...

2018-11-05 19:56:26 158

原创 《数据结构与算法》之线性表

数据结构=数据+结构,是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。Java集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection接口又有3种子类型,List、Set和Queue,再下面是一些...

2018-11-03 19:57:48 213

原创 《数据结构与算法》之函数对象

一种将函数作为参数传递的独创方法是注意到对象既包含数据也包含方法,于是可以定义一个没有数据而只有一个方法的类,并传递该类的一个实例。事实上,一个函数通过将其放在一个对象内部而被传递。这样的对象通常叫做函数对象。下面例子显示函数对象想法的最简单的实现。findMax的第二个参数是Comparator类型的对象。接口Comparator在java.util中指定并包含一个compare方法。实现接...

2018-10-24 20:26:08 134

原创 《数据结构与算法》之泛型——带有限制的通配符

数组的协变性导致代码得以编译,但此后会产生一个运行时异常(ArrayStoreException)。因为使用泛型的全部原因就在于产生编译器错误而不是类型不匹配的运行时异常,所以泛型集合不是协变的。泛型(以及泛型集合)不是协变的(但有意义),而数组是协变的。若无附加的语法,则用户就会避免使用集合(colleection),因为失去协变性使得代码缺少灵活性,而通配符可以弥补这个不足。通配符用来...

2018-10-21 21:10:17 150

原创 《数据结构与算法》之泛型——自动装箱/拆箱

如果一个int型变量被传递到需要一个Integer对象的地方,那么编译器将在幕后插入一个对Integer构造方法的调用,这就叫做自动装箱。而如果一个Integer对象被放到需要int类型的地方,则编译器将在幕后插入一个对intValue方法的调用,这就叫做自动拆箱。对于其它7对基本类型/包装类型,也是如此。例:public class BoxingDemo { public stat...

2018-10-21 20:39:29 207

原创 《数据结构与算法》之泛型——简单的泛型类和接口

当指定一个泛型类时,类的声明则包含一个或多个类型参数,这些参数被放在类名后面的一对尖括号内。例:public class Cell<AnyType> { private AnyType value; public AnyType read(){ return value; } public void write(AnyType x){ value=x;...

2018-10-21 20:08:31 227

原创 《数据结构与算法》之泛型——数组类型的兼容性

如Employee和Student都继承自Person,考虑下面两条赋值语句:Person arr=new Employee[5]; //Employee和Person是兼容的arr[0]=new Student(……); //Student和Person也是兼容的两句都编译,而arr[0]实际上是引用一个Employee,可是Student和Employee是不兼容的,这...

2018-10-21 19:29:04 421

原创 《数据结构与算法》之泛型——使用接口类型表示泛型

如:考虑再由一些项组成的数组中找出最大项的问题。基本的代码是类型无关的,但是它需要一种能力来比较任意两个对象。因此,不能直接找出Object的数组中的最大元素——我们需要更多的信息。最简单的方法就是找出Comparable的数组中的最大元。要确定顺序,可以使用compareTo方法,它对所有的Comparable都必然是现成可用的。1、只有实现Comparable接口的那些对象才能够作为Com...

2018-10-21 18:59:51 431

原创 《数据结构与算法》之泛型——基本类型的包装

对基本类型的包装阐述了包装类(wrapper class)的基本主题。一种典型的用法是存储一个基本的类型,并添加一些这种基本类型不支持或不能正确支持的操作。对于Java来说,虽然每一个引用类型都和Object相容,但是8种基本类型却不能。于是,Java为这8种基本类型中的每一种都提供了一个包装类。每一个包装对象都是不可改变的(就是说它的状态绝不能改变),它存储一种当该对象被构建时所设置的原值,...

2018-10-20 20:41:55 122

原创 《数据结构与算法》之泛型——使用Object表示泛型

面向对象的一个重要目标就是对代码的重用。而支持这个目标的一个重要的机制就是泛型机制(generic mechanism):如果除去对象的基本类型外,实现方法是相同的,那么就可以用泛型实现(genetic implementation)来描述这种基本的功能。使用Object表示泛型:Java中的基本思想就是可以通过使用像Object这样的超类来实现泛型类。示例如下:public cla...

2018-10-20 19:49:59 317

原创 《数据结构与算法》之递归函数的调用

递归函数的调用当一个函数用它自己来定义时就称为是递归的,Java允许函数进行递归调用。public class Test {    public static void main(String[] args) {              int m=f(9);    //调用递归函数        System.out.println(m);   //输出结果    }...

2018-10-20 19:00:46 840

单片机PWM控制程序

单片机PWM控制程序,用于单片机PWM波产生,控制电机或者LED的亮灭

2018-11-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除