Spiga

栈和队列(三):队列

2012-03-25 12:48:15

摘要:FIFO: First In, First Out(先进先出)   受限的线性表,在一端插入,在另一端删除。 阅读全文

栈和队列(二):栈的应用举例

2012-03-23 17:07:58

摘要:一、数制转换 二、括号匹配的检验 三、迷宫求解 四、Hanoi塔问题 阅读全文

栈和队列(一):栈

2012-03-20 10:48:02

摘要:LIFO: Last In, First Out(后进先出)   受限的线性表,它插入和删除只能在表的一端进行   所有插入和删除操作都只能在表的一端进行,这一端叫栈顶。   最后进入栈中的数据最先被拿走。 阅读全文

线性表(六):.NET Framework泛型LinkedList类

2012-03-17 19:56:22

摘要:一、结点为LinkedListNode​对象 该对象的实现如下 //在LinkedListT中LinkedListNodeT相互之间构成双向环状链表 //该双向环状链表通过内部成员next、prev来实现,但对于外部不可见 //对于外部Next、Previous表现为双向链表,首尾不构成环 public sealed class LinkedListNodeT { internal Link... 阅读全文

线性表(五):.NET Framework泛型List类

2012-03-14 18:54:23

摘要:List<T>类 一、采用数组保存数据 二、当数据空间不够时,扩大1倍空间 三、插入数据时最坏可能会带来n-1次数据复制 四、当删除数据时最坏可能带来n-1次数据复制 五、提供QuickSort排序和二分查找方法 阅读全文

线性表(四):与线性表相关的算法

2012-03-10 23:09:02

摘要:这篇文章是一些与线性表相关的算法 1.如果顺序表中每个元素都是整数,设计用最少时间把所有值为负数的元素放在全部正数值元素的前面。 2.如果顺序表为非递减有序排列,试删除顺序表中多余的值相同的元素。 3.编写一个单链表逆置算法。 4.找出单链表的中间元素。 阅读全文

线性表(三):双向链表

2012-03-07 21:57:49

摘要:在双链表中,有些操作(如取元素、定位等)算法中仅涉及后继结点,此时双向链表的算法和单链表的算法均相同,但对插入、删除操作,双向链表需同时修改后继和前驱两个引用,比单链表要复杂一些 阅读全文

线性表(二):单链表

2012-03-04 20:34:02

摘要:线性表的链式表示就是采用链表实现存储,即表中数据元素是用一组任意的存储单元存储,它不要求逻辑上相邻的元素在物理位置上也相邻。这种数据结构有以下优点:其一,在进行插入和删除操作时,无需移动大量元素;其二,给长度变化较大的线性表无需预先分配最大空间;其三,表容量容易扩充。链表的特点是用一组任意的存储单元存储线性表的数据元素。因此,为了表示每个数据元素ai与其直接后继数据元素ai+1间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需要存储一个指示其直接后继的信息。这两部分信息组成数据元素ai的存储映像,称为结点(Node)。 阅读全文

线性表(一):顺序表

2012-03-02 18:12:29

摘要:一、线性表概念   一个线性表由有限且有序的数据项组成。数据项称为元素。   每个表元素有相同的类型。   空表不含任何元素。   线性表的长度定义为表中所含元素的个数。   表的第一个元素称为表头。   表的最后一个元素称为表尾。   有序表是指表中元素的值按位置顺序递增或递减。   无序表是指表中元素的值与位置没有关系。   表的表示: ( a0, a1, …, an-1) 二、线性表的操作 1.初始化操作   初始条件:线性表不存在。   操作结果:创建一个空的线性表。 2.插入操作:InsertNode(T a, int i)   初始条件:线性表存在,插入位置正确(i= i =n+1,n为插入前的表长)。   操作结果:在线性表的第i个位置上插入一个值为 a 的新元素,这样使得原序号为 i,i+1,...,n的数据元素的序号变为 i+1,i+2,...,n+1,插入后表长为 n+1。 3.删除操作:DeleteNode(int i)   初始条件:线性表存在且不为空,删除位置正确(1= i =n,n为删除前的表长)。   操作结果:在线性表中删除序号为 i 的数据元素,返回删除后的数据元素。删除后使得原序号为 i+1,i+2,...,n的数据元素的序号变为 i,i+1,...,n-1,插入后表长为 n-1。 4.取表元素:SearchNode(int i)   初始条件:线性表存在,所取数据元素位置正确(1= i =n,n为线性表的表长)。   操作结果:返回线性表中第 i 个数据元素。 5.定位元素:SearchNode(T value)   初始条件:线性表存在。   操作结果:在线性表中查找值为value的数据元素,其结果返回在线性表中首次出现的值为value的数据元素的序号,称为查找成功;否则,线性表中未找到值为value的数据元素,返回一个特殊值表示查找失败。 6.求表长:GetLength()   初始条件:线性表存在。   操作结果:返回线性表中所有数据元素的个数。 7.清空操作:Clear()   初始条件:线性表存在且有数据元素。   操作结果:从线性表中清除所有数据元素,线性表为空。 8.判断线性表是否为空:IsEmpty()   初始条件:线性表存在。   操作结果:如果线性表中不包含任何元素则返回true,否则返回false。 …… 阅读全文

追MM与23种设计模式

2011-02-11 17:49:09

摘要:创建型模式 FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory1 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。 BUILDER—MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。(这一定比美军在伊拉克用的翻译机好卖) 建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。 FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。 工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。 PROTOTYPE—跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。(100块钱一份,你要不要) 原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。 SINGLETON—俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道“老…… 阅读全文