自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Arvon

The road not taken

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

原创 设计模式: 自己手动写一个代理模式

代理模式:为另一个对象提供一个替身或占位符以访问这个对象。代理模式为另一个对象提供代表,以便控制客户对对象的访问,管理访问的方式有许多种。远程代理管理客户和远程对象之间的交互。虚拟代理控制访问实例化开销大的对象。保护代理基于调用者控制对对象方法的访问。代理模式有许多变体,例如:缓存代理、同步代理、防火墙代理、写入时复制代理。Java内置的代理支持,可以根据需要动态创建代理,并将

2015-08-27 14:00:31 1330

原创 设计模式: 自己手动写一个命令模式

.命令模式: 将“请求”封装成对象,以便使用不同的请求、队列、日志来参数化其他对象。命令模式也支持可撤销的操作。  命令对象将动作和接收者(当作的执行者)包进对象中。这个对象之暴露一个execute()方法. 命令也可以用来实现日志和事务系统。宏命令是命令的一种简单延伸,允许调用多个命令。下面是命令模式的一个类图:一个案例的源代码如下:package com

2015-08-26 14:26:49 728

原创 设计模式: 自己手动写一适配器和外观模式

适配器模式: 将一个类的接口,转换成客户所期待的接口,适配器让原本不兼容的类可以合作无间。有两种形式:类适配器和对象适配器。前者需要用到多重继承(java不支持),后者要用到组合。外观模式: 提供了一个统一的简化的接口,用来访问子系统里的一群接口。外观定义了一个高层接口,让子系统更容易使用。适配器的类图适配器的一个简单源码:package adapter;

2015-08-26 10:20:03 713

原创 设计模式: 自己手动写一个装饰者模式

装饰者模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供l比继承更有弹性的替代方案。装饰者和被装饰者有相同的超类型,你可以用一个或多个装饰者包装一个对象。既然装饰者和被装饰者有相同的超类型,所以在任何需要原始对象(被装饰者)的场合,可以用装饰过的对象替换它。装饰者可以在所委托被装饰者的行为之前或之后加上自己的行为,已达到特定的目的。对象可以在任何时候被装饰,所以可以在运行时动态地、不

2015-08-25 15:34:53 800

原创 设计模式: 自己手动写一个工厂模式(整合工厂方法模式和抽象工厂模式)

工厂模式: 所有工厂模式都用来封装对象的创建。工厂方法模式通过让子类决定该创建的对象是什么,来达到将对象的创建过程封装的目的。工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。抽象工厂模式提供一个接口,用来创建相关或依赖对象的家族,而不需要明确指定具体类。工厂方法使用继承:把对象的创建委托给子类,子类实现工厂方法来创建对象。

2015-08-25 10:18:51 1039

原创 设计模式: 策略模式的实现

