code---数据结构
文章平均质量分 66
zhou753099943
脚步一直不会停
展开
-
atoi函数
实现了一个简单的atoi函数,包括对正负的确认,整数大小,非法输入反反复复1 2 #include 3 #include 4 #in原创 2016-04-26 16:44:26 · 985 阅读 · 0 评论 -
快速排序
int partion(int *arr,int low,int heigh){ int key=arr[low]; while(low < heigh) { while(low =key) --heigh; arr[low]=arr[heigh]; while(low < heigh && arr[low] <= key) ++low; arr[heigh]=原创 2016-08-14 12:55:29 · 597 阅读 · 0 评论 -
编写一个memmove函数,实现内存拷贝
void* my_memmove(void *des,const void *src,int size){ char *Des=(char*)des; char *Src=(char*)src; assert(Des && Src); int len=strlen(Src); assert(size >0 && size <len); if(Des Src+len) { wh原创 2016-08-14 12:53:34 · 1097 阅读 · 0 评论 -
链表基本操作详解
注释:这段时间在参加校招,问了很多链表的问题,虽然都可以完全不错的写出来,但却花了不少时间,一怒之下我就把链表的基本所有操作都重新编写一遍备注:适合于才学链表和有一些链表操作的经验的同学看,代码全部都可以通过,可以放心使用头文件:list.h#include #include using namespace std;#include struct Node{ int val原创 2016-09-15 10:03:06 · 2131 阅读 · 0 评论 -
输入两个整数m和n,计算m需要改变多少位才能得到n
题目:输入两个整数m和n,计算m需要改变多少位才能得到n?解析: 这个题我最开始是没有思路的,想了很久才有点思路,思路的来源是把他们转化成二进制后才有的 例如:(5)的二进制:0101 (3)的二进制:0011 如果要把5变成3的话,需要改变:2次,因为第一位0和最后一位1都相同 所以不需要改变,做法,先将两个数原创 2016-06-22 21:36:55 · 3515 阅读 · 0 评论 -
旋转数组的最小值
题目:把一个数组最开的若干个元素搬到数组的末尾,我们称之为数组的旋转,输入一个递增排序的的数组的一个旋转,输出旋转数组的最小元素,例如:数组{3,4,5,1,2}旋转后为{1,2,3,4,5},该数组的最小值为:1解析: 这是最近在看剑指offer,然后就看到这道题了,然后上面的解法有两种:1、也是最容易想到的一种,将数组按升序排序一下,然后数组的第一个数就是最小值,原创 2016-06-22 21:03:55 · 1733 阅读 · 0 评论 -
只创建在堆上生成的变量详解
解析:今天在看Effective C++时,看到了抽象函数详解那块,于是很自然的就想到了以前看过的一道题:创建只在堆上生成的变量。这题换句话说:只能用指针创建变量,即Type *value=get_point();类似于这样的问题,有两种方法可以完成这个问题:1、第一种,也是最能先想到的一种,将构造函数放在private(私有)里,这样就无法在栈上定义变量了,这种很简单,基本学过class原创 2016-06-20 22:36:55 · 2727 阅读 · 0 评论 -
打印1到最大的n位数
解析://打印1到最大的n位数//最开始是看剑指offer实现的,但看着有点晕,于是自己经常调试后总结出来的//所以如果看不怎么懂的时候将代码写出来然后调试,调试后就知道它是怎么运行的//注释的部分是剑指offer上实现的,bool increment(char *str){ //bool is_over_flow=false; int tmp=0; //int nTake原创 2016-06-19 01:29:53 · 565 阅读 · 0 评论 -
连续子数组的最大和
1、分析://之前在剑指offer上看到这个问题,感觉它实现的代码让我有一些难理解,所以看了它上面的思路自己实现了一下,个人感觉比他写的代码好理解点,所以就分享哈,如果有不正确的,欢迎提出意见 2 #include 3 #include 4 using namespace std; 5 6 //连续子数组中最大和 7 //思想:从第一个第一个数开始往原创 2016-06-17 22:05:01 · 1812 阅读 · 1 评论 -
数组中出现次数超过一半的数
分析:6//找出在一个数组中出现次数超过一半的数,可以这样理解,找一个数的中位数 7 //基于这样思想最直观的做法是排序后找中间的数既可,但最好时间复杂度也得O(NlogN) 8 //所以用一种简单的办法来解决 9 //定义两个变量,从第一个数开始找,并记录第一个数为result为需要找的数,它出现的次数初始化为:times=1 10 //以后只要找到和result相原创 2016-06-17 21:16:06 · 3656 阅读 · 0 评论 -
打印1到最大的n位数
解析:打印1到最大的n位数,首先因为n的大小没有确定,所以就得分两种情况考虑,假如n在整数范围内,当n小于INT_MAX时,直接用处理整数的方式来计算,否则就得将n转化成字符串来处理,具体整数处理,请看代码//打印1到最大的n位数bool print_number(char *str,int n){ int top=0; //从个位开始算起 for(int i=n-1; i>=0;原创 2016-06-29 01:49:22 · 1899 阅读 · 0 评论 -
两个链表是否相交详解
//两个链表是否相交?//常规解法,但时间复杂度为O(N1*N2)bool intersct(node *des,node *src){ if(des==NULL || src==NULL) return false; node *cur_des=des; while(cur_des !=NULL) { node *cur_src=src; while(cur_src原创 2016-06-07 19:55:00 · 742 阅读 · 0 评论 -
非递归实现二叉搜索树转化成双链表
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \4 8 12 16 转换成双向链表4=6=8=10=12=14=16。分析:代码难理解的地方我都已经注释了,为什么要写非递归的实现,是因为我在看剑指offer的时候,上面是递归实原创 2016-06-24 15:32:48 · 1633 阅读 · 1 评论 -
红黑树详解
转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7740956一、红黑树概述 红黑树和我们以前学过的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。不过自从红黑树出来后,AVL树就被放到了博物馆里,据说是红黑树有更好的效率,更转载 2016-06-07 20:27:15 · 446 阅读 · 0 评论 -
链表面试题详解
struct node{ int value; struct node *next; node(int key=0):value(key){}};//无头的单链表void init(node *&head){ if(NULL==head) head=NULL;}//两种情况,head==NULL或者没有找到都返回NULL//否则返回找到的节点node* find(no原创 2016-06-07 19:07:27 · 519 阅读 · 0 评论 -
二分查找详解
int search(int *arr,int size,int key){ assert(arr !=NULL); assert(size>0); int high=size-1; int low=0; while(low <=high) { int mod=low+(high-low)/2; if(arr[mod]==key) return mod; if(ke原创 2016-06-07 19:02:20 · 538 阅读 · 0 评论 -
双链表插入 删除详解
节点结构:struct both_node{ int key; struct both_node *prev; struct both_node *next; both_node(int k) :key(k),prev(NULL),next(NULL) {}};不带头节点的双链表实现插入 删除,双链表//插入void insert_both(both_no原创 2016-06-07 18:09:49 · 4525 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是一颗二叉搜索树的后续遍历的结果,如果是返回true,否则返回false分析:由于二叉搜索树的特性,左子树一定小于根节点,右子树一定大于根节点,所以在一颗二叉搜索树中不会出现两个相同的节点bool IsBST(int arr[],int len){ assert(arr !=NULL); if(len < 0) return fals原创 2016-06-24 10:04:36 · 1354 阅读 · 1 评论 -
将字符串中的所有空格去掉,要求时间复杂度O(N)
//题目:将字符串中的所有空格去掉,要求时间复杂度O(N)//空间复杂度O(1)//感想:最开始我以为这个题目很简单,但面试的时候由于紧张,没有写得特别优化,所以被小米给刷了,贼伤心的//条件的控制很重要,我当时就是因为紧张,条件没有控制好,现在想想真是很尴尬,//面试出来后我都有一种想法我他妈就不适合当程序员#include using namespace std;#include原创 2016-09-30 17:21:05 · 2884 阅读 · 0 评论