自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 虚基类

//虚基类主要解决在多重继承时,基类可能被多次继承,虚基类主要提供一个基类给派生类,如:#include using namespace std;class Base// 声明为基类Base{ int nv;//默认为私有成员public://外部接口 Base(int n) { nv = n; cout << "Member of Base" << endl

2015-10-01 15:21:03 480

原创 计算一段字符串中单词的个数

#include#include#include #include using namespace std;void CountWords(){ //ifstream is("/*打开输入文件*/"); //ofstream os("/*打开输出文件*/"); map mp; map::iterator it; string str; getline(cin,str);

2015-09-26 22:17:54 570

原创 vector容器的基本操作(输入和输出)

#include#include#includeusing namespace std;int main(){ string word; vector text; while(cin>>word)//向一个容器中任意添加字符 { if(word=="stop") break; text.push_back(word); } vector::iterator it

2015-09-26 10:34:50 6605

原创 统计文本文件中数字字符出现的次数

//现有一个文件文本,请写出一个程序,统计该文件中每个数字字符(0~9)出现的次数。#include#includeusing namespace std;int main(){ ifstream in;//ifstream 读操作的文件类 in.open("test.txt");//打开文件 if(!in)//当读取失败 { cout<<"打开文件出错"<<en

2015-09-25 10:59:02 1983

原创 求正弦函数sin(x)的近似值的多项式求解

/*已知求正弦 sin(x) 的近似值的多项式公式为:sin(x) = x - x3/3! + x5/5! - x7/7!+ …… + (-1)n x2n+1/(2n+1)! + … */#include#include void main(){ int i; float x,sum,a,b; //sum代表和,a为分子,b为分母 char s; printf(

2015-09-23 14:36:49 12283 3

原创 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。

//题目:输入一个已经按升序排序过的数组和一个数字,//在数组中查找两个数,使得它们的和正好是输入的那个数字。#includeusing namespace std;void fun(int num[],int n,int sum){ //定义两个下标 int i = 0; int j = n - 1; int tmp; bool solve = fals

2015-09-20 20:52:25 765

原创 反转句子(自己写的)

#includeusing namespace std;void fun(char *begin,char *end){ if(begin==NULL || end==NULL) return; while(begin<end) { int temp = *begin; *begin = *end; *end = temp; begin++; end--; }}

2015-09-20 20:00:58 580

原创 输入一个字符串,求出该字符串的字符集

//输入一个字符串,求出该字符串的字符集(去掉已经重复的字符)#includeusing namespace std;void Characters(char *string){ if(string == NULL) return; const int tablesize = 256; unsigned int hashtable[tablesize]; for(unsigne

2015-09-10 22:46:50 566

原创 荷兰国旗问题

//题目:将乱序的红白蓝三色小球排成同颜色在一起的小球组(按红白蓝排序),这个问题称为荷兰国旗问题。//思想:类似于partition过程。利用三个指针,一前begin,一中current,一后end,begin和current都初始//化指向数组首部,end初始化指向数组尾部。//current遍历整个数组序列,current指向0时,与begin交换,而后current++,begin+

2015-09-10 18:26:20 428

原创 对数组排序,要求相对位置不变

//题目:给定含有n个元素的数组a,其中包括0元素和非零元素,对数组排序,要求://排序后所有0元素在前,所有非零元素在后,且非零元素排序前后相对位置不变,不能使用额外的存储空间。#includeusing namespace std;void Partition(int a[],int low,int high)//一次快速排序{ int i = high+1; for(int j

2015-09-10 16:38:11 992

原创 快速排序算法(两个指针一前一后逐步向后扫描)

//快速排序的另一种方法:以最后一个元素为枢轴值,从前往后进行比较,//那么一次快速排序后,枢轴左边的元素的相对位置不变。#includeusing namespace std;int Partition(int a[],int low,int high)//快速排序{ int x = a[high]; int i = low -1; for(int j = low;j<=high

2015-09-10 16:25:19 1004

原创 将数组中的大写字母与小写字母分开

//题目:将数组中的大写字母与小写字母分开(利用快速排序)#includeusing namespace std;bool isUpper(char a){ if(a>='A' && a<='Z') return true; else return false;}bool isLower(char a){ if(a>='a' && a<='z') return tr

2015-09-10 11:17:08 1235

原创 判断一棵二叉树是不是二叉排序树

//判断一棵二叉树是不是二叉排序树//思路:二叉排序树的特点是,若左子树非空,则左子树上结点的值均小于根结点的值;//若右子树非空,则右子树上结点的值均大于根结点的值。所以根据这一特点,可以看出//二叉排序树的中序遍历是一个递增序列。#include#include using namespace std;int prev1 = INT_MIN;typedef struct BiT

2015-09-09 22:11:33 4360

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

