
c/c++
文章平均质量分 77
LLZK_
这个作者很懒,什么都没留下…
展开
-
关于函数指针和指针函数的分析
本文内容主要是针对函数指针,指针函数,函数指针数组。请读者选择查阅。原创 2016-04-27 19:28:26 · 652 阅读 · 0 评论 -
冒泡排序算法及其优化
冒泡排序算是排序算法里面的一种较为简单的算法,也是我接触的第一种排序算法,有升序与降序之分,如果面试的时候面试官问道这个题目,一定要问清楚是升序还是降序,这样会给你加分。下面,我以升序来讲一下它的运作。1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。原创 2016-05-31 18:02:40 · 8577 阅读 · 3 评论 -
插入排序算法详解及实现
插入排序相对冒泡排序而言是一种较为快捷方便的排序算法。冒泡排序:http://blog.youkuaiyun.com/llzk_/article/details/51547923插入排序原理很简单,讲一组数据分成两组,我分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增加,待插原创 2016-06-10 20:30:37 · 75813 阅读 · 21 评论 -
C语言选择排序详解及其实现
选择排序(Selection sort)是一种简单直观的排序算法。这次我们依然将其分为有序组与无序组。(我将冒泡排序的链接放到这里,有兴趣的可以看看,冒泡排序:http://blog.youkuaiyun.com/llzk_/article/details/51547923)它的工作原理是每一次从无序组的数据元素中选出最小(或最大)的一个元素,存放在无序组的起始位置,无序组元素减少,有序组元素增加,直原创 2016-06-10 21:48:51 · 66276 阅读 · 4 评论 -
非比较排序-----计数排序,基数排序。
排序总归来说可分为两大类,比较排序与非比较排序。比较排序就是我们常用到的冒泡排序,插入排序,希尔排序,选择排序,堆排序,快速排序,归并排序。非比较排序不常用,但是在对一些特殊的情况进行处理时,它的速度反而更快。1、计数排序 排序原理:利用哈希的方法,将每个数据出现的次数都统计下来。哈希表是顺序的,所以我们统计完后直接遍历哈希表,将数据再重写回原数据空间就可以完成排序。注意事项原创 2016-11-26 21:35:04 · 3333 阅读 · 1 评论 -
weak_ptr的作用及应用场景——shared_ptr的循环引用问题
weak_ptr 是为了辅助shared_ptr而引入的一种智能指针,它存在的意义就是协助shared_ptr更好的完成工作,我们可以把它比做成一个秘书或助理。weak_ptr的构造和析构并不会改变引用计数的大小,它可以由一个shared_ptr或weak_ptr的对象构造获得。它没有对“*”和“->”的重载,但可以使用lock获得一个可用的shared_ptr对象。当面试官问到weak_原创 2016-09-04 11:33:51 · 5425 阅读 · 3 评论 -
【c++/数据结构】哈希表
哈希表哈希表(HashTable)又叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 哈希表的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字。把这个整型数字作为元素的下标存入数组(散列表),我们常用的算法有以下几原创 2016-11-06 14:19:23 · 2532 阅读 · 0 评论 -
【c++/数据结构】红黑树-RBTree
什么叫红黑树?同AVL树一样,红黑树也是近似平衡的二叉搜索树,与AVL树不同的是红黑树没有了平衡因子,但增加了一个枚举变量,来标明结点的颜(RED or BLACK)。因为红黑树可以保证它的最长路劲不超过它最短路径的两倍,所以它近似平衡。红黑树具有以下几点性质: 1. 每个结点都必须具有一种颜色(RED or BLACK)。 2. 根结点为黑色。 3. 如果一个结点为红色,那么它的两个孩原创 2016-10-30 16:38:40 · 1332 阅读 · 0 评论 -
实现斐波那契数列的三种方法
斐波那契数列又称黄金分割数列。它的特点是从第3个数开始,每一个数都等于前面两个数相加。例:0 1 1 2 3 5 8 13 21.。。。。。从上我们可以总结出以下规律: 当n = 0时; F(n) = 0;当n = 1时; F(n) = 1;当n > 1时; F(n) = F(n-1)+F(n-2);原创 2016-09-06 16:53:52 · 7724 阅读 · 0 评论 -
【STL】从源码看map
map与set相同,map同样是以红黑树RB_Tree为底层机制的关联式容器。map的每一个元素都拥有两个值,一个键值(key)和一个实值(value)。它的内部实现是用一个pair来保存这个两个值。所以,map的每一个元素又是一个pair。下面是STL源码中stl_pair.h对pair的定义。template struct pair { typedef T1 first_type原创 2016-11-15 21:04:27 · 4805 阅读 · 0 评论 -
【c++】构建一棵简单的二叉树
本文主要讲了如何使用c++来构建一个二叉树类,以及一些功能算法的实现。文中大部分函数的思想都是递归,其中赋值运算符重载有传统写法和现代写法两个版本,层序遍历是非递归,前、中、后序遍历有递归和非递归两个版本。1、构造函数(递归)2、拷贝构造函数(递归)3、析构函数(递归)4、赋值运算符重载(传统/现代)5、前中后序遍历(递归/非递归)6、层序遍历(非递归)7、查找第k层结原创 2016-10-16 15:58:21 · 25920 阅读 · 6 评论 -
【c++】二叉树的线索化
什么是二叉树的线索化?或者问什么是线索二叉树?按照某种遍历方式对二叉树进行遍历,可以把二叉树中所有结点排序为一个线性序列。在改序列中,除第一个结点外每个结点有且仅有一个直接前驱结点;除最后一个结点外每一个结点有且仅有一个直接后继结点。这些指向直接前驱结点和指向直接后续结点的指针被称为线索(Thread),加了线索的二叉树称为线索二叉树。以上是搜狗百科的一段文字,反正我是没看太懂。简单点原创 2016-10-18 16:36:20 · 4209 阅读 · 0 评论 -
【c++】数据结构———堆
堆是一种特殊的数据结构,它通常是一个可以被看做一棵树的数组对象。What?那它到底是一棵树,还是一个数组呢?答案是数组。这个数组以二叉树的形式来维护。注意:这个二叉树必须是完全二叉树堆结构的二叉树存储有两种: 最大堆:每个父亲结点的值都大于孩子结点。 最小堆:每个父亲结点的值都小于孩子结点。顾名思义,这种结构就是可以根节点为最大的/最小的结点。原创 2016-10-20 09:57:41 · 4807 阅读 · 1 评论 -
【c++】AVL树详解
AVL树是又叫平衡二叉搜索树,但是它不是完全平衡,只是近似平衡(高度平衡)。什么叫完全平衡?想象一下完全二叉树。根据名字’二叉搜索树‘,我们可以知道它的一些性质:1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)原创 2016-10-30 10:50:21 · 2325 阅读 · 3 评论 -
C++函数重载
什么是函数重载?函数重载即为允许在同一作用域内,一组函数可以拥有相同函数名,不同的参数(参数个数,大小),这组函数就叫做重载函数。注意:重载函数必须在同一作用域内,不在则不算。两个重载函数:1、函数名相同;2、参数列表不同,从参数类型和个数上体现;3、返回值可同可不同;重载函数的作用?1、重载函数通常被用来命名一组功能相同的函数,从而实现用同原创 2016-06-26 20:02:20 · 2068 阅读 · 0 评论 -
c语言模拟实现memmove
为什么写这篇博客,因为我很多次都被它考住了!!!!!!!!!!首先 memmove 是一个内存操作函数,不是字符串操作函数,它可以处理多种类型的数据。它的原型是:void *memmove(void*dest, const void* src, size_t count );这里有两个点需要记住,1、它的返回值是void*,参数类型也是void*,这样它才可以处原创 2016-06-02 23:48:32 · 2467 阅读 · 1 评论 -
小项目:简单注释转换(C风格转到C++风格)
C的注释是以字符 /* 开始,以字符 */ 结束,注释被包含的内容。C++的注释是以字符 // 开始,碰到换行符 \n 时结束,注释一行。所以,从C注释转到C++,就是在碰到 /* 时将换成 // ,碰到 */ 时 将其删除。当然,这里会有许多种需要细心情况,我们下面再谈。完成这个项目,我们需要把代码划分4个状态,NULL(无状态),C状态,CPP状态,END状态。没有接触过这个项目的原创 2016-05-25 22:48:43 · 860 阅读 · 0 评论 -
【笔试题】N进制数向M进制数转换
考虑的就是大于10的数都用字母表示,0~9有10个数字,再加上A~Z有26个字母刚好可以表示36进制数。再考虑就是大数问题,int表示不了怎么办,考虑用字符串。1、采取模N除N的方式,将原数字转换为10进制数。2、采用除留余数法,将数字转化为M进制数。3、逆置字符串。#include#includeusing namespace std;string* fun(原创 2017-03-23 22:06:56 · 3963 阅读 · 4 评论