基本数据结构 (1.2)——链式表
摘要:前段时间工作比较忙,然后一起玩的同事都在看《男人帮》,于是花了一周多看完,以免与其他人没有共同话题。继续回到算法学习,链式表多用于动态分配和增长的内存块管理,与线性表表相比其优缺非常明显:优点是无需预先知道表的大小,随使用动态增长;缺点也是由此带来的,反复开辟内存管理麻烦且容易形成碎片。 这里先直接给出实现的单链表的代码: LListDemo.zip。下面讨论几个问题: 1.提高单链表的访问效率:对于单链表(仅在当前节点存在指向下一个节点的指针),在当前位置插入新节点操作时需要修改前一个节点(前驱)指向当前节点的指针,那么普通做法需要从头节点起直至遍历到前驱位置,显然效率低下;删除...
阅读全文
基本数据结构 (1.1)——线性表
摘要:线性表Arrary List也就是基于数组实现的表结构,由于基于数组实现,所以其特点非常明显:随机访问(访问指定序号的节点)时间开销O(1),插入删除(在当前位置插入删除)时间开销O(N)。 表结构的操作主要有创建、插入(头、尾、当前位置)、删除(头、尾、当前位置)、查找(指定键值、指定序号)和游走(指向头、尾、上一个节点、下一个节点),一般来讲基于数组的表结构都是预先指定最大容量,这样使用起来会比较不方便,所以可以利用realloc实现表结构的扩容。 Arrary List实现的代码可以参见附件(辅助异常检查CheckError.h,头文件AList.h,代码文件AList.c,模块...
阅读全文
基本数据结构 (0)——提纲
摘要:数据结构是抽象出来的一些存储结构,主要目的在于将一些关系紧密的值集中到一起,从而方便使用(如原先需要多个值进行操作的函数可以简化为仅需要一个结构),同时,可以预先定义针对同一结构的操作接口,从而达到模块化和重复使用的目的。 基本的数据结构由简到繁可以划分为表、树、图三个大类。表是一维的结构,即所有节点的关系可以拉成直线来形象考虑;树则是分叉的结构,从根节点不断分叉形成分支,与自然界的树很相似;图则是一堆散乱的节点,如果两个节点直接有关联则连接成一条边,最终形成平面或者更加复杂的网络。将上述三种基本的数据结构进一步划分又可以得到更多的类型,考虑到使用频率,拟在后面的时间依次实现如下的数据结...
阅读全文
C语言基础知识总结(C程序设计语言阅读笔记)
摘要:由于离开IDE以后发现要编程挺不习惯的,所以最近在看C语言,简单整理一些以前没有太注意的细节(可能也是先用C++/JAVA再用C会忽略的地方)。1.C语言中,变量必须先声明后使用,即一个程序块(花括号对)中所有临时变量必须在第一条可执行语句之前全部声明,而不能像C++那样随用随声明;2.C语言中参数传值传递形参,即为参数的拷贝,此与C++/JAVA相同,同时值得注意,ANSI C不支持引用,此与C++/JAVA有区别,那么要对参数进行修改只能使用指针方式(指针传值指针本身仍是形参,要修改指针本身那必须使用双重指针);3.C语言默认类型为int,即参数无类型或函数无返回值类型声明,则认为是i..
阅读全文
计划1.2不使用IDE系统学习C语言
摘要:好吧,首先得承认被Windows+Visual Studio惯坏了,离开IDE写代码困难无比,尤记得当初刚接触编程学JAVA使用UltraEdit进行编程没有电脑也可以写出正确的程序,顿时有了离开IDE学C语言的想法。说来惭愧,我是先学JAVA,然后.NET,后来做图像和模式识别用C++,现在公司规定算法库必须用C,但是后两种语言没有系统学习过,仅能用而已,现在刚好也算是重新打打基础吧。 网上下了The C Programming Language的中文版,希望能够在一个月内过完。此为分支,完成后继续算法。 BSKER 于20...
阅读全文
《算法导论》笔记1——第1章 算法在计算中的作用
摘要:算法是定义良好的计算过程,通过一系列的计算步骤将输入数据转换为输出结果。首先第一点,算法本身是面向过程的,给定输入得到输出,与对象无关,所以用C语言来学习比较合适。然后,所谓定义良好是指算法必须包括三要素:输入、输出和计算过程。那么有没有不包含三要素的算法呢?首先看有没有没有输入的,产生随机数比较像,调用Rand函数得到一个随机的数字,但是实际上计算机的计算都是确定性的,产生的所谓伪随机数是以当前时间为种子(也可以自行指定)经过一系列计算得到,也就是算法不能做到“无中生有”;再看能不能没有输出,这里需要指出的是所谓输出不应该局限于返回计算结果,而是返回计算结果或者引起系统的某些变化都是输出..
阅读全文
C语言实现函数多态
摘要:面向对象编程中比较好的特性就是有继承和函数多态,从而使得对于具有相同父类的子类对象能够调用相同的接口实现对应的功能,举例说明,文本输出类TxtWriter和二进制输出类BinWriter都继承自父类Writer,父类Writer定义了接口Open、Write、Close,两个子类分别实现各自的方法,但是对应的输出格式却分别为文本和二进制,这样其他类使用Writer时会根据实际对象为TxtWriter还是BinWriter而选择对应的方法实现,从而不需要修改大段的代码即可实现输出格式为文本还是二进制。 在实际工程应用中,类似的例子还有很多,比如工程中需要使用不同类型的数据库,如果能够采用上...
阅读全文