//题目:求二叉树中结点的最大距离(距离:为两节点之间边的个数)//思路:情况A:路径经过左子树的最深结点,通过根节点,再到右子树的最深结点。// 情况B:路径不经过根节点,而是左子树或右子树的最大距离,取其大者。//此问题的核心是,情况A和B需要不同的信息:A需要子树的最大深度,B需要子树的最大距离。//只要函数能在一个节点同时计算及返回这两个信息即可。#includeus

2015-09-09 17:22:39 370

原创 比较两棵旋转的二叉树是否相等

//递归算法#includeusing namespace std;typedef struct BiTreeNode{ int data; BiTreeNode* lchild; BiTreeNode* rchild; BiTreeNode(int x) : data(x), lchild(NULL), rchild(NULL) {}};bool IsEqual(BiTree

2015-09-09 10:43:44 345

原创 二叉树遍历的非递归算法

//二叉树遍历的非递归算法#include#includeusing namespace std;typedef struct BiTreeNode{ int data; BiTreeNode* lchild; BiTreeNode* rchild; BiTreeNode(int x) : data(x), lchild(NULL), rchild(NULL) {}};//先

2015-09-09 10:09:20 330

原创 删除环状单向链表中的重复元素的操作

//题目:编码实现环状单向链表,去除连续的重复元素的操作。//思路:定义两个指针,其中p是q的前驱,然后逐个遍历,依次删除重复元素。#include#includeusing namespace std;typedef struct node{ int data; struct node *next; node(int x) : data(x), next(NULL) {} }

2015-09-08 20:00:31 508

原创 两个单向链表,判断它们是否相交,若相交,找出它们的第一个公共的结点

思路:           首先利用快慢指针判断链表是否存在环。   (1)如果都不存在环,则如果两个链表相交有公共的结点,即从某一结点开始,它们的next都指向同一个结点。因此我们判断两个链表是不是相交,只要分别遍历两个链表到末尾。如果两个末尾结点是一样的,说明它们相交;否则,两个链表不想交。        链表相交,如何寻找第一个相交的结点?首先两个链表各遍历一次,求出两个链表的长

2015-09-08 19:01:47 496

原创 输出链表时倒数第K个结点

//输入一个链表,输出该链表中倒数第K个结点//思路:定义两个指针,第一个指针从链表的头指针开始遍历向前走K-1个,//第二个指针不变;从第K步开始,第二个指针也开始从链表的头指针开始遍历,//当第一个指针到达表尾时,第二个指针所指的结点就是倒数第K个结点。#includeusing namespace std;typedef struct node{ int data; str

2015-09-08 18:55:18 365

原创 快慢指针

//单链表中的快慢指针:快指针每次沿链表向前移动2,慢指针每次沿链表向前移动1。//应用1:判断单链表是否存在环#include#includeusing namespace std;typedef struct node{ int data; node *next;};bool isLoop(node *head){ node *p = head;//快指针 node

2015-09-08 10:47:51 288

原创 删除链表结点

//题目1:假设有一个没有头指针的单链表。一个指针指向单链表中间的一个节点(不是第一个也不是最后一个节点),请将该节点从单链表中删除。//思路:将当前节点的内容与后续节点的内容进行交换,然后再删除后续节点。#include#includeusing namespace std;typedef struct node{ int data; node *next;};bool de

2015-09-08 10:12:39 315

原创 第一次只出现一次的字符

//在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’。#includeusing namespace std;char FirstNotRepatingChar(char *pString){ if(pString == NULL) return '\0'; const int tablesize = 256; unsigned int hasht

2015-09-02 15:34:33 330

原创 快速排序

//快速排序是对冒泡排序的一种改进,是基于分治的。(不稳定算法)#includeusing namespace std;//一趟快速排序的算法为:int Partition(int a[],int low,int high){ int pivot = a[low]; while(low<high) { while(low=pivot) --high; a[

2015-09-01 20:38:13 417

原创 冒泡排序(升序)

//冒泡排序思想:假设待排序表长为n,从后往前(或从前往后)两两比较相邻元素的值,若为逆序//则交换它,直到序列比较完为止。这是一趟排序,最小的元素就会想泡沫一样漂浮到第一个为止。//第二趟的时候,第一个位置就不用比较了。#includeusing namespace std;void BubbleSort(int a[],int n){ //用冒泡排序把数组中的元素暗从小到大排序

2015-09-01 19:49:05 716

原创 对数组进行直接插入排序

#includeusing namespace std;//数组中的直接插入排序(降序)void InsertSort(int a[],int n){ int i,j; for(i=1;i<n;++i) { int t= a[i]; j=i-1; while(j>=0 && t>a[j]) { a[j+1]=a[j]; j--; } a[j+1]=

2015-09-01 19:15:14 609

原创 对栈元素进行升序排列

