自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

我的程序之路

Thinking in program

  • 博客(20)
  • 收藏
  • 关注

原创 ArrayList源码解析

前言: ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素、灵活的设置数组的大小等。 一:ArrayList的继承结构与定义:

2017-01-04 10:51:03 174

原创 ArrayList源码解析

前言: ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素、灵活的设置数组的大小等。 一:ArrayList的继承结构与定义:

2017-01-04 10:50:40 257

原创 装饰模式(Decorator)

前言: 装饰模式又名包装模式。装饰模式以对客户端透明以的方式扩展对象的功能,换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不使用创造更多子类的情况下,将对象加以扩展。是继承关系的一个替代方案。 (一)装饰模式的简略图: (二)装饰模式的环境角色: 1.抽象构件(Component)角色:给出一个抽象接口,以规范准备接受附加责任的对

2016-05-09 15:50:41 695

原创 观察者模式(Observer)

前言: 观察者(Observer)模式是对象的行为模式,又叫做发布-订阅模式、模型-视图模式、源-监听器模式或从属者模式。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化是,会让通知所有观察者对象,是他们能够自动更新自己。 (一)观察者模式的简略图: (二)观察者模式的环境角色

2016-05-07 16:59:19 2353

原创 策略模式

前言: 策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现 算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税 ”就有不同的算税方法。策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个 算法或行为族。恰当使用继承可以把公共的代码转移到父类里面,从而避免重复的代码。 (一)策略模式的定义:

2016-04-29 21:43:37 252

原创 排序总结(二)

前言: 本篇总结插入排序和希尔排序,把两种放在一起讨论的原因,两种排序的算法的思想是很相似的,可以说希尔排序就是插入排序的改进版本。 一,插入排序   插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排

2016-03-19 17:34:52 434

原创 排序总结(一)

各种排序的性能总结 一:冒泡排序 原理:原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束。冒泡排序对n个项目需要O(n^2)的比较次数,且可以原地排序。尽管这个算法是最简单了解和实现的排序算法之一,但它对于少数元素之外的数列排序是很没有效率的。 例子: 元数据:1

2016-03-13 19:39:34 463

原创 java反射分析

Java反射机制可以让我们在编译期(Compile Time)之外的运行期(Runtime)检查类,接口,变量以及方法的信息。反射还可以让我们在运行期实例化对象,调用方法,通过调用get/set方法获取变量的值。 一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C+

2015-09-09 11:19:21 293

转载 进程与线程

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。 1. 计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。 2. 假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。

2015-08-25 14:17:42 246

转载 链表总结

链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力。链表的操作也离不开指针,指针又很容易导致出错。综合多方面的原因,链表题目在面试中占据着很重要的地位。本文对链表相关的面试题做了较为全面的整理,希望能对找工作的同学有所帮助。 链表结点声明如下: struct ListNode {     int m_nKey

2015-06-03 12:46:52 250

转载 线索二叉树

一、线索二叉树的原理     通过考察各种二叉链表,不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数。准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。 优点:遍历更快速、使用内存更少 如下图所示。     因此,提出了一种方法,利用原来的空链域存放指针,指向树中其他结点。这种指针称为线索。

2015-05-28 12:31:18 311

原创 二叉树的递归遍历

#include #include ng namespace stdusi; struct node { struct node * lchild; struct node * rchild; int data; }node; typedef struct node * BTREE; /*BTREE CreateBT(int v,BTREE ltree,BTREE rt

2015-05-16 16:20:04 375

原创 AVL树的旋转分析与实现

AVL树是带有平衡条件的二叉查找树。这个平衡条件必须要容易保持,而且它须保证树的深度是O(log N).**一棵AVL树是其每个节点的左子树和右子树的高度最多插1的二叉查找树** 当

2015-05-04 23:22:20 460

原创 队列的数组实现

#ifndef QUEUE_H_INCLUDED #define QUEUE_H_INCLUDED struct QueueRecord; typedef struct QueueRecord * Queue; int IsEmpty(Queue); int IsFull(Queue Q); Queue CreateQueue(int MaxElements); void DisposeQueu

2015-05-02 16:15:50 357 1

转载 中缀表达式转后缀表达式

#include #include #define ElementType char typedef struct Node *PtrToNode; typedef PtrToNode Stack; typedef struct Node { ElementType Element; PtrToNode Next; }; int IsEmpty(Stack S); Stac

2015-04-25 14:57:56 324

原创 栈的实现

比较简单,直接上代码了 #ifndef _Stack_h struct Node; typedef int ElementType; typedef struct Node * PtrToNode; typedef PtrToNode Stack; int IsEmpty(Stack S); Stack CreateStack(void); void DisposeStack(St

2015-04-18 23:09:11 320

原创 时间复杂度

最近在跟数据结构的课程,发现了这道题从n^3刷到n^2最后刷到nlogn,觉得对于理解算法的时间复杂度比较有帮助,于是记录下来,以便以后查看。 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 输入格式: 输入第1行给出正整数 K ( 输出格式: 在一行中输出最大子列和。如果序

2015-01-10 21:50:56 341

原创 linux目录结构

root:存放root用户的相关文件 home:存放普通用户的相关文件 bin:存放常用的命令的目录 sbin:要具有一定权限才可以使用命令 boot:存放引导相关的文件 etc:存放配置相关文件 var:存放经常变化的文件 usr:文件默认安装的文件夹 常用命令 pwd:显示当前在哪个路径下. 添加用户: useradd ——用户名 passwd ——用户名 删除用户u

2014-11-20 23:14:33 316

原创 java学习笔记-继承与接口

继承: 当子类和父类出现同样的函数时,子类函数重写(覆盖)父类函数. 覆盖: 1.子类覆盖父类,必须保证子类权限大于等于父类. 2.静态只能覆盖静态. 重写和重载 重载:只看同名函数的参数列表. 重写:方法一摸一样. 子父类中的构造函数: 构造函数跟着类名走. 在对子类对象进行初始化时,父类的构造函数也会进行. 那是因为子类的构造函数默认第一行有一条隐式的语句supe

2014-11-11 14:37:58 390

原创 字符串替换

#include #include #include using namespace std; int main(){ int i,j,index,len,len2; char str[101],word[101],newword[101],tmp[101]; while(gets(str)){ int index=0; len=strlen(str); cin>>word;

2014-09-17 16:13:52 1317

空空如也

空空如也

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

TA关注的人

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