新的起点
做自己喜欢并适合的事情

导航

 

2011年11月30日

摘要: 前段时间工作比较忙,然后一起玩的同事都在看《男人帮》,于是花了一周多看完,以免与其他人没有共同话题。继续回到算法学习,链式表多用于动态分配和增长的内存块管理,与线性表表相比其优缺非常明显:优点是无需预先知道表的大小,随使用动态增长;缺点也是由此带来的,反复开辟内存管理麻烦且容易形成碎片。 这里先直接给出实现的单链表的代码: LListDemo.zip。下面讨论几个问题: 1.提高单链表的访问效率:对于单链表(仅在当前节点存在指向下一个节点的指针),在当前位置插入新节点操作时需要修改前一个节点(前驱)指向当前节点的指针,那么普通做法需要从头节点起直至遍历到前驱位置,显然效率低下;删除... 阅读全文
posted @ 2011-11-30 23:39 Kevin W 阅读(421) 评论(0) 推荐(0) 编辑
 

2011年11月6日

摘要: 线性表Arrary List也就是基于数组实现的表结构,由于基于数组实现,所以其特点非常明显:随机访问(访问指定序号的节点)时间开销O(1),插入删除(在当前位置插入删除)时间开销O(N)。 表结构的操作主要有创建、插入(头、尾、当前位置)、删除(头、尾、当前位置)、查找(指定键值、指定序号)和游走(指向头、尾、上一个节点、下一个节点),一般来讲基于数组的表结构都是预先指定最大容量,这样使用起来会比较不方便,所以可以利用realloc实现表结构的扩容。 Arrary List实现的代码可以参见附件(辅助异常检查CheckError.h,头文件AList.h,代码文件AList.c,模块... 阅读全文
posted @ 2011-11-06 00:05 Kevin W 阅读(212) 评论(0) 推荐(0) 编辑
 

2011年11月5日

摘要: 数据结构是抽象出来的一些存储结构,主要目的在于将一些关系紧密的值集中到一起,从而方便使用(如原先需要多个值进行操作的函数可以简化为仅需要一个结构),同时,可以预先定义针对同一结构的操作接口,从而达到模块化和重复使用的目的。 基本的数据结构由简到繁可以划分为表、树、图三个大类。表是一维的结构,即所有节点的关系可以拉成直线来形象考虑;树则是分叉的结构,从根节点不断分叉形成分支,与自然界的树很相似;图则是一堆散乱的节点,如果两个节点直接有关联则连接成一条边,最终形成平面或者更加复杂的网络。将上述三种基本的数据结构进一步划分又可以得到更多的类型,考虑到使用频率,拟在后面的时间依次实现如下的数据结... 阅读全文
posted @ 2011-11-05 23:17 Kevin W 阅读(193) 评论(0) 推荐(0) 编辑
 

2011年11月1日

摘要: 经过了两周多终于看完《C程序设计语言》,从栈中返回到算法的学习,经过考虑没有数据结构可能实现算法比较不靠谱,所以打算增加《数据结构与算法分析:C语言实现》这本书与《算法导论》一起看,希望12月中旬能够结束吧。 BSKER于2011.10.31 阅读全文
posted @ 2011-11-01 00:05 Kevin W 阅读(159) 评论(0) 推荐(0) 编辑
 

2011年10月30日

摘要: 由于离开IDE以后发现要编程挺不习惯的,所以最近在看C语言,简单整理一些以前没有太注意的细节(可能也是先用C++/JAVA再用C会忽略的地方)。1.C语言中,变量必须先声明后使用,即一个程序块(花括号对)中所有临时变量必须在第一条可执行语句之前全部声明,而不能像C++那样随用随声明;2.C语言中参数传值传递形参,即为参数的拷贝,此与C++/JAVA相同,同时值得注意,ANSI C不支持引用,此与C++/JAVA有区别,那么要对参数进行修改只能使用指针方式(指针传值指针本身仍是形参,要修改指针本身那必须使用双重指针);3.C语言默认类型为int,即参数无类型或函数无返回值类型声明,则认为是i.. 阅读全文
posted @ 2011-10-30 22:57 Kevin W 阅读(1748) 评论(0) 推荐(0) 编辑
 

2011年10月18日

摘要: 好吧,首先得承认被Windows+Visual Studio惯坏了,离开IDE写代码困难无比,尤记得当初刚接触编程学JAVA使用UltraEdit进行编程没有电脑也可以写出正确的程序,顿时有了离开IDE学C语言的想法。说来惭愧,我是先学JAVA,然后.NET,后来做图像和模式识别用C++,现在公司规定算法库必须用C,但是后两种语言没有系统学习过,仅能用而已,现在刚好也算是重新打打基础吧。 网上下了The C Programming Language的中文版,希望能够在一个月内过完。此为分支,完成后继续算法。 BSKER 于20... 阅读全文
posted @ 2011-10-18 21:36 Kevin W 阅读(286) 评论(0) 推荐(0) 编辑
 

2011年10月14日

摘要: 昨天简单学习了一下makefile和Linux下C语言编程,试了下Anjuta和Eclipse,简单说下Anjuta,建立makefile工程后还是要自己修改makefile的,我在这上面卡了不下一个小时,不过这样也好,一切都可以自己掌控,不至于像以前那么傻瓜化。 进入正题,《算法导论》第2章居然介绍排序算法,估计是想要让大家先对算法有个概念吧,一开始还纠结要不要找其他书补充一下数据结构,后来发现这里所谓排序算法只不过为了讲“增量法”和“分治法”这两种算法设计思想,所以也就释然了。 所谓增量法就是从无到有,保持现有结果正确的情况下不断增加和解决新的问题,从而得到最终的结果。好比是一支军... 阅读全文
posted @ 2011-10-14 22:20 Kevin W 阅读(181) 评论(0) 推荐(0) 编辑
 

2011年10月12日

摘要: 算法是定义良好的计算过程,通过一系列的计算步骤将输入数据转换为输出结果。首先第一点,算法本身是面向过程的,给定输入得到输出,与对象无关,所以用C语言来学习比较合适。然后,所谓定义良好是指算法必须包括三要素:输入、输出和计算过程。那么有没有不包含三要素的算法呢?首先看有没有没有输入的,产生随机数比较像,调用Rand函数得到一个随机的数字,但是实际上计算机的计算都是确定性的,产生的所谓伪随机数是以当前时间为种子(也可以自行指定)经过一系列计算得到,也就是算法不能做到“无中生有”;再看能不能没有输出,这里需要指出的是所谓输出不应该局限于返回计算结果,而是返回计算结果或者引起系统的某些变化都是输出.. 阅读全文
posted @ 2011-10-12 23:27 Kevin W 阅读(225) 评论(0) 推荐(0) 编辑
 
摘要: 国庆回来有些日子,也安装了Eclipse,在安装Java时有些麻烦,11.04中没有Sun的源(是不是被Oracle收购的原因?),折腾了两个晚上,然后发现有open-java,其他一切照网上教程做,用apt-get完成安装即可,不再另起一篇叙述过程。 原本计划自己整理一个算法库出来(其实在公司也有类似的想法和实践),但是发现自己的水平和经验还不够,所以打算暂时搁置,磨刀不误砍柴工,还是先把以前的东西捡起来,打算复习一下算法和数值分析的内容,先把《算法导论》看一遍吧,边看边实现书本中的算法,也算是重新熟悉。当然,光看一本书会比较乏味,CUDA相关的也是照着官方手册来看和学习好了。两本书轮... 阅读全文
posted @ 2011-10-12 22:04 Kevin W 阅读(196) 评论(0) 推荐(0) 编辑
 

2011年10月10日

摘要: 面向对象编程中比较好的特性就是有继承和函数多态,从而使得对于具有相同父类的子类对象能够调用相同的接口实现对应的功能,举例说明,文本输出类TxtWriter和二进制输出类BinWriter都继承自父类Writer,父类Writer定义了接口Open、Write、Close,两个子类分别实现各自的方法,但是对应的输出格式却分别为文本和二进制,这样其他类使用Writer时会根据实际对象为TxtWriter还是BinWriter而选择对应的方法实现,从而不需要修改大段的代码即可实现输出格式为文本还是二进制。 在实际工程应用中,类似的例子还有很多,比如工程中需要使用不同类型的数据库,如果能够采用上... 阅读全文
posted @ 2011-10-10 23:31 Kevin W 阅读(4070) 评论(0) 推荐(0) 编辑