//写一个算法将栈里的元素升序排列。//思想:先设一个辅助栈。将原始栈中的数据一次弹入辅助栈,每当要压入的栈顶元素的值//比辅助栈中的元素值大时,就把辅助栈中的元素压入原始栈,直到辅助栈中的元素都小于原始栈的栈顶元素。#include#includeusing namespace std;stack sort(stack s){ stack r;//设一个辅助栈 while(!s

2015-08-31 21:35:29 1150

原创 用两个栈实现队列

#include#includeusing namespace std;template class MyQueue{ stack s1,s2; public: MyQueue(){} /*int size() { return s1.size()+s2.size(); } bool empty() { if

2015-08-31 20:33:25 278

原创 删除字符串中的空格字符

#include#include#includeusing namespace std;char *DeleteBlank(char *s){ assert(s!=NULL); int i=0,j=0; //删除字符串开始的空白符 while(s[j] == ' ') j++; //删除字符串尾部的空白符 int len=strlen(s)-1; wh

2015-08-31 16:49:51 546

原创 删除模式串中出现的字符

#include#includeusing namespace std;//例如:原始串为:welcome to asted.模式串为:aeiou.char *fun(char *s){ assert(s!= NULL); int i=0,j=0; while(s[j] !='\0') { while(s[j] == 'a'||s[j]=='e'||s[j]=='i'||s[

2015-08-31 15:57:31 256

原创 字符串的复制

#include#includeusing namespace std;char *strcpy(char *strDest,const char *str){ assert((strDest!= NULL) && (str !=NULL)); char *address = strDest; while((*strDest++ = *str++ ) !='\0'); return

2015-08-30 11:45:20 320

原创 扑克牌的顺子

//从扑克牌中随机抽取五张牌,判断是不是顺子。2~10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。//思路:把5张牌看成由5个数字组成的数字数组。大小王比较特殊,先定义为零,其它牌就对应为本来的数字。//我们先对数组排序,由于O可以看成任意的数字,所以可以先统计数组中零的个数,在统计出数组中空格的个数,然后再比较。#include#include //标准库

2015-08-30 11:07:00 450

原创 字符串反转

//题目:字符串中单词的逆转,即将单词出现的顺序进行逆转。如:Today is Friday!转为 !Friday is Today。#include//#include//#includeusing namespace std;void *reverse (char *be,char *ed){ if(be ==NULL || ed == NULL) return NULL; w

2015-08-30 09:36:54 260

原创 最高分多少问题(华为2016)

老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩. 输入描述:输入包括多组测试数据。每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。学生ID编号从1编到N。第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为'Q'的时候, 表示这是一条询问操作,他

2015-08-28 19:19:26 317

原创 二叉树的深度

//输入一颗二叉树的根节点,求该树的深度//思路:先求出左右子树的深度,再求出根节点的深度。(树的后序遍历)#include//#includeusing namespace std;struct TreeNode{ int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x),

2015-08-28 17:06:26 264

原创 挑出字符串中的大写字母

#includeusing namespace std;char *SelectUpper(const char *str,int length){ if(str == NULL) return 0; char *result = new char[length+1]; int i=0,j=0; while(*str != '\0') { if(*str >=

2015-08-28 14:59:47 887

原创 字符串转换成数字

//题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。#include#includeusing namespace std;enum Status {valid = 0,invalid};int gStatus = valid;//gStatus是一个全局变量,用来标记非法输入,0int StrToInt(const char *str){ gStatus = inva

2015-08-28 14:30:27 355

原创 数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数字。

//数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数字。(腾讯)//思路:这个数字出现个数一定大于其他全部数字出现个数之和。#include#includeusing namespace std;int function(int data[],int length){ int currentAxis; int currentNum=0; for(int i=0;i<

2015-08-28 12:14:51 509

原创 左右比较大小

/*题目:一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。思路:先定义一个辅助数组rightMin[]来记录原始数组a[i]右边的最小值(包括自己)。再定义一个变量max来记录a[i]左边的最大值(包括自己)。当a[i]的max等于rightMin[i]时,就满足条件。*/#include//#define n 7usin

2015-08-28 10:05:26 404

原创 数组乘积

//题目:数组乘积(腾讯,搜狗,小米)#includeusing namespace std;#define N 4 // 宏定义int *cal(int *input,int n){ int *result=new int[n];//动态生成一个大小为n,数据元素类型为int的数组 //先算当前数字的左边乘积 result[0] = 1; for(int i=1;i<n;++i

2015-08-27 11:16:51 431

原创 顺时针打印矩阵

//题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。#include#includevoid PrintMatrixInCircle(int *numbers, int columns, int rows, int start);void PrintMatrixClockwisely(int *numbers,int columns,int rows){ if (n

2015-08-26 22:33:31 255

空空如也

空空如也

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

TA关注的人

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