![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 79
fantasy_linux
这个作者很懒,什么都没留下…
展开
-
字符串的简单操作
对于字符串的处理,系统已经提供了很多的库函数可供我们使用,比如strlen(计算字符串的长度),strcpy(字符串的拷贝)、strcat(字符串的链接)、strcmp(字符串的比较)、strstr(字符串的查找)等等 很大程度上方便了我们的编程。。。 下面列出一些例子来说明字符串的处理: (1)例如:在一个字符串中“hello world i am coming”,把其中的空原创 2016-01-21 20:25:22 · 386 阅读 · 0 评论 -
#每日一题#腾讯研发工程师笔试题
我们先来看问题描述:春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体的算法思路和代码实现。要求算法尽可能高效。 给定一个红包的金额数组gifts及它的大小,请返回所求红包的金额。 测试样例: [1,2,3,2,2] 5 输出 2原创 2016-03-30 13:44:26 · 426 阅读 · 0 评论 -
#每日一题#网易2016实习研发工程师笔试题
问题描述:有一个整数数组,请你根据快速排序的思路,找出数组中第k大的数。 给定一个整数数组a,同时给定它的大小n和要找的k(k在1到n之间),请返回第k大的数,保证答案存在。 测试样例: 【1,3,5,2,2】,5,3 返回:2 根据题目的要求:我们利用快速排序的思路,递归时要对于k与i的值进行对比。原创 2016-03-31 09:56:33 · 643 阅读 · 0 评论 -
redis之整数集合的实现源码分析
整数集合(intset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,redis就会使用整数集合作为集合键的底层实现。整数集合(intset)是redis用于保存整数值的集合抽象数据结构,它可以保存类型为int16_t、int32_t、int64_t的整数值,并且保证集合中不会出现重复元素。 我们首先来看redis对于intset.h的实现: in原创 2016-03-22 19:51:51 · 544 阅读 · 0 评论 -
各种排序的排序思想和实现
今天主要和大家讨论九大排序算法,包括冒泡排序、插入排序、选择排序、shell排序、归并排序、快速排序、计数排序、基数排序、堆排序。通过和大家的讨论,相信对大家的在今后的学习和面试肯定会有很大的帮助。下面分别来说明各种排序的排序的思想和其实现。 (1)冒泡排序: 排序思想:设数组a[0..n-1],令i = 0; j从原创 2016-02-27 20:00:27 · 858 阅读 · 0 评论 -
数据结构之二叉树
今天和大家讨论的是二叉树,在讨论二叉树之前,我们在之前也接触了一维的线性存储结构,比如数组,双端链表,以及对双端的链表的封装形成栈和队列,之后又将数组和双端链表的结合形成hash表,在存储和查找方面解决了很多问题,但是一维线性存储结构仍然存在问题,比如一维的线性数据结构在查找时的效率只能达到o(n)的时间复杂度,所以为了解决上述问题,我们引入树型数据结构。 最常见的树型结构为二原创 2016-02-28 22:20:03 · 451 阅读 · 0 评论 -
算法导论之哈夫曼编码
今天和大家一起讨论Haffman编码,哈夫曼编码是基于哈夫曼树,也可以被称为最有二叉树,哈夫曼编码可以有效的压缩数据,通常可以节省20%~90%,具体的压缩率依赖于数据的特性。首先给大家介绍一下什么是最优二叉树;在介绍什么是最有二叉树之前,先说明两个概念 , i>叶子节点的路径长度:从根到叶子节点的边的个数; ii>叶子节点的带权路径长度(WPL):叶子节点的权值 * 路径原创 2016-02-29 18:07:00 · 971 阅读 · 0 评论 -
redis基本数据结构之压缩列表
压缩列表(ziplist)时列表键和哈希键的底层实现之一。压缩列表时redis为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型(sequential)数据结构。一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或者一个整数值。 接下来给大家展示以下压缩列表的具体结构:在表中列出了空的压缩列表和非空的压缩列表的具体是如何存储的。原创 2016-03-24 19:03:51 · 548 阅读 · 0 评论 -
网络编程之僵尸进程
在讨论之前先给出一段代码,其中存在一个很大的隐患,就是僵尸进程!!!!可用top命令进行查看,如下图所示: 由上图可看出,存在1个zombie(僵尸进程)!!! 下面就给出具体的实现: config.h:#include #include #include #include #include #include #include #in原创 2016-03-14 19:03:51 · 689 阅读 · 0 评论 -
#每日一题#腾讯笔试题
在一组数的编码中,若任意两个相邻的代码只有一个二进制数不同,则称这种编码为格雷码(Gary Code),请编写一个函数,使用递归的方法生成N位的格雷码。给定一个整数n,请返回n位的格雷码,顺序为从0开始。 测试样例: 输入:1 返回:“0”,“1”。 首先给出二进制--->格雷码的转换: 此方法从对应的n位二进制字中直接得到n位格雷码字,步骤如原创 2016-03-29 10:35:09 · 707 阅读 · 0 评论 -
redis列表键的底层实现之链表
最近在啃redis的源码,看到列表键的底层实现之一就是链表。当一个链表键包含了数据比较多的元素,又或者列表中包含的元素都是比较长的字符串,redis就会使用链表作为列表键的底层实现。除了链表键之外,发布与订阅、慢查询、监视器等功能也用到了链表,redis服务器本身也使用了链表来保存多个客户端的状态信息,以及使用链表来构建客户端输出缓冲区,在后续都会和大家解析源码,接下来就给大家解析一下redis源原创 2016-03-17 21:12:27 · 581 阅读 · 0 评论 -
数据结构之通用双端链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。本章中的双端链表为通用双端链表,其数据域类型为void *,可以接收任意类型的指针,达到通用的效果。首先我们来看dlist.h文件中结构体的声明和接口的声明://链表节点类型ty原创 2016-02-14 09:37:27 · 446 阅读 · 0 评论 -
数据结构之哈希表的实现
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(原创 2016-02-14 17:38:15 · 469 阅读 · 0 评论 -
数据结构之二叉搜索树
一颗二叉搜索树是以一颗二叉树组织的,这样一颗可以使用一个链表数据结构来表示,其中每个节点都是一个对象,除了key之外,每个节点还包含属性left、right和p,它们分别指向节点的左孩子、右孩子和双亲。如果某个孩子结点和父节点不存在,则相应属性的值为NULL,根节点是树中唯一一个父指针为NULL的节点。 6原创 2016-02-29 19:36:16 · 339 阅读 · 0 评论 -
数据结构之动态数组实现
动态数组,是相对于静态数组而言。静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。动态数组的内存空间是从堆(heap)上分配(即动态分配)的。是通过执行代码而为其分配存储空间。当程序执行到这些语句时,才为其分配。程序员自己负责释放内存。 为什么要使用动态数组?在实际的编程中,往往会发生这种情况,即所需的内原创 2016-02-15 12:52:27 · 639 阅读 · 0 评论 -
算法导论之堆排序
(二叉)堆,是一个数组,可以被看成一个近似的完全二叉树,树上的每一个节点对应于数组中的一个元素。除了最底层之外,该树是完全充满的原创 2016-02-16 11:14:57 · 583 阅读 · 0 评论 -
算法导论之堆的应用---优先队列
今天为大家介绍的是堆的另一种应用,优先队列,之前也为大家介绍过堆排序,今天则主要介绍优先队列,优先队列和堆一样也有两种形式:最大优先队列和最小优先队列,这里,我们关注于如何基于最大堆实现最大优先队列。优先队列(priority queue)是一种用来维护由一组元素构成的集合S的数据结构,其中的每一个元素都有一个相关的值,称为关键字(key),一个最大优先队列支持以下操作: heap_m原创 2016-02-17 11:20:27 · 382 阅读 · 0 评论 -
算法导论值快速排序
今天和大家一起讨论快速排序,对于包含n个数的输入数组来说,快速排序是一种最坏情况时间复杂度为o(n * n)的排序算法。虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能非常好;它的期望时间复杂度为o(n lgn),而且o(n lgn)中隐含的常数因子非常小。另外,它还能进行原址排序,甚至在虚存环境中也能很好的工作。 快速排序的描述:原创 2016-02-17 15:40:09 · 295 阅读 · 0 评论 -
算法导论之红黑树
红黑树是一颗二叉搜索树,它在每个节点增加了一个存储位来表示节点的颜色,可以是RED或BLACK。通过对任何一条从根到叶子的简单路径上各个节点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因而是近似平衡的。 树中每个节点包含5个属性:color、key、left、right和p。如果一个节点没有子节点或父节点,则该节点相应指针属性的值为NULL。我们可以把这些NULL视原创 2016-03-02 15:13:24 · 444 阅读 · 0 评论 -
面试题之实现3^100次方和大整数的相乘
今天则主要和大家来说一下如何利用数组来存储大数据,我们先来看第一个小的算法,实现3^100次方: 具体代码如下: #include #include #include #define N 500int main(int argc,char **argv){ int s,j,i,cp,x,n,b; int a[N]; a[N - 1] = 1;原创 2016-03-28 18:05:50 · 1122 阅读 · 0 评论