品读<大话数据结构>之八------栈和队列(上)
摘要:栈和队列,都是线性表的一种表现形式,首先先看栈.栈(stack)是限定仅在表尾进行插入和删除操作的线性表.我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈.栈又称为后进先出的线性表,简称为LIFO结构。 栈的特殊之处在于限制了这个线性表的插入和删除位置,它始终只在栈顶进行,这就使得:栈底是固定的,最先进栈的只能在栈底.栈的插入操作,叫做进栈,也称压栈,入栈.栈的删除操作叫做出栈. 但是,这并不说明最先进栈的元素一定是最后出栈.别怀疑,我们举个例子来说明吧.假设有1,2,3三个数字要进栈,出来会有几种情况呢? 第一种,也算是大家的第一反.
阅读全文
posted @
2011-09-05 12:06
Jeallyn
阅读(364)
推荐(0)
品读<大话数据结构>之七-----线性表(下)
摘要:在链式存储结构中,我们用到了指针来记录后继元素的存储位置,但是,早期编程的语言中,由于没有指针,这要怎么实现链式存储结构呢? 人实在是聪明的动物,居然能想到用数组来描述单链表.而这就是所谓的静态链表.乍一看,这还真不知道怎么能用数组来实现。那么,这究竟怎么实现呢?一起来看看吧. 首先我们让数组的元素由两个数据域组成,data和cur.也就是说,数组的每个下标都对应一个data和一个cur,数据域data用来存放数据元素,即要处理的数据.而cur相当于链表中的指针,存放该元素的后继在数组中的下标. 为了方便插入数据,此时的数组通常要建立得大一些:View Code 1 #define MAXS.
阅读全文
posted @
2011-09-02 13:53
Jeallyn
阅读(287)
推荐(0)
品读<大话数据结构>之六-----线性表(中)
摘要:上一段落提到了线性表顺序结构的操作及优缺点,其中最大的缺点就是插入和删除时需要移动大量的元素,这样就会消耗时间.那么该怎么解决呢? 顺序存储最大的特点就是相邻,那么能不能不要考虑相邻呢?没错,就这个想法,数据结构中称它为链式存储结构。它的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的.这就意味着这些数据元素可以存储在内存未被占用的任意位置。这也就是说,在存储数据元素的同时,我们需要存储它后继元素的存储地址。 在链式存储结构中,我们把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域.指针域中存储的信息称做指针或链.由这两部分组成的存储.
阅读全文
posted @
2011-09-01 16:05
Jeallyn
阅读(331)
推荐(0)
品读<大话数据结构>之五-----------线性表(上)
摘要:线性表---List,零个或多个数据元素的有限序列.首先它是一个序列.也就是说,元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继. 当线性表元素的个数n(n>=0)定义为线性表的长度时,如果n=0,则说明该线性表是个空表. 线性表的抽象数据类型定义如下:View Code 1 ADT 线性表(List) 2 Data 3 线性表的数据对象集合为{a1,a2,....an},每个元素的类型均为DataType.其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接...
阅读全文
posted @
2011-08-31 17:09
Jeallyn
阅读(309)
推荐(0)
品读<大话数据结构>之四---------算法(下)
摘要:是时候开始介绍算法的时间复杂度了,不过在这开始之前,我们需要了解一些额外的知识,那就是函数的渐近增长.先来说说它的概念:给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么,就说f(n)的增长渐近快于g(n). 这里不详细说这个概念,想要了解的朋友们可以去找找数学书,我数学学得不太好,所以,呵呵.....再这里我们需要知道的是通过数学中的这么一个概念,我们能得出一个结论:判断一个算法的效率时,函数中的常数和其他次项常常可以忽略,而更应关注主项(即最高阶项)的阶数. 接下来我们切入正题.那么,什么是算法的时间复杂度呢?简而言之,就是算法执
阅读全文
posted @
2011-08-31 14:02
Jeallyn
阅读(220)
推荐(0)
品读<大话数据结构>之三----------算法(中)
摘要:上一篇文章中提到了衡量一个算法是不是好算法有一个标准就是时间效率问题.这里的效率说的是算法的执行时间.说到算法的执行时间,也许你的第一反应就是把算法设计出来,这样就能轻而易举的得到执行时间了,不错,有这个想法其实也很好,这就是事后统计方法,即通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低. 然而,这个方法其实远比想象中来得不切实际,试想,当你花了很长一段时间把算法设计出来,终于出来的时候却发现它的效率如此低下,应该是会崩溃的吧.何况还有很多外界因素的影响,又如何能保证这个算法可行呢? 既然事后统计行不通,那唯一能考虑的就是事前分析了。
阅读全文
posted @
2011-08-31 13:19
Jeallyn
阅读(188)
推荐(0)
读<大话数据结构>之二--------算法(上)
摘要:本章由高斯计算从1加到100的思想引入算法之间的比较.从而引入一个话题:什么是算法.算法其实就是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或者多个操作. 讲述了算法的概念,接下来就是要对它有一个深入的了解过程,于是,到了说说它的特性的时候了,算法的五个基本特性分别是:输入,输出,有穷性,确定性和可行性.其中,算法可以有零个或者多个输入,但一定要至少有一个输出,否则算法就失去意义了.有穷性则能保证算法不会无限制的重复下去,那么确定性呢?试想一个算法是有歧义的,那么怎么能保证我们要的结果会是预期的呢?因此,算法的确定性也必须要得到保证。如果算法不可行,那么这.
阅读全文
posted @
2011-08-30 16:29
Jeallyn
阅读(215)
推荐(0)
品读<大话数据结构>之一------------数据结构绪论
摘要:大学期间数据结构虽然学得不算一塌糊涂,却也确实没学好,看到<大话设计模式>的作者程杰老师又出书了,还是忍不住想得到一本,何况这次的书籍正是我薄弱的数据结构呢?其实大学没学好这门课一个很重要的原因就是不知道它究竟有什么用,学习生涯似乎一直都是这样,从开始数数的时候就没有人告诉我们知道1+1=2有什么意思,直到某天你自己意识到了才会发现它的用途.在求职的道路中,我走得并不是那么顺畅,其中在外企摔倒的几次都是因为数据结构.虽然现在顺利入职了,还是想花一些时间好好折腾下数据结构. 买好了书籍的第一件事就是到程老师的博客中找勘误,毕竟再好的书籍都会有难免的错误.这本书的错误虽然不少,但是我们
阅读全文
posted @
2011-08-30 13:14
Jeallyn
阅读(310)
推荐(0)