随笔分类 -  C Program

摘要:1 #include 2 #include "stdlib.h" 3 #include 4 #include 5 #include 6 using namespace std; 7 8 //节点定义 9 typedef struct biNode{ 10 char va... 阅读全文
posted @ 2014-10-13 18:44 NW_KNIFE 阅读(447) 评论(0) 推荐(0) 编辑
摘要:C语言中,数组名作为参数传递给函数时,退化为指针,sizeof对指针操作结果应该是4。例子如下:#includeusing namespace std;void Swap_arr(char* charArr){ int len = sizeof(charArr); cout usin... 阅读全文
posted @ 2014-09-03 19:49 NW_KNIFE 阅读(776) 评论(0) 推荐(0) 编辑
摘要:一. 问题的引出 今天看阿里的笔试题,看到一个非常有意思的题目,但是很容易出错。 题目:如下函数,在32bit系统foo(2^31-3)的值是:Int foo(int x){return x&-x;} 解答:如果想要答对这道题目,首先要清楚C语言中符号的优先级别,负号(-)的优先级高于^,... 阅读全文
posted @ 2014-08-28 19:49 NW_KNIFE 阅读(10160) 评论(0) 推荐(2) 编辑
摘要:1.什么是对齐? 现代计算机中内存空间都是按照字节(byte)划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序地一个接一个地排放,这就是对齐。 2.计算机为什么要... 阅读全文
posted @ 2014-08-27 19:17 NW_KNIFE 阅读(7936) 评论(0) 推荐(1) 编辑
摘要:今天在学习《编程之美》的时候,看到一个二分查找的题目,发现原来我真的不懂二分查找。 二分查找时候注意的事项: 在求二分查找的中间点时没有使用midIndex = (minIndex + maxIndex) / 2是因为,以免 minIndex + maxIndex之后会导致溢出而出现错误。注... 阅读全文
posted @ 2014-08-26 20:36 NW_KNIFE 阅读(543) 评论(0) 推荐(0) 编辑
摘要:题目来源:《The C programming language》中的习题P92练习5-8:一个日期转换的问题,把某月某日这种日期表示形式转换为某年中第几天的表示形式,反之亦然。例如,3月1日是非闰年的第60天,是闰年的第61天。在这里,我们定义下列两个函数以进行日期转换:函数day_of_year... 阅读全文
posted @ 2014-06-28 15:33 NW_KNIFE 阅读(431) 评论(0) 推荐(0) 编辑
摘要:题目:编写UNIX程序sort的简化版本,该程序按字母顺序对由文本行组成的集合进行排序。 思路:我们引入指针数组处理这种问题。如果待排序的文本行首尾相连地存储在一个长字符数组中,那么每个文本行可通过指向它的第一个字符的指针来访问。这些指针本身可以存储在一个数组中。这样,将指向两个文本行的指针传... 阅读全文
posted @ 2014-06-28 14:13 NW_KNIFE 阅读(652) 评论(0) 推荐(0) 编辑
摘要:首先,我们拿二维数组为例。二维数组称为矩阵。二维数组在概念上是二维的,但实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如果将二维数组作为参数传递给函数,那么在函数的参数声明中必须指明数组的列数,而数组的行数没有太大关系。因为函数调用时传递的是一个指针,它指向由行向量构成的... 阅读全文
posted @ 2014-06-28 13:48 NW_KNIFE 阅读(1584) 评论(0) 推荐(0) 编辑
摘要:前面在常用的排序算法中,已经写过一篇关于快速排序算法的博客,但是最近看到《The C Programming Language》这本书中的快速排序算法写的不错,所以就拿过来分享一下,下面我们来看一下吧。 快速排序算法是C. A. R. Hoare于1962年发明的。快速排序思想是:对于一个给定... 阅读全文
posted @ 2014-06-27 16:50 NW_KNIFE 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2014-06-27 13:35 NW_KNIFE 阅读(387) 评论(0) 推荐(0) 编辑
摘要:题目来源:《The C programming language》中的习题P51练习2-1: 编写函数itob(n, s, b),将整数n转换为以b为底的数,并将转换结果以字符的形式保存到字符串s中。例如,itob(n, s, 16)把整数n格式化成16进制整数保存在s中。 解题思路:这题本身并不... 阅读全文
posted @ 2014-06-23 09:45 NW_KNIFE 阅读(540) 评论(0) 推荐(0) 编辑
摘要:一.将字符串转化为对应的数值/*=============================================================================## FileName: stringToNo.c# Algorithm: 将字符串转化为对... 阅读全文
posted @ 2014-06-22 20:46 NW_KNIFE 阅读(3769) 评论(0) 推荐(0) 编辑
摘要:题目来源:《The C programming language》中的习题P49练习2-9: 编写函数expand(s1, s2),将字符串s1中类似于a-z一类的速记符号在字符串s2中扩展为等价的完整列表abc...xyz。该函数可以处理大小写字幕和数字,并可以处理a-b-c、a-z0-9与-a-... 阅读全文
posted @ 2014-06-22 16:24 NW_KNIFE 阅读(648) 评论(0) 推荐(0) 编辑
摘要:最近间间断断的将9种排序算法用C实现,并且将其以博客笔记的形式记录下来,其中各个排序算法的描述部分特别参考了CSDN上太阳落雨的博客!现在就该来综合的分析这九种排序,让我们先来看看其算法复杂度和稳定性的分析结果:一.算法复杂度以及稳定性分析二.排序的时间效率比较 下图表名了各种算法在不同数据规... 阅读全文
posted @ 2014-06-21 21:19 NW_KNIFE 阅读(431) 评论(0) 推荐(0) 编辑
摘要:一. 算法描述 希尔排序:将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小的增量,再将数组分割为多个子序列进行排序......最后选择增量为1,即使用直接插入排序,使最终数组成为有序。 增量的选择:在每趟的排序过程都有一... 阅读全文
posted @ 2014-06-21 20:57 NW_KNIFE 阅读(246) 评论(0) 推荐(0) 编辑
摘要:一. 算法描述 基数排序(以整形为例),将整形10进制按每位拆分,然后从低位到高位依次比较各个位。主要分为三个过程:分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)收集,再将放置在0~9号桶中的数据按顺序放到数组中重复(1)(2)过程,从个位到最高位... 阅读全文
posted @ 2014-06-21 11:32 NW_KNIFE 阅读(251) 评论(0) 推荐(0) 编辑
摘要:堆是一种完全二叉树结构,并且其满足一种性质:父节点存储值大于(或小于)其孩子节点存储值,分别称为大顶堆、小顶堆。堆一般采用数组进行存储(从下标为0开始)。则父节点位置为i,那么其左孩子为2*i + 1,右孩子为2*i + 2。一. 算法描述 堆排序主要分为两个过程:建堆:先使长度为N数组形成一... 阅读全文
posted @ 2014-06-17 21:30 NW_KNIFE 阅读(269) 评论(0) 推荐(0) 编辑
摘要:一. 算法描述 快速排序:快速排序采用分治法进行排序,首先是分割,选取数组中的任意一个元素value(默认选用第一个),将数组划分为两段,前一段小于value,后一段大于value;然后再分别对前半段和后半段进行递归快速排序。其实现细节如下图所示:二. 算法实现/*================... 阅读全文
posted @ 2014-06-16 21:31 NW_KNIFE 阅读(419) 评论(0) 推荐(0) 编辑
摘要:一. 算法描述 自顶向下的归并排序:采用分治法进行自顶向下的程序设计方式,分治法的核心思想就是分解、求解、合并。先将长度为N的无序序列分割平均分割为两段然后分别对前半段进行归并排序、后半段进行归并排序最后再将排序好的前半段和后半段归并 过程(2)中进行递归求解,最终下图详细的分解了自顶向下的合并... 阅读全文
posted @ 2014-06-15 15:01 NW_KNIFE 阅读(446) 评论(0) 推荐(0) 编辑
摘要:一. 算法描述 自底向上的归并排序:归并排序主要是完成将若干个有序子序列合并成一个完整的有序子序列;自底向上的排序是归并排序的一种实现方式,将一个无序的N长数组切个成N个有序子序列,然后再两两合并,然后再将合并后的N/2(或者N/2 + 1)个子序列继续进行两两合并,以此类推得到一个完整的有序数组... 阅读全文
posted @ 2014-06-15 14:56 NW_KNIFE 阅读(1997) 评论(0) 推荐(0) 编辑