自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (20)
  • 收藏
  • 关注

原创 全排列(可排除重复)

首先我们来说一下这个问题的基本算法,其实很简单,是一个典型的递归算法:假设给定的字符串是 babc     ([]中的为下一次递归的输入):1.       abbc        排序: 让相等的字符连续2.       a[bbc]     求解以第一个字符开头的组合    |3.       b[abc]     发现第二个字符b和上一组组合的头a 不相等,所以调换,并求

2012-05-31 20:10:26 1930 2

原创 全组合(可包含重复字符)

利用链表保存结果,去除重复的串。#include #include using namespace std;#include using namespace std;typedef struct LNode{ char data[10]; LNode* next;}*List;void InsertList(List &l, char data[

2012-05-31 20:01:39 1353

原创 全排列(模板实现)

#include using namespace std;template void Perm(T a[], int k, int m){ if(k==m) { for(int i=0; i<=m; i++) cout<<a[i]; cout<<endl; } else { for(int i=k; i<=m; i++) {

2012-05-31 17:05:26 811

原创 调整数组顺序实现:奇数在偶数前面 以及 “奇偶奇偶”相间

题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。利用快排的两种实现方法,一种是前后两个指针向中间移动,另外一种是算法导论上快排的划分方法,也是两个指针,但都从头开始。算法一,前后两个指针#include #include using namespace std;bool isEven(i

2012-05-31 16:19:41 2414 3

原创 异常安全的CMyString赋值运算符函数重载

问题:给出如下CMyString的声明,要求为该类型添加赋值运算符函数。class CMyString{public:    CMyString(char* pData = NULL);    CMyString(const CMyString& str);    ~CMyString(void);      private:    char* m_pData;

2012-05-31 11:26:20 1242

原创 最长公共子序列(可打印LCS)

动态规划算法#include #include #include #include using namespace std;#define MAXSTRLEN 20int Lcs(char x[], char y[], int path[][MAXSTRLEN])//求序列x和y的最长公共子序列,path保存路径指向,以方便打印公共子序列{ int i,

2012-05-31 10:53:13 2417

原创 两个队列模拟一个栈

#include #include #include using namespace std;template class MyStack{ public: void push(T element) { if(q1.empty() && q2.empty()) q1.push(element); else if(!q1.empt

2012-05-30 11:34:28 1080

原创 两个栈模拟一个队列

两个栈模拟一个队列,1号栈为入队,栈顶表示队尾;2号栈为出队,栈顶表示队首。入队,直接进1号栈;出队,先判断2号栈是否有元素,有元素就直接弹出栈顶即队首,如果2号栈没有元素,则将1号栈的元素顺序弹出并进2号栈。#include #include #include using namespace std;templateclass CQueue{ public:

2012-05-30 11:07:18 5612

原创 从尾到头输出链表

1. 将链表逆序,然后从头到尾输出,需要额外操作;2. 顺序遍历过程中节点进栈,然后输出栈即可,需要额外的栈;3. 由栈转到递归。 #include using namespace std;typedef struct LNode{ int data; LNode* next;}*List;void InsertList(List &l, int d

2012-05-30 10:20:06 1317

原创 用C++ 设计一个不能被继承的类

分析:这是Adobe 公司2007 年校园招聘的最新笔试题。这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目。在Java 中定义了关键字final ,被final 修饰的类不能被继承。但在C++ 中没有final 这个关键字,要实现这个要求还是需要花费一些精力。首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自动调用父类

2012-05-30 09:46:51 2378 1

原创 【谷歌面试题】在O(1)时间内删除链表节点

题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。函数的声明如下:void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted);  分析:这是一道广为流传的Google面试题,能有效考察我们的编程基本功,还能考察我们的反应速度,更重要的是,还能考察我们对时间复杂度的理解。在链表中删除一个结点,最常规的做法是从

2012-05-29 22:45:46 9614

原创 网易有道笔试:求连通图的割点(关节点)

题目:求一个连通图的割点,割点的定义是,如果除去此节点和与其相关的边,图不再连通,描述算法。分析:1. 最简单也是最直接的算法是,删除一个点然后判断连通性,如果删除此点,图不再连通,则此点是割点,反之不是割点(图的连通性一般通过深搜来判定,是否能一次搜索完 全部顶点);2. 通过深搜优先生成树来判定。从任一点出发深度优先遍历得到优先生成树,对于树中任一顶点V而言,其孩子节点为邻接点。由

2012-05-28 18:54:25 8643 3

原创 有n 个长为m+1 的字符串,求前后m个字符匹配所能形成的最长字符串链:利用弗洛伊德算法求最长路径

