
data structure and algorithm
haoshenwang
Alibaba大神
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
回溯法解决N皇后问题
/** 使用回溯法解决n皇后问题*/#include #include #define NUM 8 //皇后的数目int chess[NUM]; //依次表示每个皇后所在的列数int count = 0;//总的解数 //表示能否在第i行value列放置皇后,行数是从0开始bool canPlaced(int i,int value){ //第0行的皇后可以任意摆放 i原创 2013-09-10 20:48:05 · 1424 阅读 · 0 评论 -
八皇后问题
源代码:/************************************************************************//* author : 王浩time : 2015/10/16问题描述:八皇后问题输出:八皇后问题的解的数目,以及具体的排列情况分析:八皇后的棋盘设置为row[0,7],col[0,7],左上角为(0,0)规律:原创 2015-10-16 11:04:26 · 864 阅读 · 0 评论 -
KMP算法(简单的说)
KMP算法的核心就是求解next数组,具体参考http://www.cnblogs.com/10jschen/archive/2012/08/21/2648451.htmlpackage algorithm;//字符串匹配类public class StringMatcher { //朴素字符串匹配,t:要匹配的目标字符串,pattern:匹配的模式字符串 public stati原创 2014-06-08 17:56:18 · 1073 阅读 · 0 评论 -
图的所有简单算法实现
包括邻接链表、有向无向图、带权图、增删顶点和边、查找、连通、DFS和BFS等。这只是一个最初版本,有些复杂的算法还没有实现。package structure;//图的邻接链表的节点public class GraphListNode { private int vertex;//图的顶点 private int weight;//边的权重 private boolean vis原创 2014-06-08 12:54:02 · 1889 阅读 · 0 评论 -
最简单的快速排序代码
#include //将Int数组a中的第i个元素和第j个元素互换void swap(int a[],int i,int j){ int tmp = a[i]; a[i] = a[j]; a[j] =tmp;}//以第一个元素作为划分,将它放入中间int partition(int a[],int start,int end){ int i = start; int原创 2014-04-18 14:34:04 · 6668 阅读 · 2 评论 -
带头节点的链表和不带头结点的链表有何不同
单链表是一种最为基本的数据结构,常用的单链表又分为带头结点和不带头结点两种。从线性表的定义可以知道,线性表要求允许在任意位置进行插入和删除操作。所有的链表都有一个头指针head,带头结点的链表中head的数据项为空。接下来具体分析。1.带头节点的链表的插入,首先使用临时变量p等于要插入之前的节点(不管具体的插入位置),之后不管要插入的节点x是插到链表头还是插到链表的其他位置都是如下语句:x->原创 2014-04-14 15:28:08 · 12389 阅读 · 2 评论 -
经典排序算法设计与分析(插入排序、冒泡排序、选择排序、shell排序、快速排序、堆排序、分配排序、基数排序、桶排序、归并排序)
经典的内排序算法有:插入排序、冒泡排序、选择排序、shell排序、快速排序、堆排序、分配排序、基数排序、桶排序为了分析所有的排序情况,给出一个模板程序用于测试,通过改写mySort函数来实现不同的排序算法。测试环境为vc++6.0。可以通过改变SIZE的大小来减少或增长排序所需的时间。#include #include #include //元素的数目#define SI原创 2013-11-12 23:21:51 · 6625 阅读 · 4 评论 -
菜鸟学便成 : poj 1001 Exponentiation
ExponentiationTime Limit: 500MS Memory Limit: 10000KTotal Submissions: 124897 Accepted: 30478DescriptionProblems involving the computation of exact values of very large magnitude and precision原创 2013-11-11 19:39:54 · 1854 阅读 · 0 评论 -
用java源代码学数据结构<七>: BST
/* * 以int类为例 * 其它的类必须能够比较 * *///二叉搜索树的节点点 class BSTNode{ int item; BSTNode lc; BSTNode rc; BSTNode p; public BSTNode(int item){ this.item = item; } } public class BS原创 2013-10-29 15:01:00 · 1155 阅读 · 0 评论 -
用java源代码学数据结构<六>: HashSet HashMap 详解
散列表是数据结构中的重要技术,散列表的最大优点在于便于查找,缺点在于插入删除较为麻烦。java中很多数据类型如hashMap,hashTable,hashSet基本实现就是采用散列表技术。原创 2013-10-29 12:56:52 · 2243 阅读 · 0 评论 -
用java源代码学数据结构<五>: Stack 详解
Stack类较为简单,它的主要基础是先进后出,注意Stack继承自Vector类,所以它的内部实现基本上都是直接调用Vector的方法,难度较小。package java.util;publicclass Stack extends Vector { //无参构造函数 public Stack() { } /** * Pushes a原创 2013-10-28 19:20:49 · 1417 阅读 · 2 评论 -
用java源代码学数据结构<四>: LinkedList 详解
在数据结构中有基本数据类型:线性表。线性表又可以分为顺序表(数组表)和链表。java中典型顺序表有Vector和ArrayList,链表类就是LinkedList。 个人体会: 1.要想gc(垃圾回收器)回收对象,普通的对象只需要设置为null即可,而复合型对象(如Node),它包含两个指针对象和一个元素,必须全部设置为Null才能回收2.在链表节点进行prev、n原创 2013-10-28 10:37:45 · 2868 阅读 · 2 评论 -
用java源代码学数据结构<二>: Vector 详解
/* 1.Vector可以随着用户插入或删除元素来改变自己的大小。 2.Vector类通过维护capacity(函数)和capacityIncrement(变量)来优化存储。 3.capacity总是至少和vector的size一般大(capacity>=size)。 4.通过在向vector插入元素之前增大capacity,可以减少很大的内存分配时间。*/package java.u原创 2013-10-27 00:15:39 · 2738 阅读 · 1 评论 -
用java源代码学数据结构<三>:ArrayList 详解
查看java文档可以知道,抽象类AbstractList有两个实现子类:Vector和ArrayList。二者的内部结构、基本方法大致相同.只不过Vector是线程安全的,ArrayList是不安全的。ArrayList相比于一般的Array,就是多了一个变长的功能,但相应的时间效率有所下降。 由于ArrayLIst和Vector很想,大部分代码基本一致,就不在提供详细的注释,可原创 2013-10-27 10:57:25 · 2287 阅读 · 0 评论 -
用java源代码学数据结构<一>: Collection , Iterator
曾经某位大神说过:学习编程的最好方法就是看源代码。集合类无疑是学习数据结构好的原材料。开始准备用c++的STL,由于本人能力有限,看了下vc的STL源代码,什么一重指针,二重指针,n重指针漫天都是,所以只好放弃。java没有指针,学习难度无疑大大降低,STL就只有等以后能力提高点再说了。 集合类的源代码都可以在jdk安装目录下的src.zip文件中找到,由于篇幅有限,删除了大量非必要原创 2013-10-26 21:55:30 · 1539 阅读 · 0 评论 -
递归和迭代的区别之我见
递归:当一个函数包含着对它自身调用时就称这个函数式递归的如典型的阶乘函数int func(int n){ //error detect if (n==1) { return 1; } return func(n-1)*n;}迭代就是不断的使用计算出来的结果来代替旧值int func(int n){ //error detect int resul原创 2013-10-26 16:07:22 · 1119 阅读 · 0 评论 -
递归思想的使用之汉罗塔问题
递归,一句话概括就是:把大问题分解成结构类似的小问题,分解,计算小问题,再合并(即子函数的返回)。汉罗塔问题描述:有三个杆子,依次标记为A,B,C。还有n个大小不同的盘子,较大的盘子放在较小的盘子的下面,依次放置在A杆上,现在要通过若干次操作将所有盘子移到C杆上,且不能违反下列规则:1.每次只能移动一个盘子2.不允许大的盘子出现在小的盘子的上面下面我们来用递归的方法分析一下:原创 2013-10-26 16:58:06 · 1999 阅读 · 0 评论 -
生成1-N*N的矩阵,一圈一圈的
#include using namespace std;int N;int data[100][100];bool visit[100][100];void getNext(int status, int& nx, int &ny){ switch (status) { case 0: //right nx = 0, ny = 1; break; case 1:原创 2016-04-03 20:50:33 · 1331 阅读 · 0 评论