自定义博客皮肤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)
  • 收藏
  • 关注

原创 【Android官网学习】依赖注入DI

什么是依赖注入类通常需要引用其他类。例如,Car 类可能需要引用 Engine 类。这些必需类称为依赖项,在此示例中,Car 类依赖于拥有 Engine 类的一个实例才能运行。类可通过以下三种方式获取所需的对象:类构造其所需的依赖项。类创建并初始化自己的依赖类型的实例。从其他地方抓取。某些 Android API(如Contextgetter 和 getSystemService())的工作原理便是如此。以参数形式提供。应用可以在构造类时提供这些依赖项,或者将这些依赖项传入需要各个依赖项的函

2022-02-20 15:57:47 1421

原创 二叉树的建立

将二叉树中每个结点的空指针引出一个虚结点,其值为一特定值,比如”#“。这种处理后的二叉树称为原二叉树的扩展二叉树。前序遍历序列建立二叉树:void CreateBiTree(BiTree *T){ TElemType ch; scanf("%c",&ch); if(ch=="#") *T=NULL; else{ *T=(BiTree)malloc(sizeof(BiTNode)); if(!*T) exit(OVERFLOW) /*没有空间,溢出*/; (*T)

2022-02-05 15:02:27 542

原创 【查找算法(一)】有序表查找