有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接,问这n 个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。把字符串看成图中的一个顶点,两字符串匹配则两个顶点间有边,从而转化为图的问题。利用弗洛伊德算法求图的最长路径。#include #include using namespace std;

2012-05-27 14:56:03 4876 2

原创 弗洛伊德算法(求各顶点间最短路径):可打印最短路径

#include #include #include using namespace std;#define INFINITY 65535#define MAX_VERTEX_NUM 10typedef struct MGraph{ string vexs[10];//顶点信息 int arcs[10][10];//邻接矩阵 int vexnum, ar

2012-05-27 11:01:56 15050 2

原创 迪杰斯特拉算法(可打印最短路径)

#include #include #include using namespace std;#define INFINITY 65535//无边时的权值#define MAX_VERTEX_NUM 10//最大顶点数typedef struct MGraph{ string vexs[10];//顶点信息 int arcs[10][10];//邻接矩阵

2012-05-26 15:40:13 21741 6

原创 克鲁斯卡尔算法(最小生成树)

#include #include using namespace std;typedef struct MGraph{ string vexs[10];//顶点信息 int arcs[10][10];//邻接矩阵 int vexnum, arcnum;//顶点数和边数}MGraph;int LocateVex(MGraph G, string u)//返回

2012-05-26 10:33:24 4435

原创 普里姆算法(最小生成树)

#include #include using namespace std;typedef struct MGraph{ string vexs[10];//顶点信息 int arcs[10][10];//邻接矩阵 int vexnum, arcnum;}MGraph;typedef struct Closedge{ string adjvex; i

2012-05-25 23:17:39 7819 2

原创 拓扑排序(判断有向图是否有回路)

#include #include #include using namespace std;//表结点typedef struct ArcNode{ int adjvex;//该弧所指向的顶点的位置 ArcNode *nextarc;}ArcNode;//头结点typedef struct VNode{ string data;//顶点信息

2012-05-25 20:09:56 11082

原创 图的基本操作(基于邻接表):图的构造,深搜(DFS),广搜(BFS)

#include #include #include using namespace std;//表结点typedef struct ArcNode{ int adjvex;//该弧所指向的顶点的位置 ArcNode *nextarc;//指向下一条弧的指针}ArcNode;//头结点typedef struct VNode{ string da

2012-05-25 18:18:52 15180

原创 图的基本操作(基于邻接矩阵):图的构造,深搜(DFS),广搜(BFS)

#include #include #include #include #include #include using namespace std;typedef struct MGraph{ string vexs[10];//顶点向量 int arcs[10][10];//邻接矩阵 int vexnum, arcnum;//图的顶点数和边数}MG

2012-05-25 14:14:58 4620 1

原创 谷歌笔试:已知实力对比关系和出场顺序,输出比赛名次

n支队伍比赛,分别编号为0,1,2,。。。n-1,已知它们之间的实力对比关系,存储在一个二维数组w[n][n],w[i][j]的值代表编号为i,j的队伍中更强的一支。所以w[i][j]=i或者j, 现在给出它们的出场顺序,并存储在数组order[n]中,比如order[n]={4,3,5,8,1。。。},那么第一轮比赛就是4对3,5对8.。。胜者晋级,败者淘汰。同一轮淘汰的所有队伍排名不再

2012-05-24 16:53:51 4598

原创 最大子矩阵和

将矩阵竖直方向投影相加,即可转化为一维最大子段和问题。#include using namespace std;//int a[3][5]={1,2,0,3,4,2,3,4,5,1,1,1,5,3,0};int a[4][4]={0,-2,-7,0,9,2,-6,2,-4,1,-4,1,-1,8,0,-2};int maxSum(int *a, int n, int &

2012-05-24 10:45:46 947

原创 字符匹配:查找包含字符集的子串-和谐系统

