Visual C++2012
文章平均质量分 83
尹成
尹成微信18510341407,助理微信18514203048
展开
-
漏洞大爆光:QQ漏洞、飞秋漏洞、360浏览器劫持…
随着互联网应用的快速发展,信息安全已深入到诸多领域,前段时间发生的“Struts 2”漏洞及“心脏出血”漏洞影响了二亿中国网民的信息安全,原因是程序员缺少仔细的安全检查导致的。作为程序员,此时我们应该更加关注程序的安全性才对,但现实情况是程序员关注的依然是程序功能的实现,仍然忽视了程序的安全性,以至于很多程序都存在安全漏洞。下面是传智播客C/C++学院仅仅学习了5个月C/C++语言的学生发现的原创 2014-06-05 00:07:34 · 6749 阅读 · 3 评论 -
基于Visual C++2013拆解世界五百强面试题--题2-输出和为一个给定整数的所有组合
请用C语言实现 输出和为一个给定整数的所有组合#include #include int main(void){ int num = 0; //获取输入的数字 int i = 0; //外层循环计数 int j = 0; //内层循环计数 printf("Please input a number:"); scanf("%原创 2013-10-08 20:33:04 · 3377 阅读 · 7 评论 -
基于Visual C++2013拆解世界五百强面试题--题15-递归相加
有一分数序列: 1/2 , 1/4 , 1/6 , 1/8 ......,用递归的方法,求此数列20项之和.可以看出规律:每一项位1/n*2这个很容易些递归,但是要注意一点,使用浮点数相除保存:下面上代码:#include double fun(int i){ //如果是第一项直接返回结果 if (i == 1) return 1.0 / (double)2; return fu原创 2013-10-25 16:51:13 · 2770 阅读 · 0 评论 -
基于Visual C++2013拆解世界五百强面试题--题9-找出所有的排列方式
给出一个函数来输出一个字符串的所有排列按照排列组合的知识我们知道N个字符排列组合个数有n!种,那么可知f(n) = n*f(n-1),如果{1,2}的组合有两种,12,21,那么{123}的组合可以简单的插入{12}组合的任意位置:312,132,123321,231,213可以看到3分别插入前面两种组合的前中后位置又可以得到新组合,那么我们可以利用这个特性,容易得到f(2) = 2,我们可以用递原创 2013-10-23 17:38:58 · 3086 阅读 · 0 评论 -
基于Visual C++2013拆解世界五百强面试题--题10-找出N个数种最大的K个数
有一亿个整数,请找出最大的 1000 个,要求时间越短越好, 空间占用越好越好。如果不考虑时间效率,很容易想到解决方法,我们只需存储前一千个数,然后依次读入后面的数和这一千个数组比较,替换其中比较小的数即可,但是这样时间复杂度比较高,如果用二叉堆实现,直接可以替换1000个数中最小的数字,而消耗的时间大多数话费在二叉堆插入中,二叉堆的插入复杂度为Olog(N),比较理想。由于题目中数目太大,代码实原创 2013-10-24 15:55:30 · 4447 阅读 · 0 评论 -
基于Visual C++2013拆解世界五百强面试题--题18-程序结果分析2-终结篇
第二部分程序结果分析,分析流程还是写入代码注释中分析下面程序的输出:#include int main(){ char *a = "hello"; char *b = "hello"; if (a == b) printf("YES"); else printf("NO"); //由于a、b指针指向的常量字符串相同,编译器为了节省空间, //将a、b指针变量都指向了hel原创 2013-10-27 15:53:01 · 2823 阅读 · 0 评论 -
基于Visual C++2013拆解世界五百强面试题--题1-定义各种类型指针
用变量给出下面的定义 a)一个整型数 b)一个指向整型数的指针 c)一个指向指针的指针,它指向的指针是指向一个整型数 d)一个有10个整型数的数组 e)一个有10个指针的数组,该指针是指向一个整型的数 f)一个指向有10个整型数数组的指针 g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数 h)一个有10个指针的数组,该指针指向一个函数,该原创 2013-10-08 19:06:24 · 3372 阅读 · 2 评论 -
VC++2012编程演练数据结构《13》单链表
单链表简介 用一组地址任意的存储单元存放线性表中的数据元素。 以元素(数据元素的映象) + 指针(指示后继元素存储位置) = 结点 (表示数据元素 或 数据元素的映象) 以“结点的序列”表示线性表 ?? 称作线性链表(单链表) 单链表是一种链式存取的结构,为找第 i 个数据元素,必须先找到第 i-1 个数据元素。 因此,查找第 i 个数据元素的基本操作为:移动指针,比较 j原创 2012-11-20 11:02:53 · 2842 阅读 · 0 评论 -
VC++2012编程演练数据结构《14》链式堆栈
链式存储结构特点: 在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的). 它不要求逻辑上相邻的元素在物理位置上也相邻.因此它没有顺序存储结构所具有的弱点,但也同时失去了顺序表可随机存取的优点.链式存储结构链式存储结构特点: 1、比顺序存储结构的存储密度小 (每个节点都由数据域和指针域组成,所以相同空间内假设全存满的话顺序比链式存储更多)。 2、原创 2012-11-20 11:28:51 · 2201 阅读 · 0 评论 -
VC++2012编程演练数据结构《15》双循环链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。打开IDE 我们来创建一个工程实践之类的声名如下#if !defined(AFX_DCIRLINKL_H__4D93E797_B8BC_4781_BD9A_0EF8A6458A75__INCLUDE原创 2012-11-20 12:04:44 · 2611 阅读 · 0 评论 -
VC++2012编程演练数据结构《16》广义表
广义表是一种非线性的数据结构,顾名思义,它也是线性表的一种推广。它被广泛的应用于人工智能等领域的表处理语言LISP语言中。在LISP语言中,广义表是一种最基本的数据结构,就连LISP 语言的程序也表示为一系列的广义表。线性表被定义为一个有限的序列(a1,a2,a3,…,an)其中ai被限定为是单个数据元素。广义表也是n个数据元素d1,d2,d3,…,dn的有限序列,但不同的是,广义表中的di 则既原创 2012-11-20 12:32:41 · 2813 阅读 · 0 评论 -
VC++2012编程演练数据结构《17》稀疏矩阵
如果在矩阵中,多数的元素为0,称此矩阵为稀疏矩阵(sparse matrix)。由于矩阵在程序中常使用二维阵列表示,二维阵列的大小 稀疏矩阵与使用的存储器空间成正比,如果多数的元素没有数据,则会造成存储器空间的浪费,为此,必须设计稀疏矩阵的阵列储存方式,利用较少的存储器空间储存完整的矩阵数据。 二维数组Amn中有N个非零元素,若N 由于稀疏矩阵中含有很多的0元素,在计算机中存储会浪费很多的空原创 2012-11-20 13:38:59 · 3138 阅读 · 0 评论 -
VC++2012编程演练数据结构《19》散列文件
散列文件是利用散列存储方式组织的文件,亦称为直接存取文件。它类似于散列表[1],即根据文件中关键字的特点,设计一个散列函数和处理冲突的方法,将记录散列到存储设备上。 与散列表不同的是,对于文件来说,磁盘上的文件记录通常是成组存放的,若干个记录组成一个存储单位,在散列文件中,这个存储单位叫做桶(Bucket)。假如一个桶能存放m个记录,则当桶中已有m个同义词的记录时,存放第m+1个同义词会发生"溢原创 2012-11-20 14:37:16 · 3725 阅读 · 0 评论 -
VC++2012编程演练数据结构《21》二叉排序树
二叉排序树(Binary Sort Tree)又称二叉查找树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; 步骤:若根结点的关键字值等于查找的关键字,成功。 否则,若小于根结点的关键字值,递归查左子树。 若大于根结点的关键原创 2012-11-20 15:02:48 · 3048 阅读 · 0 评论 -
基于Visual C++2013拆解世界五百强面试题--题17-程序结果分析1
分析程序结果,分析过程我们就写在程序注释里面。写出下列代码的输出内容#include int inc(int a){ return (++a);}int multi(int *a, int *b, int *c){ return (*c = *a * *b);}typedef int (FUNC1)(int in);typedef int (FUNC2)(int *,原创 2013-10-27 15:10:10 · 2610 阅读 · 0 评论 -
基于Visual C++2013拆解世界五百强面试题--题14-循环删除
有一个数组a[1000]存放0-1000,要求每隔二个数删除一个数,到末尾时循环到开头继续进行,求最后一个被删掉数的原始下标。看到题目可以用循环链表保存这些数,然后循环删除,大大减少了一些复杂的边界判断。下面上代码,看链表建立和删除的具体过程:#include #include typedef struct stLIST{ int index; stLIST *next;}LIST原创 2013-10-25 16:45:09 · 3789 阅读 · 2 评论 -
基于Visual C++2013拆解世界五百强面试题--题13-找最大公共子字符串
编程实现:找出两个字符串中最大公共子字符串,如"abccade"和"dgcadde"的最大子字符串为"cad"。如果不考虑效率的话直接比较,设置一个指针指向最大公共字符串,一个变量保存最大公共子字符串的长度。然后用第二个字符串的所有子字符串和第一个字符串的所有子字符串比较,将最大相同子字符串信息保存在上面两个变量中。下面看代码:#include #include void fun(char原创 2013-10-25 16:37:59 · 3109 阅读 · 0 评论 -
传智播客C/C++各种开发环境搭建视频工具文档免费教程
传智播客作为中国IT培训的领军品牌,一直把握技术趋势,给大家带来最新的技术分享!传智播客C/C++主流开发环境免费分享视频文档中,就有写一个helloworld程序的示范。火速前来下载吧所谓“工欲善其事,必先利其器”。 欲学C/C++,必先搭建环境,欲成为C/C++高手,必先跑起来helloworld! C/C++ IDE只是工具——剑,C/C++语言就是剑法。欲雄霸天下,必须精通各种剑,精通各路原创 2014-04-18 20:29:39 · 10374 阅读 · 8 评论 -
经典排序算法分析和代码-下篇
这篇文档我们来讲三种非比较排序,计数排序,基数排序计数排序计数排序是一种非比较算法,其时间复杂度为O(N+K) 举例说明先用一个例子来说明计数排序算法,比如需要排序的集合为{1, 2, 1, 0, 4, 5},在该集合中,最大的数值为5,那么通过遍历整个集合,可以得到这样的数组 int counter[] = {1, 2, 1, 0, 1, 1}原创 2013-12-01 01:02:19 · 3387 阅读 · 0 评论 -
经典排序算法分析和代码-上篇
前言:这一篇文章中我们将讨论数组排序的问题,对于数据量比较大的,不能在内存中完成排序的,必须在磁盘上完成排序类型叫作外部排序,本篇将不讨论。对于内部排序的一些相关知识:存在几种容易的算法以排序,如插入排序。有一种算法叫做谢尔排序(ShellSort),它编程非常简单,以运行,并在实践中很有效。还有一些稍微复杂的的排序算法。任何通用的排序算法均需要次比较。1.插入排序 最简单的排序算法之一是插入排序原创 2013-10-30 13:36:55 · 3754 阅读 · 0 评论 -
经典排序算法分析和代码-中篇
上篇文章中我们讨论插入排序、谢尔排序和堆排序,这章我们接着讲其他的几种排序。4.归并排序 归并排序以最坏情形的运行时间运行,而所使用的比较次数几乎是最优的。它是递归算法的一个很好的实例。 这个算法中的基本操作是合并两个已排序的表。因为这两个表是已排序的,所以若将输出放到第三个表中,则该算法可以通过对输入数据进行一趟排序来完成。 比如有两个数组 1 3 5 7 和 2 4 6 8将他们合并原创 2013-11-02 13:18:55 · 2949 阅读 · 4 评论 -
技术不牛如何才拿到国内IT巨头的Offer
不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰。看看这些牛人,NOI金牌,开源社区名人,三年级开始写Basic...在跪拜之余我们不禁要想,和这些牛人比,作为绝大部分技术屌丝的同学们,是否真的与国内IT巨头遥不可及呢?当你打开这个帖子的时候,我已经默认你是此文的目标读者,也就是想进入国内一流互联网企业的非牛人应届生。你不需要拿NOI的奖,无需是开源社区名人,也用不着转载 2013-10-30 20:58:04 · 6148 阅读 · 6 评论 -
基于Visual C++2013拆解世界五百强面试题--题3-打印螺旋数组
请用C语言实现 输入N,打印N*N矩阵比如 N = 3, 打印:1 2 38 9 47 6 5N = 4, 打印1 2 3 412 13 14 511 16 15 610 9 8 7 #include #include #define M 5int arr[M][M] = { 0 }; //初始化数组全0 ,用0来判断数组是否赋有正确的值vo原创 2013-10-08 22:17:56 · 3867 阅读 · 4 评论 -
基于Visual C++2013拆解世界五百强面试题--题4-double转换成字符串
请用C语言实现将double类型数据转换成字符串,再转换成double类型的数据、int类型的数据想要完成题目中的功能,首先我们的先对系统存储double的格式有所了解。浮点数编码转换使用的是IEEE的编码标准。类型存储位数偏置值数符(S)阶码(E)尾数(M)总位数十六进制十进制短浮点数(Single,float)1位8位23位32位7FH+127长浮点数(Double)1位11位52位原创 2013-10-21 11:43:54 · 3481 阅读 · 5 评论 -
基于Visual C++2013拆解世界五百强面试题--题12-进制转换
编程实现,把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数。转换成二进制,直接循环移位依次取每一位,判断1或0然后将相应字符放入字符串缓冲区中。对于十六进制,每一位数字符对应四位,可以每次取四位,判断相应字符放入字符串缓冲区中。理解了基本原理下面直接上代码:#include void PrintBin(long num){ char buf[256]原创 2013-10-25 16:25:12 · 2822 阅读 · 0 评论 -
基于Visual C++2013拆解世界五百强面试题--题16-进制分析
清写出下列代码的输出内容#include int main(){ int a = -1, b = -12, c = -123, d = -1234; printf("%d,%d,%d,%d,%u,%u,%u,%u\n", a, b, c, d, a, b, c, d); printf("%o,%o,%o,%o,%x,%x,%x,%x\n", a, b, c, d, a, b, c,原创 2013-10-25 16:55:38 · 2988 阅读 · 0 评论 -
基于Visual C++2013拆解世界五百强面试题--题5-自己实现strstr
请用C语言实现字符串的查找函数strstr, 找到则返回子字符串的地址,没有找到返回为空,请用数组操作与指针操作实现看到题目想到最简单的方法就是母字符串和子字符串比较,如果不通,将指向母字符串的指针向前移动,继续查找,下面我们分别用数组操作与指针操作实现。国际惯例,参考前面文章新建一个vs2013的工程,经过前面的学习大家已经对开发环境很熟悉了,下面我们直接上代码:#include #includ原创 2013-10-21 14:48:51 · 2982 阅读 · 0 评论 -
基于Visual C++2013拆解世界五百强面试题--题6-double类型逆序
请设计一个函数,不许用到字符串函数,用数学运算,将double类型数据转换,例如123.456转换成654.321首先想到依次提取他的每一个位数,然后进行运算,移动每一位数到相应位置,结果相加就能逆序double数下面上程序:#include #include #include double ConvertDouble(double Val){ int leftLen=0, rightLen=0;原创 2013-10-21 16:52:25 · 3183 阅读 · 1 评论 -
基于Visual C++2013拆解世界五百强面试题--题7-链表的各种操作
请用C实现一个链表,实现链表的查找,逆置,替换,删除,添加,清空,创建。查找、替换和删除、添加里面都会用到遍历链表的操作,所以重点在于遍历,链表的逆置和清空考虑到效率,我们可以用递归实现,至于创建节点,我们直接创建一个空节点作为头节点,不使用其数据域。下面直接上代码:#include #include typedef struct stLIST{ int data; stLIST *n原创 2013-10-22 17:23:13 · 3795 阅读 · 5 评论 -
基于Visual C++2013拆解世界五百强面试题--题8-数组的排序和查找
用三种方法实现对一个数组的排序,并设计一个函数实现数的查找,要求时间越短越好,空间占用越少越好。对数组排序的方法很多,我们选比较常用和容易的三种排序,直接插入排序,冒泡排序和快速排序。直接插入排序:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序冒泡排序:比较相邻的元素。如果第一个比第二个大,就交换他们两个,依次让大的冒到后面快速排序:通过一趟排序将要排序的数据分割成独立原创 2013-10-23 11:43:19 · 2667 阅读 · 0 评论 -
基于Visual C++2013拆解世界五百强面试题--题11-查找数字出现次数
在排序数组中,找出给定数字出现的次数比如{ 1, 2, 2, 2, 3}中2的出现次数是3次我们可使用二分查找发,分别查找出2最先出现的位置和最后出现的位置相减即可。下面是上代码:#include //二分法获取元素最后出现的位置,可能在元素的下一位int GetHigh(int array[], int size, int key){ int low = 0, high = size原创 2013-10-24 18:01:02 · 2756 阅读 · 1 评论 -
VC++2012编程演练数据结构《22》常规排序算法
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。内排序的方法有许多种,按所用策略不同,可归纳为五类:插入排序、选择原创 2012-11-20 15:23:59 · 2819 阅读 · 0 评论 -
VC++2012编程演练数据结构《23》二叉树排序
在计算机科学中,树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构。二叉树是每个节点最多有两个子树的有序树。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。值得注意的是,二叉树不是树的特殊情形。在图论中,二叉树是一个连通的无环图,并且每一个顶点的度不大于3。有根二叉树还原创 2012-11-20 16:39:28 · 3057 阅读 · 0 评论 -
VC++2012编程演练数据结构《24》哈夫曼树
给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。哈夫曼树又称为最优树. 1、路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子或子孙结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。 2、结点的权及带权路径长度 若将树中原创 2012-11-20 16:52:48 · 3132 阅读 · 0 评论 -
VC++2012编程演练数据结构《32》桶排序
桶排序假定:输入是由一个随机过程产生的[0, 1)区间上均匀分布的实数。将区间[0, 1)划分为n个大小相等的子区间(桶),每桶大小1/n:[0, 1/n), [1/n, 2/n), [2/n, 3/n),…,[k/n, (k+1)/n ),…将n个输入元素分配到这些桶中,对桶中元素进行排序,然后依次连接桶输入0 ≤A[1..n] 算法思想 平均情况下桶排序以线性时间运行。像基数排序一样,桶排序原创 2012-11-20 18:41:40 · 3328 阅读 · 1 评论 -
VC++2012编程演练数据结构《20》索引文件
索引文件由索引表和主文件两部分构成。 索引表是一张指示逻辑记录和物理记录之间对应关系的表。索引表中的每项称作索引项。索引项是按键(或逻辑记录号)顺序排列。若文件本身也是按关键字顺序排列,则称为索引顺序文件。否则,称为索引非顺序文件。(1)索引顺序文件 (Indexed Sequential File) 主文件按主关键字有序的文件称索引顺序文件。在索引顺序文件中,可对一组记录建立一个索引项。这原创 2012-11-20 14:50:00 · 2894 阅读 · 0 评论 -
VC++2012编程演练数据结构《9》平衡二叉搜索树
平衡二叉搜索树 任何结点的左子树和右子树高度最多相差1的二叉搜索树。 (1)AVL树的插入算法 a. 插入结点之后仍然是AVL树,则不调整; b. 插入结点之后不再满足AVL树条件,则进行调整,根据导致不平衡的原因,分为: a) LL型――单旋转调整 b) LR型――双旋转调整 c) RL型――双旋转调整 d) RR型――单旋转调整 下图是顺序插入单词{cup,cop,copy,原创 2012-11-19 19:49:46 · 2276 阅读 · 2 评论 -
VC++2012编程演练数据结构《11》哈希表
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。* 若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个原创 2012-11-19 20:07:43 · 2449 阅读 · 0 评论 -
VC++2012编程演练数据结构《8》回溯法解决迷宫问题
回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。可用回溯法求解的问题P,通常要能表达为:对于已知的由n元组(x1,x2,…,xn)组成的一个状态空间E={(x1,x2,…,xn)∣xi∈Si ,i=1,2,…,n},给定关于原创 2012-11-19 19:05:53 · 3160 阅读 · 1 评论 -
VC++2012编程演练数据结构《12》二叉排序树
二叉排序树(Binary Sort Tree)又称二叉查找树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; 每个结点的C(i)为该结点的层次数。最坏情况下,当先后插入的关键字有序时,构成的二叉排序树蜕变为单支树,树的深度为原创 2012-11-19 20:20:28 · 2344 阅读 · 0 评论