- 博客(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
原创 将一个字符串中的所有空格替换为%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关注的人