C++
南飞的雁123
这个作者很懒,什么都没留下…
展开
-
VC6 关键字 friend 问题
最近用friend写重载运算符函数在网上查了如下: 1. 从来没有一本C++的书说友元函数不能访问private的,最大的可能是由于编译器的问题导致的,在这些编译器里面,VC对标准C++的支持应该说是最差的。 2.Vc6下别把你的friend的声明跟定义分开,就不会有问题了。 3.vc6对标准库支持不是很好,将#include using na原创 2012-11-12 20:53:12 · 682 阅读 · 0 评论 -
求数列的最长递增子序列
求数组中最长递增子序列:求一个一维数组中最长递增子序列的长度?例如:1,-1,2,-3, 4,-5 ,6,-7;其最长递增子序列的长度为4( 1, 2 ,4 ,6 ); 一下是我根据“编程之美” 的解法三的实现代码.供大家参考:#include#include using namespace std;const int Inf=1000000;int原创 2013-04-02 22:40:49 · 1271 阅读 · 0 评论 -
八皇后问题
问题描述: 在8*8 的国际象棋上摆放8个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列或者同一对角线上。请问有多少种摆法?(皇后相互攻击的规则有点意思:皇后们见了面就掐,很贴近现实,哈哈。)解题思路:由于不得处在同一行、同一列那么肯定是各行各有一位皇后;个列也各有一位皇后;定义一个数组:int ColumnIndex【8】={0,1原创 2013-03-21 23:03:37 · 538 阅读 · 0 评论 -
01背包问题
0-1背包问题0-1背包问题: 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 这个问题的特点是:每种物品只有一件,可以选择放或者不放。算法基本思想:利用动态规划思想 ,子问题为:f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。其状态转移方程转载 2013-02-28 21:18:06 · 428 阅读 · 0 评论 -
吉哥系列故事——完美队形
吉哥这几天对队形比较感兴趣。有一天,有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要求,则称之为完美队形: 1、挑出的人保持他们在原队形的相对顺序不变;2、左右对称,假设有m个人形成新的队形,则第1个人和第m个人身高相同,第2个人和第m-1个人身高相同,原创 2013-03-22 22:53:38 · 809 阅读 · 0 评论 -
C++中的set
1,set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就 像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高。 set和multiset的区别是:set插入的元素不能相同,但是multiset可以相同。 创建multiset base; 删除:如果删除元素a,那么在定义的比较关系下和a相等的所有元素都会被删除 base.转载 2013-03-26 20:28:17 · 780 阅读 · 0 评论 -
变量,函数的定义和声明
有一部分C++程序员对于多个源文件一起编译链接时,变量,函数或者类声明和实现到底如何定义模糊不清,现在分类澄清一下。 变量 (variable) 在C++中,变量声明(declaration)只有在使用extern关键字时才成立,其他情况下都是定义(definition),而在使用extern的同时给变量赋初始值,则声明变为定义,extern关键字也将被编译器忽略转载 2013-04-10 10:15:40 · 985 阅读 · 0 评论 -
成员函数的重载、覆盖、隐藏
感觉写的比较清楚,故转载收藏:这三个概念都出现在类里面;它们的区别如下:1.重载的特征: A.发生在相同的作用域范围内(同一个类中); B.函数名相同; C.参数不同(个数不同、顺序不同、类型不同、全都不同); D.关键字virtual可有可无;2.覆盖:又名重写,是指派生类函数覆盖基类中的同名成员函数,特征是: A.发生在不同的范围(分别位于派生类和基类转载 2013-05-04 22:23:06 · 590 阅读 · 0 评论 -
二叉树的后续遍历非递归实现
看了很多的数据结构资料,很少看到有把实现后续遍历当成,二叉树遍历的例子来讲解的,大都采用中序遍历作为例子;相比而言,实现二叉树的后续遍历就稍微麻烦一些,但是这更能启发思考,所以,将我自己的一种实现作为参考提供给大家;正确性还有待验证,本人验证的事例无误。希望发现问题的能给指正。 闲话不多说了!请看代码:二叉树后续遍历: template class TreeNode原创 2013-08-13 17:03:44 · 1499 阅读 · 2 评论 -
二叉查找树的后续遍历序列验证
问题:验证一个给定的序列是否可能是某一棵二叉查找树的后续遍历序列。如果是则返回1,否则返回0。假设输入的数组的任意元素都不相同; 代码如下:仅供参考。#include #define TRUE 1#define FALSE 0using namespace std;//data [stat,end]//验证data中的元素是否为某棵二叉查找树的后续遍历bool原创 2013-08-27 18:11:28 · 808 阅读 · 0 评论 -
归并排序的迭代及递归实现
归并排序迭代实现:归并排序,将输入表看做n个有序长度为1的子表,第一趟子表两两归并,生成n/2个长度为2的子表,依次归并子表,子表数目依次减半,直至仅有一个子表,结束;//归并 inilist表的有序的两段 [start,mid] ,(mid,end] 到Mergelist中void Merge(int *inilist,int*Mergelist,int start,int mid,i原创 2013-08-17 14:47:21 · 954 阅读 · 0 评论 -
出现频率最高的笔试题strcpy写法
某位仁兄分析的实在是全面,转载以示崇敬:题目: 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。 解说: strcpy的实现代码char * strcpy转载 2013-03-30 17:08:39 · 524 阅读 · 0 评论 -
有符号整数加减溢出检测问题
当计算有符号整数加减法时需要检验是否溢出时: 在此,仅讨论加法的溢出问题(减法可以转换为加一个负数)。 1. x y 皆为正数时, 若 x+y 2. x y 皆为负数是,若 x+y>=0 则说明发生了溢出(注意: INT_MIN +INT_MIN =0 );其实, INT_MIN ,INT_MIN+1,........原创 2013-03-29 17:34:36 · 2213 阅读 · 0 评论 -
理解EnterCriticalSection 临界区
通俗解释就像上厕所: 门锁了,就等着,等到别人出来了,进去锁上,然后该干什么干什么,干完了,把门打开门没锁,就进去,锁上,然后该干什么干什么,干完了,把门打开-------------------------------------------------- 多线程中用来确保同一时刻只有一个线程操作被保护的数据InitializeCriticalSection(&cs);//初转载 2013-01-05 17:38:10 · 572 阅读 · 0 评论 -
error C2079: 'a' uses undefined class 'A' .
在a.h中有: class A{...} 类A对应的实现部分在 a.cpp中 在b.h中有: class A; class B{......A a; /* 错误 */} 其实现文件b.cpp中:#include "b.h"#include "a.h" ... 以上的代码段在编译的时候会转载 2012-11-17 12:29:56 · 1483 阅读 · 0 评论 -
数据结构基础(C++版)(张力译版)校正 之三 .
page 206;Tree>.使用时请大家注意: 代码应该写为,Tree> >即在> > 中间加空格,否则编译器会认为这是一个“>>”移位运算符。会报:error C2143: syntax error : missing '>' before '{';错误。令人实在摸不着头脑。更多信息参见:http://bbs.csdn.net/topics/390292360原创 2012-11-25 10:25:18 · 1040 阅读 · 2 评论 -
红黑树
理论知识参见 《数据结构基础 》 张力译版以下代码与大家分享,如有错误之处希望批评指正。(我已测试通过)//RedBlackTree.h#ifndef _REDBLACKTREE_#define _REDBLACKTREE_class TreeNode{ friend class RedBlackTree;public: TreeNode(int e) { key=e; r原创 2012-12-24 20:24:54 · 474 阅读 · 0 评论 -
红黑树
介绍今天我们来介绍另一种平衡二叉树:红黑树(Red Black Tree),红黑树由Rudolf Bayer于1972年发明,当时被称为平衡二叉B树(symmetric binary B-trees),1978年被Leonidas J. Guibas 和 Robert Sedgewick改成一个比较摩登的名字:红黑树。红黑树和之前所讲的AVL树类似,都是在进行插入和删除操作时通过特定操作保转载 2012-12-24 20:37:16 · 497 阅读 · 0 评论 -
伸展树
本文所讲伸展树的优劣和好故转载:伸展树(Splay Tree)是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它由Daniel Sleator和Robert Tarjan创造。它的优势在于不需要记录用于平衡树的冗余信息。在伸展树上的一般操作都基于伸展操作。为什么需要伸展树(Splay Tree)各种查找树存在不足。比如:对于一个有n个节点的平衡树,虽然最坏情转载 2012-12-25 11:19:55 · 599 阅读 · 0 评论 -
伸展树
基本知识参考《数据结构基础》 张力 译版 及另一转载博文。#include #include "splaytree.h"using namespace std;void main(){ SplayTree st; st.Insert(12); st.Insert(3); st.Insert(7); st.Insert(11); st.Insert(5);原创 2012-12-25 11:29:35 · 357 阅读 · 0 评论 -
B-树
B-树1 .B-树定义B-树是一种平衡的多路查找树,它在文件系统中很有用。定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树;⑵若根结点不是叶子结点,则至少有两棵子树;⑶除根结点之外的所有非终端结点至少有[m/2] 棵子树;⑷所有的非终端结点中包含以下信息数据: (n,A0,K1,A转载 2012-12-29 14:48:22 · 1011 阅读 · 0 评论 -
最优查找二叉树
理论知识参见 《 数据结构基础》第二版 张力译 第382页--387页;好了不多说啦。我的代码如下供大家批评。希望指出改进意见。#include "BST.h"#include using namespace std;int BST::KnuthMin(int i,int j){ int k=i+1; int ck=c[i][k-1]+c[k][j]; for原创 2012-12-20 17:39:02 · 619 阅读 · 0 评论 -
多线程同步若干实现方案
临界区是一种最简单的同步对象,它只可以在同一进程内部使用。它的作用是保证只有一个线程可以申请到该对象void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection );产生临界区void DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSecti转载 2013-01-05 18:34:19 · 388 阅读 · 0 评论 -
插入排序实现
插入排序的基本思想是将一条新纪录插入到一个含有i条记录的有序表中,使得新表依然有序。最坏情况下,在插入之前要进行i+1次比较。因此每次插入的复杂度为O(i)。则插入排序的复杂度为O(SUM(i+1))=O(n^2); #include #include "Insert.h"using namespace std;void InsertSort(int e,int *a,in原创 2013-08-16 22:13:53 · 489 阅读 · 0 评论