- 博客(19)
- 收藏
- 关注
原创 const 和static 变量
#includeusing namespace std;class U{public: const int b; // 必须通过构造函数 初始化列表进行初始化 static int c; // 必须在类外赋值 const static int a=20; //此处不赋值,可以在类外赋值 U( int m ) :b(m) { }};//
2013-01-21 21:35:04 634
原创 设计模式--桥接模式
桥接模式:用聚合模拟继承。#include using namespace std;class AbstractFunction{public: virtual void nameFunction() = 0; virtual void dosth() = 0;};class Call: public AbstractFunction{public:
2013-01-20 21:57:17 401
原创 求和(单例模式,初始化列表,容器,迭代器)
使用单例模式,初始化列表,容器,迭代器#include #include using namespace std;class sum{public: const int num ; void toSum( ); static sum * getInstance() { if( NULL == pInstance ) pInsta
2013-01-20 18:02:29 696
转载 计算机经典书籍
各种计算机语言的经典书籍1、Java Java编程语言(第三版)---Java四大名著----James Gosling(Java之父) Java编程思想(第2版)----Java四大名著----Bruce Eckel Java编程思想(第3版)----Java四大名著----------------Bruce Eckel JAVA 2核心技术 卷I:基础知识(原书第
2013-01-20 14:55:51 590
原创 设计模式--单例模式,观察者模式,适配器模式
看c++的构造方法,无意中想到,构造方法要定义为public的,这样才可以在main()函数中,实例化对象。后来查阅资料,发现有些设计模式是可以实现构造函数定义为private类型的。如下面简单的单例模式:此方法的局限性比较大。#include#includeusing namespace std;class SingleInstance{private: Si
2013-01-19 22:56:29 2303
原创 多态
对多态的理解:#includeusing namespace std;class A{public: virtual void printA() { cout } virtual void printB() { cout } void printSomething() // 此方法就是个接口,有所定义(定义了输出顺序),后代可根据需要
2013-01-19 17:59:35 475
原创 排序系列--堆排序
选择类排序--堆排序思想:1.建立大顶堆(小顶堆),此时产生的序列并不是有序的。但是确是局部有序的。因为堆是完全二叉树,且每个结点的值都大于或者等于其左右孩子。a[s]>=a[2*s],a[s]>=a[2*s+1],注意结点关系。--根据完全二叉树得到的性质。如何建堆呢?从length/2开始到结点1(均不是叶子结点),对每个结点进行调整。从length/2+1到length,均是叶子
2013-01-14 20:46:27 478
原创 排序系列--冒泡排序
交换类排序:冒泡排序,快速排序之前有一种错误的认识,一直称作冒泡排序的算法,其实不是真正的冒泡排序。因为真正的冒泡排序,是两两比较相邻记录。最最容易的排序代码如下: for (i=1; i { for(j=i+1; j { if (a[i] > a[j]) { tmp = a[i];
2013-01-11 23:01:49 426
原创 排序系列--快速排序(实现+复杂度分析)
交换排序类:冒泡排序,快速排序他们的共同点就在于,通过记录的交换,最终得到想要的结果。下面实现快速排序。思想:通过一趟排序将待排记录划分为两部分。(作为划分标记的记录,已经保证是在它正确的位置)再对那两部分,再进行划分。知道划分为一个一个单独的数据,此时,所有记录已经是排好序了。 复杂度分析:快速排序的时间性能取决于快速排序递归的深度。我们假设在最优情况下,partitio
2013-01-11 22:44:21 569
原创 排序系列--希尔排序
前面说过,直接插入排序时希尔排序的一个特例。是增量为1的希尔排序。思想:以相差同一个increment增量的记录为一个子序列,将这个子序列进行排序。汇集多个子序列,然后改变increment的值(减小),这样形成新的子序列,此时的子序列的记录比上一次的多,使更多的记录基本有序。如此不断,知道最后将整体所有的记录以increment为1,进行直接插入排序。(基本有序,保证了小数基本在前,大数基本
2013-01-10 22:52:16 364
原创 排序系列--直接插入排序
根据在排序过程中的主要操作,可分为四大类:插入排序类:直接插入排序,希尔排序选择排序类:简单选择排序,堆排序交换排序类:冒泡排序,快速排序归并排序类:归并排序下面来说下他们的思想,就知道为什么事这四大类了:插入排序类:都是对已经存在的记录进行移动,然后将某个记录插入相应的位置。直接插入排序:是将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数增1的有序表。(
2013-01-10 22:32:03 613
原创 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数,使其和等于m ,要求将其中所有的可能组合列出来.
题目:输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数,使其和等于m ,要求将其中所有的可能组合列出来.1. 是01背包问题。从最大值n开始取, 如果取n ,则剩下的为 m-n.需要从剩下的n-1个数中取。 如果不取n,则和仍为m,从剩下的n-1个数中取。所以,会是一个递归问题。 find(m-n, n-1)
2013-01-08 22:42:24 1001
原创 Fibonacci数列(效率较高)
/* 题目:定义Fibonacci 数列如下:/ 0 n=0f(n)= 1 n=1,2\ f(n-1)+f(n-2) n>2输入n,用最快的方法求该数列的第n 项。*/思想 :用两个数分别循环记录和,f1记录n为奇数时,f2记录n为偶数时。用i标记,每次记录两个和。这样比较快。 #include using namespace std;int main(
2013-01-07 23:03:26 632
原创 查找最小的k 个元素题目
//题目:查找最小的k 个元素题目:输入n 个整数,输出其中最小的k 个。思想:两个数组,一个用于存储输入的n 个整数,另一个用于存储当前比较的数中最小的k个整数,按从小到大排列。那么排序数组中第k 个数是当前k个数中最大的。和n个数的数组中元素一个个比较,最终保证存k个元素的数组中存储的是所有数中最小的k个数。 #include using namespace std;#
2013-01-07 22:01:42 714
原创 n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始,每次从这个圆圈中删除第m 个数字
// 题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始,每次从这个圆圈中删除第m 个数字 方法1,思想:采用循环链表的结构。也是对圆圈的模拟。思想好理解方法2,使用数组,但是要注意,对循环数组,也是对圆圈的模拟。代码量少方法1:#include using namespace std;typedef struct LNode{ int
2013-01-06 22:19:48 663
原创 利用hash表思想,实现查找到第一个在字符串中出现的字符
利用hash表的存储思想,先将表初始化,然后对表的内容存储值。比较特别的是,存入的值是输入字符的出现次数(也就是hash表中的冲突出现次数)。这里的hash函数,就是相当于输入字符的ASCII。输入字符相同,在address处就冲突,统计下来冲突次数。当冲突次数为1时,表示,此字符仅一次出现。问题解决。 #include using namespace std;#define MA
2013-01-06 21:20:37 743
原创 利用hashtable思想,保存在一个字符串中找到第一个只出现一次的字符
编程思想:利用hashtable的思想,将输入的字符,映射到一个哈希表中,hash函数为:对输入字符的ASCII码求模运算,映射到在hashtable中的具体下标。通过对hashtable的初始化,均为‘\0’,如果输入的字符,映射到hashtable的相应位置,其内容不是‘\0’,则表示已经有字符放置,则该字符一定不是只出现一次。 #include using namespace s
2013-01-05 23:11:24 552
原创 设计包含min 函数的栈(程序分析)
设计包含min 函数的栈。定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。要求函数min、push 以及pop 的时间复杂度都是O(1)。 如果不要求时间复杂度为O(1),那么只是一个很简单的进栈,出栈,比大小的操作。实现如下:#include using namespace std;#include #define MAXSIZE 20typ
2013-01-04 22:59:58 354
原创 建树和遍历树(前序)
采用指针的方式,没有使用较复杂的指针的指针,所以,在进行参数传递时,采用引用,这样对T1的操作,等同于对T的操作。可保证在T,这个局部变量在函数调用结束销毁时,使T1所指向的地址空间正确。 #includeusing namespace std;#include typedef struct BiNode{ char data; struct Bi
2013-01-02 21:55:13 861
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人