实现一个挺高级的字符匹配算法:给一串很长字符串,要求找到符合要求的字符串,例如目的串:123,1******3*****2,12******3这些都要找出来其实就是一些和谐系统。。与此题类似:给一个很长的字符串str, 还有一个字符集比如{a,b,c},找出str包含{a,b,c}的最短子串,要求O(n)。/*用两个变量 front,rear 指向一个的子串区间的头和尾(当然,

2012-05-23 19:36:51 4129 5

原创 1的数目

具体见《编程之美》解法一:从1到N遍历,求每个数中1的个数加和int Count1InInteger(int n){ int num=0; while(n) { num+=(n%10 == 1)?1:0; n/=10; } return num;}int f(int n){ int count=0; for(int i=1; i<

2012-05-23 09:32:30 829

原创 判断是否为栈的pop序列

输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。程序一:参考file:///F:/专业资料/微软面试题/题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。%20-%20Mr_Willy的专栏%20-%20博客频道%20-%20

2012-05-22 21:36:37 758

原创 整数二进制中1的个数

按照《编程之美》书上的方法int Count(int n){ int num=0; while(n) { if(n%2==1) num++; n/=2; } return num;}int Count(int n){ int num=0; while(n) { num+=n & 0x01; n>>=1; }

2012-05-22 16:23:38 533

原创 左旋转字符串

题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。思想:旋转三次#include #include using namespace std;void ReserveString(char *inp

2012-05-22 15:26:59 495

原创 字符串中找出连续最长的数字串

写一个函数,它的原型是int continumax( char *outputstr, char *intputstr),功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把最长数字串付给其中一个函数参数outputstr所指内存#include using namespace std;int continumax(char* &outputstr, char *i

2012-05-22 14:49:33 951

原创 带头结点的链表基本操作

#include using namespace std;typedef struct LNode{ int data; LNode* next;}LNode, *LinkList;void CreateList(LinkList &L, int len)//尾插法{ int data; LinkList p; L=new LNode; i

2012-05-22 10:05:06 760

原创 从数列1,2,3.......n 中 随意取几个数,使其和等于 m

其实是个背包问题。void FindSum(int sum, int n)//1到n和为m的所有组合{ static vector l; if(n<=0 || sum<=0 ) return; if(sum>n) { l.push_back(n); FindSum(sum-n, n-1); l.pop_back(); FindSum(su

2012-05-21 16:38:05 2487

原创 约瑟夫环问题

题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始,每次从这个圆圈中删除第m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数字), 当一个数字删除后,从被删除数字的下一个继续删除第m 个数字。求出在这个圆圈中剩下的最后一个数字。该题目是以下题目的变形。(n 个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下

2012-05-21 10:40:35 854

原创 二元查找树转换为它的镜像

二元查找树的镜像:左子树的节点都大于右子树的节点。#include #include using namespace std;struct BSTreeNode{ int m_nValue; BSTreeNode* m_pLeft; BSTreeNode* m_pRight;};void InsertNode(BSTreeNode* &pRoot, in

2012-05-21 08:37:05 945

原创 求1+2+3+...+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句

方法一:利用构造函数和静态数据成员#include using namespace std;class Temp{public: Temp() { ++N; Sum+=N; } static void Reset() { N=0; Sum=0; } static int GetSum() { return

2012-05-19 21:20:56 8598 2

原创 二叉树中节点的最大距离

方法一:求二叉树中节点的最大距离,等同于“计算每个节点的左子树和右子树的高度和,取最大值”方法二:见编程之美(动态规划) #include #include using namespace std;typedef struct BiTNode{ char data; BiTNode *lchild, *rchild; int nMaxLeft, nMaxRi

2012-05-19 11:28:08 960

原创 翻转句子中单词的顺序

#include using namespace std;void Reverse(char *pB, char *pE){ if( pB == NULL || pE == NULL) return; while( pB < pE ) { char temp=*pB; *pB=*pE; *pE=temp; pB++; pE--

2012-05-19 08:55:49 683

原创 链表逆序

两种方法:1. 借助栈操作,先入栈,然后再出栈形成新的链表;2. 原地逆序。#include #include using namespace std;struct LinkNode{ int m_nValue; LinkNode* next;};typedef LinkNode* LinkList;void InsertList(LinkLis

2012-05-18 18:40:31 2274

原创 有环链表问题-确定有环链表的环起点,环长及柄长

#include #include using namespace std;struct LinkNode{ int m_nValue; LinkNode *next;};typedef LinkNode* LinkList;void InsertList(LinkList &list , int data)//插入(建立)链表{ LinkList

2012-05-18 15:02:53 1169

原创 判断链表是否有环

两个指针(初始值指向哪其实无所谓),一个步长为1,一个步长为2, 若相遇,则有环;反之,无环#include using namespace std;struct LinkNode{ int m_nValue; LinkNode* next;};typedef LinkNode* LinkList;void InsertList(LinkList &list

2012-05-18 10:26:02 546

原创 链表倒数第k个节点

两个指针一前一后,相距k即可。#include #include using namespace std;struct LinkNode{ int m_nValue; LinkNode *next;};typedef LinkNode* LinkList;void InsertList(LinkList& list , int data){

2012-05-18 09:53:49 689

原创 最小的k个元素

输入n个整数,输出其中最小的k个。分析:如果全部排序找出最小的k个,则时间复杂度为O(nlgn)。而其实题目要求的是最小的k个数,并不要求顺序,更不要求对整个序列有序。维护一个k个元素的最大堆,如果堆元素个数小于k个,则直接加入堆,如果堆元素个数等于k,则剩下的元素分别与堆顶元素比较,如果比堆顶元素还大,则不可能是最小的k个元素之一,如果比堆顶的元素小,则替换掉堆顶元素入堆,并重新调整堆,

2012-05-17 16:46:29 1070

深入浅出MFC

深入浅出MFC,学习MFC机制可视化编程的必备书籍

2011-09-09

Unix 环境高级编程

Unix 环境高级编程,全面剖析Unix操作系统,讲解Unix系统下编程

2011-08-18

C语言最新编程技巧200例(修订本)

C语言最新编程技巧200例,包含汉字处理实用程序,图形图像处理实用程序,语音处理实用程序,网络通信实用程序,输入打印实用程序,菜单实用程序,数据安全实用程序以及其你它程序,适于学习掌握实用c语言

2011-08-18

VISUAL C++ MFC扩展编程实例

本书主要介绍了运用Visual C++ 5.0或6.0的高级编程技巧,内容涉及MFC程序设计的最新概念,全书提供了大量VC的编程实例,旨在帮助读者较为全面地掌握VC编程知识、技巧和方法。全书分为三个部分和附录。第一部分介绍Windows编程的基础知识,第二部分讲解用户界面编程技巧,最后一部分涉及Windows内部进程的一些实例。本书思路清晰,实用性强,是计算机应用人员及大专院校师生不可多得的参考书。

2011-08-18

C++编程思想-讲解C++编程思想

本书作者根据自己学习C++的亲身体会及多年教学经验,用简单的例子和简练的叙述讲解C++编程,别具特色。 全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚函数、模板和包容器类、多重继承、异常处理和运行时类型识别。 本书作为正式教材和自学用书均非常优秀,作为程序设计者的参考用书亦极为合适。

2011-08-18

面向对象技术及uml建模实例

面向对象技术及uml建模,实例讲解类图,顺序图,活动图,状态图等uml建模过程,内容丰富,学习简单

2011-08-17

华为软件工程师经典笔试试题

华为软件工程师经典笔试试题,包含各种经典的面试题,对于准备参加华为笔试及其他公司笔试具有很好的参考价值,对于理解C/C++也是很好的资料

2011-08-17

华为编程开发规范与案例

华为编程开发规范与案例,提高编程效率,优化代码

2011-08-08

高质量C++&C编程指南

高质量C++&C编程指南,包含专业知识和技术规范,提高编程质量,优化代码

2011-08-08

jdbc数据库驱动包,包含各种数据库

jdbc 数据库驱动包 SQLServer Mysql Oracle等,还包括配置文件,连接数据库不再困难

2011-08-07

JavaScript编写的界面友好的日历

JavaScript编写的界面友好的日历,使用方便简单,下载即可运行,界面友好,功能齐全

2011-08-07

高一凡数据结构及算法及其源代码

高一凡数据结构及算法及其源代码,包含数据结构的各部分,链表,栈,队列,树,图,以及排序等,并包含许多经典算法的实现及源代码

2011-08-06

严蔚敏:数据结构(C语言版)习题集答案

严蔚敏:数据结构(C语言版)习题集答案,包括线性表,堆,栈,队列,树,图,排列等各章答案

2011-08-06

MFC可视化五子棋游戏

Microsoft Visual C++ 6.0平台下,基于MFC的可视化五子棋游戏,界面很友好,两个人博弈,鼠标左键代表黑棋,鼠标右健代表白棋,可以自己跟自己玩

2011-08-06

软件工程软件设计文档模板

软件工程软件开发过程中的文档模板,包括软件需求说明书,测试分析报告,测试计划,概要设计说明书,数据库设计说明书,详细设计说明书,项目开发计划,项目总结,用户手册等文档

2011-08-06

基于B/S架构的教务管理系统C#&ASP.NET

基于B/S架构的教务管理系统,使用C#和ASP.NET,有学生,教师,管理员三种权限,基本功能:基本信息管理,选课,退课,登记成绩,更新成绩,人员管理

2011-08-06

基于C/S架构的数据库课设-C#教务管理系统

这是一个基于C/S架构的数据库课设-C#教务管理系统,有学生,教师和管理员三种权限和用户界面,可以实现基本信息管理,选课,退课,教师登记成绩,查询学生成绩,更新学生成绩,管理员实现人员管理,权限管理

2011-08-06

tiny小型编译器代码及实现

基于tiny的小型编译器,包括词法分析,语法分析,转化成三地址码,最后转化成c语言代码,在c语言编译器上编译运行

2010-11-08

空空如也

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

TA关注的人

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