二分查找前提是线性表中的记录必须关键码有序,线性表必须采取顺序存储。基本思想:在有序表中,取中间记录为比较对象,若给定值与中间记录的关键字相等,则查找成功;若小于,则在中间记录的左半区继续查找;若大于,则在右半区继续查找。不断重复上述过程,直到查找成功,或所查区域无记录,查找失败为止。时间复杂度:O(logn)示例代码:int Binary_Search(int *a,int n,int key){ int low,high,mid; /*首位用作哨兵*/ low=1; high=n;

2022-02-05 13:47:51 1069

原创 【排序算法(二)】希尔排序

希尔排序将待排序的记录分割成子序列,整体序列是基本有序的,再在这些子序列中进行直接插入排序。所谓基本有序,就是小的关键字基本在前面,大的基本在后面。如何将记录分割成子序列:跳跃分割的策略。将相距某个增量的记录组成一个子序列。希尔排序是基于直接插入排序的以下两点性质而提出的改进方法:1.插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。2.插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。希尔排序是将待排序的数组元素 按下标的一定增量分组,分成多个子序列

2022-02-03 22:04:30 744

原创 【排序算法(一)】各种排序算法的主要方式和复杂度分析

概念1,排序:按关键字有序的序列2,稳定性:假设ki=kj(1<=i,j<=n,i≠j),且在排序前ri领先于rj(即i<j),如果排序后ri依然领先于rj,则称所用的排序方法是稳定的,否则就是不稳定的。3,内排序:排序过程中,将待排的所有记录全部放在内存中。性能指标:①时间性能:关键字比较次数和记录移动次数(都尽可能少)②辅助空间③算法的复杂度:算法本身的复杂度(?)4,外排序:由于记录的个数太多,不能同时放置在内存中,整个排序需要在内外存之间多次进行数据交换才能实现。

2022-02-03 00:04:52 940

原创 刷题-链表翻转

非递归/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**/import java.util.ArrayList;public class Solution { public ArrayList<Integer>

2021-12-11 13:42:11 369

原创 遍历二叉树

二叉树遍历traversing binary tree原理二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。二叉树遍历方法1,前序遍历若二叉树为空.,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子2,中序遍历若树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后是访问根结点,最后中序遍历右子树。3,后序遍历若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树

2021-02-10 23:07:07 105

原创 二叉树

二叉树Binary Tree的定义二叉树Binary Tree是n(n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两颗互不相交的、分别称为根结点的左子树和右子树的二叉树组成。对于在某个阶段都是两种结果的情形,比如开和关、0和1、真和假、上和下、对与错、正面与反面等,都适合用二叉树来建模。二叉树的特点:每个结点最多有两棵子树,所以二叉树中不存在度大于2 的结点左子树和右子树都是有顺序的,次序不能颠倒即使树中某结点只有一棵子树,也要区分它是左子树还是右子树二叉树具

2021-01-28 16:48:55 215

原创

树Tree的定义1,树是n(n≥0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:有且仅有一个特定的称为根 Root的结点当n>1时,其余结点可分为m(m>0)个互不相交的有限集合 T1,T2,…,Tm,其中每一个集合本身又是一棵树,并且称为根的子树SubTree。说明:n>0时根结点是唯一的,不可能存在多个根结点m>0时,子树的个数没有限制,但他们一定是互不相交的。如下图所示的,就不符合树的定义,因为它们都有相交的子树2,结点分类...

2021-01-26 14:45:48 132

原创

串string的定义1,串是由零个或多个字符组成的有限序列,又名字符串。串中的字符数目n称为串的长度,零个字符的串称为空串(null string)。2,空格串:只包含空格的串。注意其和空串的区别:空格串是有内容有长度的,而且可以不止一个空格3,子串和主串:串中任意个数的连续字符组成的子序列称为该串的子串,相应的,包含子串的串称为主串。子串在主串中的位置就是子串的第一个字符在主串中的序号。串的比较串的比较是通过组成串的字符的编码来进行的,而字符的编码指的是字符在对应字符集中的符号。ASCII

2021-01-25 16:09:05 114

原创 队列

队列queue 的定义1,只允许在一端进行插入操作,而在另一端进行删除操作的线性表。2,先进先出 FIFO,允许插入的一端称为队尾,允许删除的一端称为队头。抽象数据类型ADT 队列(Queue) Data 同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系。Operation InitQueue (*Q):初始化操作,建立一个空队列Q。 DestroyQueue (*Q): 若队列Q存在,则销毁它。 ClearQueue (*Q): 将队列Q清空。 QueueEmpty (Q

2021-01-21 17:34:40 139

原创

栈 stack的定义1,栈是限定仅在表尾进行插入和删除操作的线性表2,允许插入和删除的一端称为栈顶 top,另一端称为栈底 bottom,不含任何数据元素的栈称为空栈。 栈又称为 后进先出 LIFO 的线性表。注意:栈是一种特殊的线性表3,插入操作,叫做进栈,也叫压栈,入栈;删除操作,叫做出栈,也叫弹栈。4,进栈出栈的变化形式最重要的是保证是栈顶元素出栈就行,而不是对元素进行的时间进行限制。栈的抽象数据类型ADT 栈( stack )Data 同线性表。元素具有相同的类型,相邻元素具有前

2021-01-20 17:47:43 189

原创 双向链表

结构1,/*线性表的双向链表存储结构*/typedef struct DulNode{ ElemType data; struct DulNode *prior; struct DulNode *next;} DulNode, *DuLinkList;2,图解循环 + 头结点 空链表非空循环 + 带头结点 双向链表3,某一个结点,它的后继的前驱,前驱的后继,都是自己p->next->prior = p = p->prior->next;...

2021-01-20 10:15:39 66

原创 glide的基本用法

声明1,添加依赖implementation ‘com.github.bumptech.glide:glide:3.7.0’2,添加权限加载图片

2021-01-19 10:18:36 318

原创 循环链表

一,定义将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表。循环链表可以从任意一个结点出发,访问到链表的全部结点。图解(第一张为空表):二,指向终端结点的尾指针用指向终端结点的尾指针来表示循环列表,查找开始结点和终端结点都很方便。若终端结点用尾指针rear指示,则查找终端结点是O(1),而开始结点,其实就是rear->next->next,其时间复杂度也是O(1)。三,合并两个循环列表p = re

2021-01-15 16:31:55 262

原创 静态链表

静态链表1,定义用数组描述的链表叫做静态链表 ,也叫游标实现法/*线性表的静态链表存储结构*/#define MAXSIZE 1000typedef struct{ ElemType data; //游标为0时表示无指向 int cur;}Component,StaticLinkList[MAXSIZE];说明:数组的第一个和最后一个元素作为特殊元素处理。不存数据。数组的第一个元素,即下标为0的元素的cur存放备用链表的第一个结点的下标;数组的最后一个元素的cur则存放第一个有数值的

2021-01-15 15:09:25 225

原创 单链表

一,链式存储结构的一些基本概念在链式结构中,除了要存数据元素之外,还要存储它的后继元素的存储地址。为了表示每个数据元素ai与其后继数据元素ai+1之间的逻辑关系,对于ai来说,除了存储其本身的信息之外,还需要存储一个指示其直接后继的信息。存储数据元素信息的域叫数据域,存储直接后继位置的域叫指针域,指针域中存储的信息称做指针或链接,这两部分信息组成数据元素ai的存储映像,称为结点(Node)。n个结点链接成一个链表,即为线性表的链式存储结构。因为此链表的每个结点中只包含一个指针域,所以叫做单链表。链表

2021-01-15 10:47:53 520 1

原创 线性表的顺序存储结构

一,什么是线性表零个或多个数据元素的有限序列说明:它是一个序列,即,元素之间是有顺序的。(第一个元素无前驱,最后一个元素无后继,其他每个元素有且只有一个前驱和后继)线性表强调有限。二,数学语言定义三,线性表的抽象数据类型(ADT)ADT 线性表(List)Data 线性表的数据对象集合为{a1,a2,.....,an},每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素;除了最后一个元素an外,每一个元素有且只有一个直接后继元素。数据元素

2021-01-13 17:00:32 5992

原创 接口

接口接口示例

2021-01-07 14:56:22 90

原创 继承

1,类,超类和子类定义子类:关键字extends已存在的类称为超类、基类或父类;新类称为子类、派生类或者孩子类。super关键字的两个作用:i.调用超类的方法super.getSalary();//如果getSalary超类和子类都有,这里调用的是超类的方法ii.调用超类的构造器调用构造器的语句只能作为另一构造器的第一条语句出现。多态一种对象变量可以指示多种实际类型的现象被称为多态。就是说,程序中出现超类对象的任何地方都可以用子类对象置换,也就是说,可以用子类对象给超类对象赋值(但是将一

2021-01-06 17:11:13 75

原创 对象与类

1,面向对象程序设计(OOP)类class由类构造对象的过程称为创建类的实例(instance)。封装形式上封装将数据的行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。对象中的数据称为实例域,操作数据的过程称为方法。实现封装的关键就啊是不能让类中的方法直接地访问其他类的实例域。继承通过扩展一个类来建立另外一个类。“神通广大的超类” Object。对象三个主要的特性:行为,状态,标识行为改变状态,状态影响行为。识别类面向过程的程序设计,从顶部的main函数开始编写程序。面向对象

2021-01-06 10:57:08 127 2

原创 数组

数组声明int[] a; 或 int a[];声明和初始化1,int[] a = new int[100];//100是数组的长度初始化:数字数组全部初始化为0,boolean数组为false,对象数组为nul。2,创建并赋值int[] a = {2,3,5,7,11,13}3,匿名数组:没有名字的数组, 通过指针或直接引用数组本身来使用, 包括匿名字符串。通过这种方式可以在不创建新变量的情况下重新初始化一个数组。smallPrimes = new int[] {17,29,23,29,3

2020-12-30 14:16:18 91

原创 输入输出

一,控制台输入输出输出:System.out.println输入:需要先构造一个Scanner对象,与“标准输入流”System.in关联Scanner in = new Scanner(System.in);可以读取一行,以及多种不同类型的数据。因为控制台输入是可见的,不适用于读取密码,读取密码可以用Console类,只能读取一行,不能读取一个单词或者一个数值。二,文件输入和输出读取:用一个File对象构造一个Scanner对象Scanner in = new Scanner(Path

2020-12-30 13:03:19 46

原创 数据类型

java是一种强类型语言,必须为每一个变量声明一种类型。java一共有8种基本类型:4种整型2种浮点类型charboolean4种整型int 4字节long 8字节short 2字节byte 1字节整型的范围和java运行的机器无关,且没有无符号的类型int和long比较常用,byte和short类型主要用于特定的应用场合,比如底层的文件处理或者需要控制占用存储空间量的大数组。浮点类型float 4字节(有效位6~7位)double 8字节(有效位15位)没有加后缀f的默认是d

2020-12-30 10:34:49 44

原创 刷题笔记

1,Statement类Statement、PreparedStatement(它从 Statement 继承而来)和CallableStatement(它从 PreparedStatement 继承而来)。2,Math.round(long)Math.floor(a + 0.5d)Math.floor为不大于当前数的最大整数3,成员内部类 局部内部类 外部类外部类就是一个常见的类成员内部类是 作为外部类的一个成员存在的类局部内部类是 在方法中定义的内部类把成员内部类作为一个成员来看,

2020-12-30 09:53:41 49

原创 跟着官网学Android Topic1day1——Activity简介

Activity简介Activity类是Android 应用组件的关键组件,四大组件之一。在编程范式中,应用是通过main()方法启动的,而Android系统会调用与其生命周期特定阶段相对应的特定回调方法来启动Activity实例中的代码。一,概念移动应用和桌面应用体验不同之处在于:移动应用,用户与应用的互动并不总是在同一位置开始,而是不确定的。例如,从主屏幕打开电子邮件应用,可能看到电子邮件列表;如果通过其他应用启动电子邮件应用,可能直接进入撰写页面。当一个应用调用另一个应用时,调用方会调用另一

2020-12-28 13:59:26 142

原创 算法

1,数据结构与算法关系总之密不可分2,算法定义算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。3,算法的特性输入输出零个或多个输入,至少一个或多个输出。有穷性算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。确定性算法的每一步骤都具有确定的含义,不会出现二义性。可行性算法的每一步都可行,即,每一步都能够通过执行有限次数完成。4,算法设计的要求正确性算法至少应该具有输入、输出和加工处理无歧义

2020-12-24 09:38:01 230

原创 绪论

《大话数据结构》第一章 绪论:数据结构的一些概念

2020-12-23 15:28:56 67

原创 初识java多态性以及Integer和int类型用==比较

初识java多态性以及Integer和int类型用==比较一,多态多态就是同一个接口,使用不同的实例会有不同的操作。多态实现:动态绑定。引用变量所指向的具体类型和该引用变量发出的具体方法在编程时并不确定,在程序运行期间才确定。就是说引用变量到底指向哪个类的实例对象,以及调用什么方法在程序执行期间才能完全确定。二,==Integer和int比较Integer是int的封装类,当Integer与int进行==比较时,Integer就会拆箱成一个int类型,所以还是相当于两个int类型进行比较,

2020-11-03 17:26:15 253

原创 B站一面

B站一面面试总结:1,问我看过什么书,对什么比较了解,数据结构,操作系统这种 为什么不是这个专业选这个工作2,对安卓的那一块比较精通/熟悉:UI 数据操作3,判断Integer和int是否相等能直接用==吗 为什么;自己实现equals要注意什么4,什么情况存在内存泄漏:hanlder等5,编译原理6,多线程7,生命周期(A组件B组件 A组件B窗口 两者有什么区别)8,java有哪些变量9,arrayList和linkList的区别,哈希表10,android UI渲染的过程,以及比如

2020-10-19 22:39:28 112

空空如也

空空如也

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

TA关注的人

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