![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
HoweFan
这个作者很懒,什么都没留下…
展开
-
一个函数返回参数二进制中 1 的个数
方法一:#includeint bit_count(unsigned int n){int count;for (count = 0; n; n &= n - 1){count++;}return count;}int main(){int y;int c;printf("请输入一个数:");scanf("%d", &c);y = bit_count(c);pri原创 2016-05-26 12:27:25 · 199 阅读 · 0 评论 -
从尾到头打印链表
#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;#include<stack>struct ListNode{ int _value; ListNode* _next; ListNode(int value) :_value(value), _原创 2016-06-24 00:23:08 · 206 阅读 · 0 评论 -
重建二叉树
#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;struct BinaryTreeNod`这里写代码片`e{ int _value; BinaryTreeNode* _left; BinaryTreeNode* _right; BinaryTreeNode(int val原创 2016-06-24 14:59:34 · 226 阅读 · 0 评论 -
两个栈实现一个队列
栈的特点: 先进后出 队列特点: 先进先出 实现方法: 定义两个栈,在插入队列的时候往栈1中插入,在删除的时候先把栈1的数据全部插入到栈2中,然后删除栈2顶部的元素。#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;#include<stack>template<class T>class Q原创 2016-06-24 18:48:03 · 222 阅读 · 0 评论 -
二叉树的后序序列
/****************************************************描述: 输入一个整数数组,判断该数组是不是某个搜索二叉树 的后序遍历。思路: 1、后序遍历中,最后一个节点为根节点。 2、数组可以分为两部分,前面的值比根 节点小,后面的值比根节点大。 3、利用递归的思想,将每个点都作为根 节点来判断,如原创 2016-07-22 20:05:05 · 940 阅读 · 0 评论 -
栈的压入弹出序列的合法性
/********************************************描述: 输入两个整数序列,第一个整数序列表示栈的压 入顺序,请判断第二个序列是否为栈的弹出序列方法: 定义一个栈,刚开始时将第一个元素压入栈中, 然后判断栈顶的元素和第二个序列的元素是否 相同,如果相同则pop掉栈顶的这个元素,否则 继续压入第一个序列到栈中,以原创 2016-07-22 20:07:38 · 339 阅读 · 0 评论 -
每次弹出一个栈的最小元素
/************************************************描述: 定义栈的数据结构,实现一个能找到栈的最小元素的 函数,要求:push、pop、和求最小元素的时间复杂 度都为O(1)*************************************************//*************************原创 2016-07-22 20:11:18 · 373 阅读 · 0 评论 -
数字在排序数组中出现的次数
描述: 统计一个数字在已排序数组中出现的次数。如{1,2,3,3,3,4,5} 3出现的次数为3次方法: 利用两次二分查找分别找到这个数第一次出现的下标和最后一次出现的下标,利用下标算出出现的次数。时间复杂度:O(logn)#define _CRT_SECURE_NO_WARNINGS#includeusing namespa原创 2016-07-12 17:12:22 · 232 阅读 · 0 评论 -
求二进制中1 的个数
问题描述: 实现一个函数,输入一个整数,求这个整数的二进制中1的个数。方法1 每次让最右边的以为& 1,然后将这个数右移一位,当这个数为0的时候停止。 //缺点负数重1的个数不能求出,会陷入死循环int NumOf1(int x){ int count = 0; while (x) { if (x & 1 == 1) {原创 2016-07-02 20:14:36 · 224 阅读 · 0 评论 -
求一个已排序旋转数组中的最小的数
描述: 给一个已经排好序的数组,然后再将他进行旋转(将前n个数搬到末尾)如数组{1,2,3,4,5}旋转为{3,4,5,1,2},求数组中的最小数字。解法: 利用二分查找来提高查找效率。(原理:部分有序)。 代码:特殊情况: 数组{0,1,1,1,1}变为{1,1,1,0,1} 要将这种情况考虑进去。#define _CRT_SECURE_NO_WARNINGS#include<ios原创 2016-07-03 13:19:13 · 220 阅读 · 0 评论 -
数值的整数次方
描述: 模拟实现pow函数特殊情况: 底数为0且指数为负数的时候直接报错。 0的0次方在数学上没有意义,在这里当作1来处理。#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;#define RANGE 0.000001double Pow(double base, int exponent){原创 2016-07-03 15:26:44 · 250 阅读 · 0 评论 -
反转一个整数
扭转的整数的数字。 例1:X =123,返回321 例2:X =-123,返回-321需要考虑的问题: 1、整数的最后一个数字是0,应该输出什么?即,例如10,100。 2、反向整数可能溢出?假定输入是32位的整数,则 逆转1000000003溢出。你应该如何处理这种情况? 抛出一个异常?好,但如果抛出异常是不是一种选择?然后,重新设计功能(即,添加一个额外的参数)。CODE#inclu原创 2016-06-21 23:40:52 · 2417 阅读 · 0 评论 -
求一个整数是否是回文(正着念和反着念都一样)
要求:不需要额外的空间。 分析: 1、负整数是回文? (例如,-1)(NO) 2、如果你正在考虑的整数转换为字符串,请注意使用额外空间的限制。 3、可以尝试扭转一个整数。前提是你已经解决了这个问题“反向整型”颠倒整数可能溢出。新思路: 不断地取第一位和最后一位(10 进制下)进行比较,相等则取第二位和倒数第二位,直到完成比较或者中途找到了不一致的位。CODE#define _CRT_SE原创 2016-06-22 00:18:19 · 1443 阅读 · 0 评论 -
leetcode合并时间区间
给定一组非重叠的时间间隔的,插入一个新的时间间隔成区间(可能需要合并)。 实施例1:给定的时间间隔[1,3],[6,9],插入并在如[1,5]合并[2,5],[6,9]。 实施例2:给定[1,2],[3,5],[6,7],[8,10],[12,16],插入和作为合并[4,9]后为[1,2],[3,10],[12,16]。时间复杂度O(n),空间复杂度O(1) CODE#define _CRT原创 2016-06-22 17:06:14 · 1296 阅读 · 0 评论 -
设计一个类只能生成该类的一个实例
class Singleton{public: Singleton() { if (_count == 0) { cout << "进行构造函数" << endl; _count++; } else { cout << "构造失败"原创 2016-06-23 15:58:37 · 1189 阅读 · 0 评论 -
Jump Game
描述 Given an array of non-negative integers, you are initially positioned at the first index of the array. Each element in the array represents your maximum jump length at that position. De原创 2016-07-29 19:15:58 · 287 阅读 · 0 评论 -
二位数组中的查找
题目: 给一个二维数组每一行的数字是从左到右是递增的,每一列的数字从上到下是递增的,查找一个数是否在这个二维数组中存在存在。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<assert.h>using namespace std;bool Find(int* arr,int rows,int cols,int num)原创 2016-06-23 16:34:30 · 258 阅读 · 0 评论 -
顺时针打印矩阵
描述:给定一个矩阵,按照从外到里的顺序打印每一个 数字 分析 1、找到每个圈打印开始的地方(发现这个数的下标*2只要小于总的行和列就行) 2、每找到一个就循环打印 注意: 边界条件#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;void PrintMatexInCycle(int (*arr原创 2016-07-21 20:57:56 · 233 阅读 · 0 评论 -
替换空格
给一个字符串,将其中的空格用一个东西替换 要求:时间复杂度O(n) 应用:网络编程中将特殊字符替换获得正确的参数值。#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;void ReplaceBlank(char *str, size_t len)//len为数组的总长{ if (str ==原创 2016-06-23 23:50:59 · 240 阅读 · 0 评论 -
日期类的实现
#includeusing namespace std;class Data{public:Data(int year , int month, int day) ;void Display(); bool IsInvalidData();int DayOfMonth();Data& operator=(Data const& d){if (this != &d){_原创 2016-05-26 12:27:57 · 233 阅读 · 0 评论 -
内联函数与宏的区别
产生: 内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展;也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(上下文),从而节省了每次调用函数带来的额外时间开支。但在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。比较: (1)宏调用并不执行原创 2016-05-26 12:28:41 · 280 阅读 · 0 评论 -
二维数组的输出问题
#include#includeint main(){int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};int b[5]={1,2,3,4,5};printf("%d,%d\n",a,*a);//0行首地址和0行0列元素地址printf("%d,%d\n",b,*b);printf("%d,%d\n",a[0],(*(a+0)));//0行0原创 2016-05-26 12:27:28 · 633 阅读 · 0 评论 -
将两个值进行交换的方法
#includeint main(int argc, char* argv[]){int a=5,b=10,c=0;c=a;a=b;b=c;printf("a=%d b=%d\n",a,b);return 0;}可能会溢出:#includeint main(int argc, char* argv[]){int a=5,b=10;a=a+b;b=a-b;a=a-b;原创 2016-05-26 12:27:31 · 278 阅读 · 0 评论 -
用C语言打印一个菱形
#include#include"math.h" int main() {int i,j,k; for(i=0;i<=6;i++) {for(j=0;j<=5-i;j++) printf(" "); for(k=0;k<=2*i;k++) printf("*"); printf("\n"); } for(i=原创 2016-05-26 12:27:34 · 815 阅读 · 0 评论 -
编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现。
#includeint main(){int cou=0;char ch;while((ch=getchar())!='\n'){if(ch=='{')cou++;else if(ch=='}'){if(cou==0)printf("匹配不成功!");cou--;}}if(cou==0)printf("匹配成功!");elseprintf("匹配不成功!");原创 2016-05-26 12:27:37 · 374 阅读 · 0 评论 -
括号匹配问题
#includeint main(){int cou=0;char ch;while((ch=getchar())!='\n'){if(ch=='{')cou++;else if(ch=='}'){if(cou==0)printf("匹配不成功!");cou--;}}if(cou==0)printf("匹配成功!");elseprintf("匹配不成功!");原创 2016-05-26 12:27:40 · 247 阅读 · 0 评论 -
用c语言实现折半查找函数
#include #include int binsearch(int x, int arr[], int left, int right){while (left <= right){int mid = (left+right)/2;if (arr[mid] == x){return mid;}else if (arr[mid] < x){left = mid + 1;原创 2016-05-26 12:27:43 · 879 阅读 · 0 评论 -
猜数字游戏
#include# include# includevoid menu() { printf("*********************\n");printf("欢迎进入该游戏系统!\n");printf("选择:\n"); printf("1:start\n"); printf("2:exit\n"); printf("**************原创 2016-05-26 12:27:46 · 242 阅读 · 0 评论 -
关于指针的一些总结
对于动态分配的内存在使用前一定要检验是否分配成功,在使用完成之后进行释放。检验方法:int *p = (int *)malloc(10 * sizeof(int));if (p == NULL){printf("out of memory\n");return 1;}指针和数组的对比:指针用来保存数据的地址,数组保存数据,数组名代表数组的首元素地址,&a才是整个数组的地址。指针间接访问数原创 2016-05-26 12:27:49 · 268 阅读 · 0 评论 -
通讯录的简单实现
#include#include#includeint count= 0;int menu();void add();void select();void modify();void watch();void clear();void name_sort();void del();struct people{char name[20];char sex[4]原创 2016-05-26 12:27:52 · 378 阅读 · 0 评论 -
链表面试题
#include#include#include#includetypedef int DataType;typedef struct SListNode{DataType data;struct SListNode *next;}SListNode;void PrintFromEndToTail(SListNode * &Head);// 从尾到头打印。void SList原创 2016-05-26 12:28:00 · 382 阅读 · 0 评论 -
注释转换
#include#includetypedef enum ConvertState{SUCCESS,NO_MATCH,}ConvertState;typedef enum State{C_BEGIN,C_END,};ConvertState Convert(FILE *fIn, FILE *fOut){assert(fIn);assert(fOut);int fla原创 2016-05-26 12:28:09 · 205 阅读 · 0 评论 -
字符串转浮点数 字符串转整型数
#define _CRT_SECURE_NO_WARNINGS#include#include#includedouble AtOf(const char* ptr);double AtOi(const char* ptr){assert(ptr);double value = 0.0;double sign = 0;while (*ptr == ' ')//跳过空格{p原创 2016-05-26 12:28:12 · 341 阅读 · 0 评论 -
智能指针的简单实现
智能指针:动态的管理开辟的内存,防止人为的内存泄漏。SharedPtr的实现:原理:使用引用计数的原理使多个对象可以指向一块空间。#define _CRT_SECURE_NO_WARNINGS#includeusing namespace std;template class SharedPtr{public:SharedPtr():_count(new int(1))原创 2016-05-26 12:28:15 · 201 阅读 · 0 评论 -
对象在使用之前的初始化
C++规定对象的初始化动作发生在进入构造函数主体之前。(初始化列表比在构造函数体内初始化的效率高,以为在函数体内初始化会调用默认的构造函数)编译单元是指产出单一目标文件的那些源码。问题: 两个源码文件,每个文件中至少有一个non-local static对象(即该对象是全局的或者位于namespace作用域内,或在class内或file的作用域内被声明为static)。如果某编译单元内的non原创 2016-05-26 12:28:18 · 346 阅读 · 0 评论 -
位图&布隆过滤器
位图定义: 利用位的状态来存放一个数是否存在,其实就是把一个数映射成一个简单的数用以标记他是否存在,一般使用情况为查找一个数是否存在。数据结构: 650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/80/18/wKiom1c3GqaCHYOxAAA-9jt9bMM918.png" title="捕获.PNG" alt="wKiom原创 2016-05-26 12:28:21 · 442 阅读 · 0 评论 -
c++晚捆绑的实现机制
早绑定(early binding)是指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。 晚绑定(late binding)指的是编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。 早绑定的优点是: (1) 编译效率 高 (2) 有代码提示原创 2016-05-26 12:28:35 · 1724 阅读 · 0 评论 -
c++对象切片
什么事对象切片: c++在将一个派生类转换为基类的过程中,派生类的一部分将被基类接收不到,只能留下基类大小的对象。传值调用的切片:#includeusing namespace std;class Base{public:virtual void func1(){cout << "Base::func1" << endl;}virtual void func2(){cout原创 2016-05-26 12:28:38 · 3864 阅读 · 0 评论 -
求二叉树的镜像
#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;#include<queue>template<class T>struct BinaryTreeNode{ BinaryTreeNode* _left; BinaryTreeNode* _right; T _data;原创 2016-07-21 23:06:16 · 294 阅读 · 0 评论