C++
文章平均质量分 69
龙少爷_阿呆
燕山大学硕士 研究XML关键字查询 关注数据结构和算法 java C/C Linux
展开
-
练手小程序1.求两个时间的和
题目:求两个时间的和,输入两个时间(时间的格式为hh:mm:ss,保证输入都是正确的时间 ,所以自己不用检查输入的时间正确与否),计算这两个时间的和并输出。例如:输入 00:00:04 和 00:00:01 最后输出的时间是00:00:05考察的知识点:字符串的处理代码如下: // 求两个时间的和.cpp : 定义控制台应用程序的入口点。// 求两个时间的和,输入两个时间(时间原创 2014-03-04 20:29:37 · 1531 阅读 · 0 评论 -
栈,队列,双端队列
stack堆栈,没有迭代器,支持push()方法。后进先出,top()返回最顶端的元素,pop()剔除最顶元素deque双端队列,支持迭代器,有push_back()方法,跟vector差不多,比vector多了个pop_front,push_front方法queue队列,先进先出,不支持迭代器,有push()方法,pop()剔除第一个元素,front()返回第一个元素代码原创 2013-09-01 19:51:39 · 2135 阅读 · 0 评论 -
面试题24:二叉搜索树与双向链表
分析:1. 二叉树中,每个结点都有两个指向子结点的指针。2. 在双向链表中,每个结点也有两个指针,分别指向前一个结点和后一个结点。3. 二叉搜索树中,左子结点的值总是小于父结点的值,右子结点的值总是大于父结点的值。4. 将二叉搜索树转换为双向链表时,原先指向左子结点的指针调整为链表中指向前一个结点的指针,原先指向右子结点的指针调整为链表中指向后一个结点的指针。5. 由于要求转换原创 2013-07-23 13:05:13 · 1754 阅读 · 0 评论 -
面试题19:包含min函数的栈
题目:普通栈需要O(n)时间才能找到栈中的最大或最小的元素,如何使得栈在O(1)时间内得到其最大或最小值?思路:对栈进行特殊设计,使栈具有包含min,max函数,时间代价为O(1)。原创 2013-07-22 11:51:16 · 1543 阅读 · 0 评论 -
字符串的三种存放方式
#include "stdafx.h"#include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ //用字符串数组存放一个字符串 char str1[] = "I am happy!"; cout << str1 << endl; //用字符串变量存放字符串 string原创 2013-07-22 20:25:08 · 2500 阅读 · 0 评论 -
用指针输出二维数组
#include "stdafx.h"#include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; int *p;//指针p是指向整型数据的指针变量 for (p=a[0]; p<a[0]+12; p+原创 2013-07-22 20:23:35 · 5723 阅读 · 1 评论 -
面试题22:二叉搜索树的后序遍历序列
分析:在后序遍历得到的序列中,最后一个数字是树的根结点的值,数组中前面的数字可分为两个部分:第一部分是左子树结点的值,它们都比根结点的值小,第二部分是右子树结点的值,它们都比根结点的值大。代码:#include "stdafx.h"#include using namespace std;bool VerifySequenceOfBST(int nSequence[], int n原创 2013-07-22 16:57:48 · 1434 阅读 · 0 评论 -
面试题23:二叉树中和为某一值的路径
代码:#include "stdafx.h"#include #include using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};void FindPath(BinaryTreeNode *pRoot,原创 2013-07-22 22:54:56 · 976 阅读 · 0 评论 -
面试题20:栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就是不可能是该压栈序列的弹出序列。原创 2013-07-22 15:18:46 · 3449 阅读 · 0 评论 -
面试题21:从上往下打印二叉树
代码:#include "stdafx.h"#include #include using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};void PrintFromTopToDown(BinaryTreeNod原创 2013-07-22 15:43:18 · 1323 阅读 · 0 评论 -
面向对象的三大特点
封装:包含两方面,一是将有关的数据和操作代码封装在一个对象中,形成基本单位,各个对象之间相互独立,互不干涉。二是将对象中某些部分对外隐藏,及隐藏其内部细节,只留下少量接口,以便于外界联系,接受外界的消息。这种对外界隐藏的做法称为信息隐藏。抽象的作用是表示同一类事物的本质。继承:软件开发中已经建立了一个类A,又想另外建立一个类B,而后者与前者内容基本相同,只是在前者的基础上增加一些属性和行为原创 2013-09-01 19:34:01 · 1036 阅读 · 0 评论 -
static在C和C++中的用法和区别
原文链接:http://blog.csdn.net/skyereeee/article/details/8000512static主要有三个作用: (1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数前两种C和C++都有,第三种仅在C++中有,下面分别作以下介绍: 一、局部静态变量 在C/C++中, 局部变量按照存储形式可分为三种auto,转载 2013-09-02 16:13:40 · 917 阅读 · 0 评论 -
练手小程序2.链表翻转问题
问题1:给出一个链表,将其翻转,比如链表1→2→3→4→5→6,翻转后6→5→4→3→2→1;问题2:给出一个链表和一个数k,将链表进行翻转,比如链表1→2→3→4→5→6,k=2, 则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6考察的知识点:链表的灵活操作代码如下:#include "s原创 2014-03-04 20:40:15 · 1982 阅读 · 0 评论 -
带命令行参数的main函数详解[转载]
一、main()函数的形式 在最新的 C99 标准中,只有以下两种定义方式是正确的: (参阅ISO/IEC 9899:1999 (E) 5.1.2.2.1 Program startup) int main( void )--无参数形式 { ... return 0;转载 2013-11-25 17:32:26 · 8412 阅读 · 6 评论 -
C++ 智能指针详解
C++ 智能指针详解 一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_p转载 2013-11-03 10:29:22 · 1014 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,转载 2013-11-02 17:14:01 · 1059 阅读 · 0 评论 -
C++与JAVA的区别
转自百度文库http://wenku.baidu.com/view/71b04eebe009581b6bd9ebfc.html 1.Java没有显式指针,而在C++中却可以用。 2.Java是主动多态的,你不用关心具有继承关系的多个类之间的同名成员函数会调用哪个,Java会主动地从祖父类、祖祖父类……追溯至最高一级父类,然后从上至下开始寻找并调用。C++不会主动使用多态,要使用多态,就转载 2013-10-30 13:59:04 · 6847 阅读 · 0 评论 -
C语言运算符优先级
优先级操作符描述例子结合性1()[]->.::++--调节优先级的括号操作符数组下标访问操作符通过指向对象的指针访问成员的操作符通过对象本身访问成员的操作符作用域操作符后置自增操作符后置自减操作符(a + b) / 4;array[4] = 2;ptr->age = 34;obj.age = 34;转载 2013-10-22 11:05:10 · 913 阅读 · 0 评论 -
二叉树的先序、中序、后序遍历的递归和非递归实现
#include "stdafx.h"#include using namespace std;const int MAXSIZE = 20; //定义栈空间大小为20struct BTNode{ char m_value; BTNode *m_left; BTNode *m_right;};BTNode *stackArr[MAXSIZE] =原创 2013-10-07 13:17:22 · 5159 阅读 · 1 评论 -
全局变量、局部变量、静态全局变量、静态局部变量的区别 .
1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。从作用域看:1>全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含 全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。2>静态局部变量具有局部作用域,它转载 2013-09-17 15:57:48 · 1448 阅读 · 0 评论 -
struct与class的区别
转载来源:http://blog.sina.com.cn/s/blog_48f587a80100k630.htmlC++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗? 能!struct能继承吗? 能!!struct能实现多态吗? 能!!! 既然这些它都能实现,那它和class转载 2013-09-10 09:35:31 · 1267 阅读 · 0 评论 -
面试题12:调整数组顺序使奇数位于偶数前
思路:1. 设置两个指针,初始状态第一指针指向数组的第一个数,第二个指针指向数组的最后一个数;2. 若第一个指针指向的数是奇数,则指针向右移动一位,第二个指针指向的数是偶数,则指针向左移动;3. 若第一个指针和第二个指针指向的数恰好分别为偶数和奇数,则交换数字。代码:原创 2013-07-20 22:05:13 · 1132 阅读 · 0 评论 -
面试题11:在O(1)时间删除链表结点
方法一:顺序查找要删除的结点,并在链表中删除。时间复杂度为O(n),不满足题目要求代码:void DeleteNode(ListNode **pListHead, ListNode *pToBeDeleted){ if (*pListHead != NULL && pToBeDeleted != NULL) { if (*pListHead == pToBeDeleted)原创 2013-07-20 21:14:35 · 1331 阅读 · 0 评论 -
面试题18:顺时针打印矩阵
分析:把矩阵想象成若干个圈,用一个循环打印矩阵,每次打印矩阵的一个圈#include "stdafx.h"#include using namespace std;void PrintMatrixIncircle(int **nArr, int rows, int columns, int nStart){ int nEndX = columns - 1 -nSta原创 2013-07-22 11:12:54 · 7018 阅读 · 0 评论 -
面试题3:替换空格和清除空格
一、替换空格请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.",则输出”We%20are%20happy."分析:在空间复杂度尽可能低的情况下,不允许开辟一个新的数组来存放替换空格后的字符串。如果从前往后替换字符串,那么保存在空格后面的字符串肯定会被覆盖。假设字符串的长度为n。对每个空格字符,需要移动后面O(n)个字符,因此对含有O(n)个空格字符原创 2013-07-15 10:41:38 · 3157 阅读 · 3 评论 -
面试题2:二维数组中的查找
查找思路:首先选取数组中右上角的数字,如果该数字等于要查找的数字,查询过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每次都在数组的查找范围中剔除一行或一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。原创 2013-07-14 15:56:07 · 2104 阅读 · 0 评论 -
面试题1:如何实现C++单例模式?
1. 软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态。真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。 2. 当仅允许类的一个实例在应用中被创建的时候,我们使用单例模式(Singleton Pattern)。它保护类的创建过程来确保只有一个实例被创建,它通过设置类的构造方法为私有(priv原创 2013-07-14 09:56:40 · 9033 阅读 · 0 评论 -
总结const的用法
1. const的用法:(1)定义常量(2)修饰函数的参数(3)修饰函数的返回值(4)修饰函数的定义体2. 用const 修饰函数的参数(1)const 只能修饰输入参数如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地改动该指针。 例如:void StringCopy(char *strDestination, const c原创 2013-07-08 23:30:43 · 14324 阅读 · 1 评论 -
继承和组合
继承:若在逻辑上B 是A 的一种,并且A 的所有功能和属性对B 而言都有意义,则允许B 继承A 的功能和属性。例如男人(Man)是人(Human)的一种,男孩(Boy)是男人的一种。那么类Man 可以从类Human 派生,类Boy 可以从类Man 派生。class Human{…};class Man : public Human{…};class Boy : publ原创 2013-07-08 22:43:27 · 1533 阅读 · 0 评论 -
类的构造函数、析构函数与赋值函数
摘自林锐高质量C++编程1. 每个类最基本的函数包括:构造函数、析构函数与赋值函数 每个类只有一个析构函数和一个赋值函数,但可有多个构造函数(包含一个拷贝构造函数和若干普通构造函数)例如String的结构如下:class String{public:String(const char *str = NULL); // 普通构造函数String(const String原创 2013-07-08 20:23:54 · 1019 阅读 · 0 评论 -
指针与数组的对比
以字符串为例比较指针与数组的特性1. 修改内容字符数组a 的容量是6 个字符,其内容为hello\0。内容可变。指针p 指向常量字符串“world”(位于静态存储区,内容为world\0),常量字符串的内容是不可被修改的。char a[] = “hello”;a[0] = ‘X’;cout << a << endl;char *p = “world”; // 注意p 指向常量原创 2013-07-08 16:39:49 · 699 阅读 · 0 评论 -
C++函数重载、覆盖与隐藏的区别
一.成员函数的重载,其特点:(1)在同一个类中; (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无。 二.覆盖是指派生类函数覆盖基类函数,其特点:(1)位于派生类与基类中;(2)函数名字相同; (3)参数相同; (4)基类函数必须有virtual 关键字。扩展理解:1.加virtual关键字的函数是虚函数,它是在基原创 2013-06-06 16:52:06 · 1352 阅读 · 0 评论 -
vs2008 C++项目连接mysql数据库详解
这两天由于写程序需要,须将c++程序中的数据存储在mysql数据库中,因此在网上各种找资料,终于弄清楚了整个流程。今天抽出点时间整理,方便自己,同时和各位分享。有错误的地方,请积极批评指正!第一步:安装MySQL5.5(下载地址:http://dev.mysql.com/downloads/mysql/)这里给出安装MySQL5.1的流程图解,5.5安装类似。一、MySQL5.1安装原创 2012-11-21 11:12:06 · 10170 阅读 · 5 评论 -
面试题4:从尾到头打印链表
方法一:利用栈实现C++代码:#include "stdafx.h"#include #include using namespace std;//链表中的结点类型struct ListNode{ int m_nKey; ListNode *m_pNext;};//从尾到头打印链表void PrintLinkedListReversely(ListNode *pH原创 2013-07-18 21:34:14 · 1442 阅读 · 0 评论 -
面试题6:用两个栈实现队列
题目:用两个栈实现一个队列。请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。原创 2013-07-19 15:45:37 · 1240 阅读 · 0 评论 -
面试题5:重建二叉树
思路:先根据先序序列第一个数建立根节点,然后再中序序列中找到根节点的位置,进而确定左右子树的前序序列和后序序列,递归的构建左右子树。C++代码:#include "stdafx.h"#include #include using namespace std;struct BiTreeNode{ int m_nData; BiTreeNode *m_pLeftChild;原创 2013-07-19 10:59:43 · 1136 阅读 · 0 评论 -
面试题17:二叉树的镜像
例如:下面两棵树互为镜像思路:先序遍历树的每个结点,若遍历到的结点有子节点,则交换它的两个结点。代码:#include "stdafx.h"#include using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRi原创 2013-07-21 21:39:39 · 4554 阅读 · 0 评论 -
面试题16:树的子结构
思路:首先在树A中找到和B的根结点的值一样的结点R,然后再判断树A中以R为根的子树是否包含树B一样的结构。递归代码:#include "stdafx.h"#include using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pR原创 2013-07-21 21:13:36 · 1266 阅读 · 0 评论 -
面试题15:合并两个排序的链表
方法一:非递归代码:#include "stdafx.h"#include using namespace std;struct ListNode{ int m_nValue; ListNode *m_pNext;};//合并两个有序链表,非递归方法ListNode *MergeTwoList(ListNode *pListOneHead, ListNode *pLi原创 2013-07-21 16:41:34 · 9834 阅读 · 2 评论 -
面试题14:反转链表
代码:#include "stdafx.h"#include using namespace std;struct ListNode{ int m_nValue; ListNode *m_pNext;};ListNode *ReverseList(ListNode *pListHead){ if (pListHead == NULL) { return NULL;原创 2013-07-21 15:11:53 · 1068 阅读 · 0 评论