My Github
上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 28 下一页
摘要: 题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。在网络编程中,如果URL参数中含有特殊字符,如空格、'#'等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在'%'后面跟上ASCII码的两位十六进制的表示。 阅读全文
posted @ 2015-08-18 00:56 EdisonZhou 阅读(6082) 评论(5) 推荐(6) 编辑
摘要: 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。 阅读全文
posted @ 2015-08-17 23:05 EdisonZhou 阅读(11457) 评论(1) 推荐(8) 编辑
摘要: 题目:设计一个类,我们只能生成该类的一个实例。只能生成一个实例的类是实现了Singleton(单例)模式的类型。由于设计模式在面向对象程序设计中起着举足轻重的作用,在面试过程中很多公司都喜欢问一些与设计模式相关的问题。在常用的模式中,Singleton是唯一一个能够用短短几十行代码完整实现的模式。因此,写一个Singleton的类型是一个很常见的面试题。 阅读全文
posted @ 2015-08-17 01:22 EdisonZhou 阅读(4295) 评论(2) 推荐(8) 编辑
摘要: 排序(Sorting)是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为按关键字“有序”的记录序列。如何进行排序,特别是高效率地进行排序时计算机工作者学习和研究的重要课题之一。排序有内部排序和外部排序之分,若整个排序过程不需要访问外存便能完成,则称此类排序为内部排序,反之则为外部排序。本篇主要介绍插入排序、交换排序、选择排序和归并排序这几种内部排序方法。 阅读全文
posted @ 2015-08-12 01:16 EdisonZhou 阅读(2701) 评论(3) 推荐(7) 编辑
摘要: 哈希(散列)技术既是一种存储方法,也是一种查找方法。然而它与线性表、树、图等结构不同的是,前面几种结构,数据元素之间都存在某种逻辑关系,可以用连线图示表示出来,而哈希技术的记录之间不存在什么逻辑关系,它只与关键字有关联。因此,哈希主要是面向查找的存储结构。哈希技术最适合的求解问题是查找与给定值相等的记录。 阅读全文
posted @ 2015-08-08 17:03 EdisonZhou 阅读(4406) 评论(1) 推荐(8) 编辑
摘要: 只要你打开电脑,就会涉及到查找技术。如炒股软件中查股票信息、硬盘文件中找照片、在光盘中搜DVD,甚至玩游戏时在内存中查找攻击力、魅力值等数据修改用来作弊等,都要涉及到查找。当然,在互联网上查找信息就更加是家常便饭。查找是计算机应用中最常用的操作之一,也是许多程序中最耗时的一部分,查找方法的优劣对于系统的运行效率影响极大。因此,本篇讨论一些查找方法。 阅读全文
posted @ 2015-08-05 00:53 EdisonZhou 阅读(3345) 评论(2) 推荐(5) 编辑
摘要: 图的最重要的应用之一就是在交通运输和通信网络中寻找最短路径。例如在交通网络中经常会遇到这样的问题:两地之间是否有公路可通;在有多条公路可通的情况下,哪一条路径是最短的等等。这就是带权图中求最短路径的问题,此时路径的长度不再是路径上边的数目总和,而是路径上的边所带权值的和。 阅读全文
posted @ 2015-08-02 11:58 EdisonZhou 阅读(4110) 评论(2) 推荐(2) 编辑
摘要: 图的“多对多”特性使得图在结构设计和算法实现上较为困难,这时就需要根据具体应用将图转换为不同的树来简化问题的求解。对于一个无向图,含有连通图全部顶点的一个极小连通子图成为生成树(Spanning Tree)。其本质就是从连通图任一顶点出发进行遍历操作所经过的边,再加上所有顶点构成的子图。如果连通图是一个带权的网络,称该网络的所有生成树中权值综合最小的生成树为最小生成树(Minimum Spanning Tree,MST),简称MST生成树。 阅读全文
posted @ 2015-07-29 01:05 EdisonZhou 阅读(7831) 评论(4) 推荐(5) 编辑
摘要: 上一篇我们了解了图的基本概念、术语以及存储结构,还对邻接表结构进行了模拟实现。本篇我们来了解一下图的遍历,和树的遍历类似,从图的某一顶点出发访问图中其余顶点,并且使每一个顶点仅被访问一次,这一过程就叫做图的遍历(Traversing Graph)。如果只访问图的顶点而不关注边的信息,那么图的遍历十分简单,使用一个foreach语句遍历存放顶点信息的数组即可。但是,如果为了实现特定算法,就必须要根据边的信息按照一定的顺序进行遍历。图的遍历算法是求解图的连通性问题、拓扑排序和求解关键路径等算法的基础。 阅读全文
posted @ 2015-07-27 00:50 EdisonZhou 阅读(4624) 评论(2) 推荐(4) 编辑
摘要: 前面几篇已经介绍了线性表和树两类数据结构,线性表中的元素是“一对一”的关系,树中的元素是“一对多”的关系,本章所述的图结构中的元素则是“多对多”的关系。图(Graph)是一种复杂的非线性结构,在图结构中,每个元素都可以有零个或多个前驱,也可以有零个或多个后继,也就是说,元素之间的关系是任意的。现实生活中的很多事物都可以抽象为图,例如世界各地接入Internet的计算机通过网线连接在一起,各个城市和城市之间的铁轨等等。 阅读全文
posted @ 2015-07-25 14:52 EdisonZhou 阅读(5096) 评论(0) 推荐(14) 编辑
摘要: 一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈。2、堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表。 阅读全文
posted @ 2015-07-23 01:07 EdisonZhou 阅读(19298) 评论(3) 推荐(14) 编辑
摘要: void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据。和用int表示指针异曲同工,只是更明确是“指针”。因此void*只能表示一个地址,不能用来&取值,也不能++--移动指针,因此不知道多少字节是一个数据单位。从输出结果可以看出,无论是无类型的void指针还是int类型指针,指向的地址都是一样的: 阅读全文
posted @ 2015-07-22 01:30 EdisonZhou 阅读(6692) 评论(1) 推荐(8) 编辑
摘要: 当我们创建一个内存区域的时候,内存中的数据可能是乱七八糟的(可能是其他代码用过后遗留的数据),如下面一段代码.其运行结果是如下图所示的乱码,因为printf的%s是“打印一直遇到'\0'”。那么,如何解决上面我们有可能会访问的脏内存区域呢?在C语言中,可以采用如下的两种方法:(1)使用memset函数首先清理一下内存;(2)使用初始化填充0; 阅读全文
posted @ 2015-07-21 00:57 EdisonZhou 阅读(4951) 评论(2) 推荐(5) 编辑
摘要: 前面几篇基础介绍之后,本篇我们来做几个指针的小案例。首先,实现一个方法“多个返回值”的效果:返回一个三位数数字的个位、十位、百位。这里,我们借助指针来”返回“分解后的结果。这种应用也是最常见的指针应用。其次,我们知道strlen是计算字符串的长度,其内部是通过判断是否以'\0'作为结束符,虽然其不是一个安全的方式,但是却是各大C教材中最常见的函数。这里,我们来自己实现一个strlen函数,利用指针的移动来辅助计算长度,这也是指针的一个最常见的应用。最后,实现判断一个字符串是否以另一个子子字符串结尾。 阅读全文
posted @ 2015-07-20 00:48 EdisonZhou 阅读(2615) 评论(0) 推荐(0) 编辑
摘要: 如果在作用域内,变量以数组形式声明,则可以使用sizeof求数组大小,下面一段代码展示了如何使用sizeof。其中sizeof(nums)代表计算nums数组的总字节数,而sizeof(int)则代表计算int类型所占用的字节数(32位系统下是4个字节,64位下可能不同,因此这里使用sizeof(int)可以向程序员屏蔽这个差异),运行结果为: 阅读全文
posted @ 2015-07-19 16:17 EdisonZhou 阅读(4708) 评论(1) 推荐(0) 编辑
摘要: 指针每次加一就是指针向前移动指针类型对应的字节数。下面通过一个int指针来指向一个int数组,看看指针的加法运算到底是个什么鬼?可以看到,指针的加法就是向前移动指定类型字节数,在数组中就是指向下一个元素。下面再来看看与加法相反的减法,仍然以上面的代码为例,新增一句:ptr--; 阅读全文
posted @ 2015-07-19 02:11 EdisonZhou 阅读(7656) 评论(2) 推荐(2) 编辑
摘要: At first,计算机中绝大部分数据都放到内存中的,不同的数据放到不同的内存区域中。But,内存角度没有数据类型,只有二进制;数据以字节(8位二进制)为单位存取。不同数据类型占据不同的字节,例如在32位系统中:int 为4个字节,short为2个字节(下面如未特殊声明,均为32为系统环境下的说明)。下面我们看看int类型、short类型和double类型的数字分别在内存中如何存储: 阅读全文
posted @ 2015-07-18 14:56 EdisonZhou 阅读(2219) 评论(0) 推荐(2) 编辑
摘要: GCC(GNU Compiler Collection)是一套功能强大、性能优越的编程语言编译器,它是GNU计划的代表作品之一。GCC是Linux平台下最常用的编译器,GCC原名为GNU C Compiler,即GNU C语言编译器,随着GCC支持的语言越来越多,它的名称也逐渐变成了GNU Compiler Collection。下面对GCC的基本使用方法进行介绍。这里我们主要使用Windows系统进行C程序的开发调试,所以我们选择GCC for Windows版本的编译器。 阅读全文
posted @ 2015-07-18 13:21 EdisonZhou 阅读(2750) 评论(1) 推荐(2) 编辑
摘要: 上面两篇我们了解了树的基本概念以及二叉树的遍历算法,还对二叉查找树进行了模拟实现。数学表达式求值是程序设计语言编译中的一个基本问题,表达式求值是栈应用的一个典型案例,表达式分为前缀、中缀和后缀三种形式。这里,我们通过一个四则运算的应用场景,借助二叉树来帮助求解表达式的值。首先,将表达式转换为二叉树,然后通过先序遍历二叉树的方式求出表达式的值。 阅读全文
posted @ 2015-07-17 00:38 EdisonZhou 阅读(3686) 评论(1) 推荐(7) 编辑
摘要: 在上一篇中,我们了解了树的基本概念以及二叉树的基本特点和代码实现,还用递归的方式对二叉树的三种遍历算法进行了代码实现。但是,由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住。因此,我们使用非递归(这里主要是循环,循环方法比递归方法快, 因为循环避免了一系列函数调用和返回中所涉及到的参数传递和返回值的额外开销)来重新实现一遍各种遍历算法,再对二叉树的另外一种特殊的遍历—层次遍历进行实现,最后再了解一下特殊的二叉树—二叉查找树。 阅读全文
posted @ 2015-07-14 01:55 EdisonZhou 阅读(3159) 评论(2) 推荐(11) 编辑
上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 28 下一页