自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Moons_is_me的博客

Read The Fucking Source Code

  • 博客(17)
  • 收藏
  • 关注

原创 汉诺塔问题--递归实现

问题描述: 有一个梵塔,塔内有三个座A,B,C,A座上有若干个盘子,盘子大小不等,大的在下面,小的在上面。目标:将A座上的盘子移动到C座上。移动过程中可以借助B座,但每次只允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。问题分析:当要移动n 个盘子时,先移动A上的n-1个盘子到B上,再移动第n个盘子到C上;当要移动n -1个盘子时,先移动A上的

2016-09-27 17:44:53 469

原创 一个指针释放后不置空的危害

今天面试碰到这个问题了,可以说这个问题是我回答最冤枉的。我觉得我对这个问题,有很清晰的认识。但是不知道为什么,嘴秃喽了一句内存泄漏,真想打自己一个大嘴巴。内存泄漏的情况的产生是:例如:用int* p=(int*)malloc(sizeof(int));让p重新指向其它,这样用malloc()开辟的空间就找不到了,造成内存泄漏。一个指针释放后不置空的后果:free(p);后p是一个非

2016-09-24 23:47:21 7886 1

原创 面试中遇到的问题:一个指针重复释放会出现什么情况

一个指针重复释放会出现什么情况?我当时的回答是:1.空指针可以重复释放2.非空指针(可能大概)会报错。由于好几天没有写代码,对指针有些生疏了,所以对非空指针的情况不太确定 。所以刚才编写了一个小代码进行了测试:#include int main(){ int *p = (int*)malloc(sizeof(int)* 5); free(p); //p = NULL;

2016-09-24 23:19:35 3364 1

原创 实现函数 double Power(double base,int exponent),求base的exponent次方,不得使用库函数,不用考虑大数问题

//实现函数 double Power(double base,int exponent),求base的exponent次方,不得使用库函数,不用考虑大数问题//base:1. 0; 2. 非0//exponent: 1. 0 2. 负数 3. 正数//0的0次方没有意义//0的负数次方没有意义#include using namespace std;bool g_Invali

2016-09-18 14:19:52 1338

原创 求一个数的二进制中有多少个1的最优解法

#include int NumberOf1(int n){ int count = 0; while (n) { count++; n = n&(n - 1); } return count;}这样的解法不会产生负数陷入死循环的问题,并且循环次数少,有几个1就循环几次。采用这种解法的原因:例:n = 11000100       n-1 = 11000

2016-09-18 10:39:19 518

原创 在一个由升序序列旋转之后的序列中查找最小元素

#include #include using namespace std;int FindMin(int* arr, int length)//(当)关键是找到两个序列的交接处,一个升序序列经过旋转后,两个部分序列仍为升序序列,{ //所以从第一个序列向后找比它大的,从第二个序列向前找比它小的 assert(arr);

2016-09-11 20:52:32 480

原创 求一个数的二进制中有多少个1的两种解法

#include int NumberOf1(int n){ unsigned int flag = 1; int count = 0; while (flag) { if (n & flag) count++; flag = flag << 1; } return count;}int NumberOf1(int n){ int count = 0;

2016-09-06 20:00:54 579

原创 用两个栈实现一个队列以及用两个队列实现一个栈

#include #include #include using namespace std;template //用两个栈实现一个队列class CQueue{public: CQueue(); ~CQueue(); void appendTail(const T& node); T deleteHead();private: stack s1; stack

2016-09-05 22:26:29 296

原创 二叉树的重建

给定二叉树的前序遍历和中序遍历,重建二叉树,并打印后序遍历的序列#include using namespace std;struct BinaryTreeNode{ int _value; BinaryTreeNode* _pleft; BinaryTreeNode* _pright;};BinaryTreeNode* ConstructCore(int* startPreor

2016-09-04 21:30:53 274

原创 通过斐波那契数列分析实现函数时采用递归和循环的利弊

斐波那契数列的递归实现int f(int n){ if (n > 0) { //int a = 1, b = 1, c; if (1 == n) return 1; if (2 == n) return 1; return f(n - 1) + f(n - 2); } return -1;}斐波那契数列的循环实现int f(int n)

2016-09-03 22:09:57 691

原创 关于单链表的尾插,删除,反向打印单链表

#include using namespace std;#include struct ListNode{ int _value; ListNode* _next;};void AddToTail(ListNode** pHead, int value){ ListNode* pNew = new ListNode(); pNew->_value = value;

2016-09-03 21:57:51 567

转载 Linux 信号量使用

semget 函数为获取信号量函数使用格式:int  semget(key_t  _key ,int  _nsems,int _semflg);功能:创建一个新的信号量或获取一个已经存在的信号量的键值。返回值:成功返回信号量的标识码ID。失败返回-1;参数:_key  为整型值,用户可以自己设定。有两种情况:1.       键值是IPC_P

2016-09-02 22:29:27 325

原创 Linux消息队列的使用:实现server和client相互发送消息

comm.hcomm.cserver.cclient.c

2016-09-02 21:02:17 2443

原创 将一个字符串中的所有空格替换为%20的源代码及测试用例

#include #include void ReplaceBlank(char string[],int capacity)//capacity为数组str的总容量{ if (string == NULL || capacity <= 0) return; int length = 0; int blank_count = 0; int i = 0; while (stri

2016-09-02 20:12:20 532

原创 一个10分的C库中的strcpy()函数及其剖析

#include #include using namespace std;char* Mystrcpy(char* dest, const char* src)//src加const保护{ assert((dest != NULL) && (src != NULL));//assert断言,保证dest,src不为空 char* address = dest;

2016-09-02 14:23:36 426

原创 C库中的memmove()函数的实现

#include #include #include using namespace std;void* mymemmove(void* dest, const void* src, const size_t count){ if (0 == count) { return NULL; } if (NULL == dest || NULL == src) { retu

2016-09-01 22:35:36 419

原创 C库中的strstr()函数实现

#include #include char* my_strstr(const char* str1, const char* str2)//在str1中找str2{ assert(str1); assert(str2); if (strlen(str1) < strlen(str2)) { return NULL; } char* s1 = (char*)str1;

2016-09-01 22:26:06 491

空空如也

空空如也

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

TA关注的人

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