1.    策略模式:定义了算法族,分别封装起来,让它们之间可以替换,此模式让算法的变化独立于使用该算法的用户。(利用组合)类图如下: 源代码如下:package Strategy;/** * 鸭子超类 * @author Arvon * */public abstract class Duck { public Duck() { su

2015-08-24 16:43:39 575

原创 设计模式:单例模式的三种创建方式及其各自的优缺点

单例模式:确保一个类只有一个实例,并提供全局访问点。在Java中实现单例模式需要私有的构造器,一个静态方法和一个静态变量。确定在性能和资源上的限制,如何选择适当的方案来实现单例,以解决多线程的问题。如果使用多个类加载器,可能导致单例失效产生多个实例。双重检查加锁不适用于1.4及更早版本的java。方式1:package singleton;/** * 同步getIn

2015-08-24 15:22:00 1449

原创 设计模式: 自己手动实现一个观察者设计模式

观察者模式: 定义了对象之间的一对多依赖,这样一来,当一个对象(被观察者)改变状态时,它的所有依赖者(观察者)都会收到通知并自动更新。在观察者模式中,会改变的是主题的状态,以及观察者的数目和类型。用这个模式, 你可以改变依赖主题状态的对象,却不必改变主题,这叫提前规划。主题和观察者都使用接口:观察者利用主题的接口向主题注册,而主题利用观察者的接口通知观察者。这样可以让两者之间运作正常,有同

2015-08-24 09:43:56 795

原创 散列技术之线性探测法

源代码如下:#include #include #define hash(v,M) (v % M)#define null(A) (key(st[A]) == key(NULLitem)) typedef char Key;struct Item{ Key key;};static struct Item NULLitem ;static struct Item *s

2015-08-22 16:21:47 1175

原创 散列技术之链地址法(基于无序链表)

源代码如下:#include #include #define hash(v,M) (v % M)typedef char Key;struct Item{ Key key;};typedef struct STnode* link;struct STnode{ Item item ; link next;};static link* heads , z ;stat

2015-08-22 14:33:22 640

原创 Skip list -- 跳跃表的插入删除搜索等ADT操作的实现与测试

源代码如下:#include #include #define lgNmax 5typedef char Key;struct Item{Key key;};typedef struct STnode* link;struct STnode{ Item item ; link *next; //多个链接域组成的数组 int sz ; // 该节点的链接数

2015-08-21 22:56:56 1248

原创 红黑树的插入操作

红黑树是2-3-4树的一个变体 #include #include //#define Key int#define hl h->l#define hr h->r#define hlr h->l->r#define hll h->l->l#define hrr h->r->r#define hrl h->r->ltypedef char Key;struct Ite

2015-08-20 23:13:57 469

原创 二叉搜索树的随机化插入和伸展插入操作(平摊法)

源代码如下:#include #include //#define Key int#define hl h->l#define hr h->r#define hlr h->l->r#define hll h->l->l#define hrr h->r->r#define hrl h->r->ltypedef int Key;struct Item{ Key key; c

2015-08-20 11:40:12 750

原创 二叉搜索树的根插入、选择、删除、合并、排序等操作的实现

源代码如下:这里的Key 不当为关键字对待, 而是把Item.c作为关键字对待#include #include //#define Key inttypedef int Key;struct Item{ Key key; char c;};typedef struct STnode* link;struct STnode{ Item item ; li

2015-08-20 09:20:31 1555

原创 基于二叉搜索树的符号表和BST排序

原代码如下:#include #include //#define Key inttypedef int Key;struct Item{ Key key; char c;};typedef struct STnode* link;struct STnode{ Item item ; link l,r; int N;};static link head , z

2015-08-19 15:18:48 648

原创 基数排序之多关键字排序运用队列

源代码如下:#include #include typedef struct QUEUEnode* link;struct QUEUEnode{ int item ; link next; link head , tail;};link NEW(int item, link next){ link x = (link) malloc(sizeof *x); x->ite

2015-08-19 08:54:19 1652

原创 二项队列的查找插入合并操作

源代码如下:/*一棵二次幂堆是一棵左有序的堆,由右子树为空左子树为完全二叉树构成的根组成二项队列:是二次幂堆的一个集合。 其中不存在相等大小的堆。其结构由队列节点数目确定 对应整数的二进制表示。 */ #include #include #define maxBQsize 40typedef struct PQnode* PQlink;typedef struc

2015-08-18 11:53:04 1802

原创 双链表优先队列ADT的实现与测试

源代码如下:#include #include typedef struct pq* PQ;typedef struct PQnode* PQlink;struct Item{int data;char c;};struct PQnode{Item key;PQlink prev,next;};struct pq{PQlink head,tail;};PQ PQinit

2015-08-17 22:46:15 1032

原创 基于堆的优先队列

源代码如下#include #include typedef struct Item *node;struct Item{ int data; char c;};static Item *pq;static int N ;void swap(Item &a,Item &b){struct Item t = a;a = b;b = t;}//自底向上堆化 完全二叉树

2015-08-17 17:31:01 527

原创 利用优先队列实现堆排序(自顶向下自底向上堆化完全二叉树的运用)

源代码如下:#include #include typedef struct Item *node;struct Item{ int data; char c;};static Item *pq;static int N ;void swap(Item &a,Item &b){struct Item t = a;a = b;b = t;}void PQinit(i

2015-08-17 17:26:51 2490

原创 采用队列实现自底向上链表归并排序

源代码如下:#include #include typedef struct node *link;struct node{ int item ; link next;}; typedef struct QUEUEnode* queue;struct QUEUEnode{ link item ; queue next;};static queue head , ta

2015-08-16 22:06:09 698

原创 归并与归并排序算法

源代码如下:#include #define maxN 20void printArray (int a[]){ int i; for(i=0;i<13;i++) printf("%2d ",a[i]); printf("\n");} //将有二个有序数列a[first...mid]和a[mid...last]合并。void mergeArray(int a[], i

2015-08-16 16:39:08 503

原创 希尔排序算法和快速排序算法

希尔排序源代码如下:#include //希尔排序 void shellSort(int a[],int l, int r){ //一次排序同一步长所组成的集合 如a[0],a[5],a[10]... int i,j,h; for(h=1;h<=(r-1)/9;h=3*h+1); //设置步长为1,4,13,40,121,...序列 for( ; h>0;h/=3) f

2015-08-16 10:43:52 642

原创 图的最小生成树之普里姆Prim算法

源代码如下:#includeusing namespace std;#define MAX_VERTEX_NUM 20#define infinity 9typedef int QElemType; typedef int EdgeData;typedef char VertexData;typedef struct { VertexData verlist[M

2015-08-15 15:57:07 1030

原创 图的广度优先遍历算法运用队列主针对邻接表有向图

源代码如下:#includeusing namespace std;#define MAX_VERTEX_NUM 20typedef int EdgeData; typedef char VertexData; //顶点数据域 typedef struct node { // 边表节点 EdgeData cost; //边上d权值 int adjvex;

2015-08-15 10:06:23 2708

原创 图的深度优先遍历递归算法主针对邻接表有向图

以下是源代码:#includeusing namespace std;#define MAX_VERTEX_NUM 20typedef int EdgeData; typedef char VertexData; //顶点数据域 typedef struct node { // 边表节点 EdgeData cost; //边上d权值 int adjvex

2015-08-15 09:00:56 2733 2

原创 二叉树的层次非递归遍历运用队列

#include #include #define ElemType chartypedef struct BiTNode *BiTree;struct BiTNode{ ElemType data; BiTree lchild,rchild;};BiTree CreateBiTree(){ ElemType ch; BiTree T; scan

2015-08-13 13:44:52 723

原创 二叉树的非递归前序遍历

#include #include #define ElemType chartypedef struct BiTNode *BiTree;struct BiTNode{ ElemType data; BiTree lchild,rchild;};typedef struct STACKnode* link;struct STACKnode{ BiTree ite

2015-08-12 21:35:57 423

原创 二叉树的建立以及先序中序后序递归遍历

#include #include #define ElemType chartypedef struct BiTNode *BiTree;struct BiTNode{ ElemType data; BiTree lchild,rchild;};BiTree CreateBiTree(){ ElemType ch; BiTree T; scan

2015-08-12 21:02:18 530

原创 费波纳契数d动态规划实现

#include static int record[40]={0};void count(int n){ record[0]=1; record[1]=1; for(int i=2;i<n;i++) record[i]=record[i-1]+record[i-2];}main(){ count(20); for(int i=0;i<20;i++) printf("

2015-08-12 19:36:23 455

原创 后缀表达式 栈的运用

中缀表达式转 后缀表达式#include #include #include typedef struct STACKnode* link;struct STACKnode{ char item ; link next;};static link head ;link NEW(char item, link next){ link x = (link) malloc(s

2015-08-12 10:54:13 382

原创 链表插入排序

#include #include typedef struct node *link; struct node{ int item ; link next;}; void visitData(link x){ link t; for( t=x ; t != NULL ; t = t -> next) printf("%d\n",t->item);}void cre

2015-08-11 21:28:28 381 2

原创 抛硬币的模拟

#include #include int heads(){ return rand() < RAND_MAX/2;} main(int argc, char *argv[]){ int i , j , cnt; int n = atoi(argv[1]) , m = atoi(argv[2]) ; int *f = (int *)malloc((n+1)*sizeof(in

2015-08-10 21:29:15 2896

原创 约瑟夫环问题 循环链表

#include #include typedef struct node *link;struct node{ int item ; link next;}; void josephus(int n, int m){ int i ; link head = (link) malloc(sizeof (link) ), x = head ; head -> item = 1;

2015-08-10 21:24:56 417

原创 埃拉托色尼筛算法

#include void sushu(int N){int i, j, a[N];for(i=0;ifor (i=2;iif(a[i])for(j = i ; i * j for (i=2;iif(a[i])printf("%6d",i);}main(){sushu(10000);}

2015-08-10 12:09:21 625

空空如也

空空如也

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

TA关注的人

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