| 我们称数据结构是计算机科学中的一门专业基础课,但它又有着不同于其他一些基础课的特点,在于它有很强的综合性,不仅仅涉及计算机软件研究,包括操作系统,编译程序等,还与计算机硬件有着相当大的关系,从编码理论到数据存储都离不开数据结构。因此可以说,数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。所以《数据结构》这门课程对于学好计算机应用专业的其他后续课程起着非常关键的作用。但是由于课程内容繁多,许多内容有着相当的难度。所以学好它并不是一件很容易的事情。所以一个好的学习方法就显得尤其重要。判断一个学习方法好坏的标准关键看这种学习方法是否适合于自己。所以大家在学习这么课程的过程中,应该不断吸收、总结、归纳,结合自己的特点,找出一种对自己来说行之有效的学习方法,这样学习起来就可以达到事半功倍。本文是依据《数据结构》课程自身的特点已经以往的一些教学经验,总结、归纳得出一些学习方法上的建议和重点和难点分析,希望能给广大学员带来启发,从来使大家读完之后,能够使自己的学习更加行之有效。下面我们来逐步给大家讲解:
一、学习本课程的一些方法上的建议 1.因为本课程的算法是用类C语言来描述的(算法的基本概念我们将在下面的内容介绍)。类C语言是一种伪语言,其语法与C语言在很大程度上是相似的。所以我们需要掌握C语言和类C语言是学好数据结构的先决条件,所以事先应该对C语言和类C语言有所了解。 2.下面我来介绍一下本课程的基本内容: 数据结构这门课程主要有以下几个内容: (1)线形结构--包括线形表、栈、队列和数组等内容 (2)非线形结构--包括树、图等内容 (3)排序 (4)查找 这些内容基本上概括了整个数据结构课程的基本内容。学员们在学习的过程中,要注意比较它们之间的联系和不同点,需要指出的是查找和排序是日常工作中经常遇到的操作,因此在数据结构中我们也专门的章节给学员们加以介绍。 3.我们要了解一下整个数据结构课程讲述的基本步骤,这样我们就可以知道该如何学习书中的每一种数据结构: (1)逻辑结构--其特点是它独立与计算机的硬件结构的一种抽象的数学拓扑结构 (2)基本运算--即定义在某种逻辑结构上的具体操作。每一种逻辑结构都对应于一个运算的集合。在这里我们仅仅需要考虑的是每种运算的功能,即只关心它"做什么",而不考虑如何去实现它。 (3)存储结构--也就是逻辑结构在计算机中的具体实现,它是一个依赖与计算机硬件的结构。 (4)运算实现--运算只有和具体的存储结构相结合,才能够得到实现,因此它所关心的问题就是如何去实现某种具体的运算,即让我们知道该"怎么做"。 (5)算法评价--每一种运算实现的不同方法,所对应的时间性能、空间性能都是不同。所以我们需要从这两个角度来考虑和评价我们所选择的运算实现方法的好坏。 以上所列举的几项是每一种数据结构都需要讲述的,而且每一种数据结构的这五个方面都是密切联系的,而且不同数据结构在某一特定方面也有着相互之间的联系。所以我们在学习的过程中,要逐步学会一一加一比较,加以归纳、总结,从而找出它们之间的相同点和不同点。这样有助于加深对整个课程的理解,并且在脑海中逐步形成一个完整的体系。 4.提高解题能力的最佳途径是首先理解教材中介绍的各个算法,这些算法大多数都是经典的。同学学习和理会这些算法的含义和具体实现过程,我们可以归纳总结出一些良好的基本解题思路、方法和技巧。
二、数据结构中的重点、难点解析: 1.关于数据结构的一些术语和名词解释: 首先是一个被称为数据的东西:它是对客观事物的符号表示,计算机科学中是指所有能输入计算机中并被计算机程序处理的符号总称就是数据。还有数据元素,它是数据的基本单位,在计算机程序中通常被作为一个整体进行处理和考虑。有时,一个数据元素可由若干数据项组成,数据项是数据的不可分割的最小单位。以及数据对象,它是相同的数据元素的集合,是数据的一个子集。最后我们给出数据结构的定义:是相互之间存在一种或多种特定关系的数据元素的集合。 在了解了数据结构的定义之后,我们再来看一看数据结构所研究的对象:数据元素。而要对数据元素进行抽象研究,就要对其进行分类。在这门课程中,我们选择的分类标准就是数据元素之间的关系,我们今后的课程也大致按照这种分类进行。根据数据元素之间的不同特性,通常有下列四类基本结构: 集合:结构中的数据元素除了同属于一个集合的关系外,并无其它关系。 线性结构:结构中的数据元素之间存在一个对一个的关系。 树形结构:结构中的数据元素之间存在一个对多个的关系。 网状结构:结构中的数据元素之间存在多个对多个的关系。 2.关于存储结构: 数据的存储结构有四种,进一步说明如下: (1)对顺序存储结构牢记三点: ①使用的是连续存储空间,中间不允许有间隙。 ②"按一定的次序"将元素存入空间中,这种存储次序决定了存取方式(可以实现随机存储)。比如二叉树需转化为完全二叉树才能存入顺序结构中,只有这样才便于查找第i个结点的双亲及其左、右孩子。 ③利用地址相邻来反映元素间的逻辑关系。 (2)链式存储结构(链表)分为两种:动态链表和静态链表。前者是利用指针型变量通过new()函数动态生成的存储结构,后者是通过事先定义数组来实现的。它们的本质都是一样的,即在存储数据元素的同时,还存储了其直接后继的地址。本教材仅介绍了动态链表,它借助指针来建立元素间的联系。 (3)散列存储结构的本质是利用元素的关键字,按散列函数计算其存储地址的方式来构成的存储结构。即元素值本身与存储地址通过散列函数建立直接的联系。 3.算法的定义和描述: 在学习数据结构的过程中,我们将要学习到许多种类的算法。这些算法将贯穿整个课程的学习。所以我们首先需要理解一些算法的定义和描述。 以下是算法的定义:算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。但不是任何指令序列都可以称作算法,要能够称为算法,必需具备以下五个重要特征: 有穷性:一个算法在合法输入的情况下,总是在执行有限步后结束,而且每一步都可在有穷时间内完成。 确定性:算法中每一条指令必须有确切的含义,不会产生二义性。而且,在任何条件下,算法只有唯一的一条执行路径,即相同输入得到相同输出。 可行性:一个算法是能行的,即算法中描述的操作都是可以通过已经实现的运算执行有限次来实现的。 输入:一个算法有零个或多个输入。这些输入取自特定的对象的集合。 输出:一个算法有零个或多个输出。这些输出是同输入存在某种特定关系的量。 从以上的算法的定义和特征,我们可以看出算法和程序两者是十分相似的,当两者也是有区别的。比如,一个程序不一定满足有穷性。例如操作系统,开机后只要整个系统不遭破坏,它就不会停止,即使没有任何操作需要处理,它仍处于一个等待循环中。因此操作系统不是一个算法。另外,程序中的指令必须是机器可以执行的德,而算法中的指令则无此限制。若一个算法用机器可执行的语言来书写,则它就是一个程序。所以,算法可以说是程序在逻辑上的一种抽象,主要描述的是实现某种具体的操作的方法。所以算法是可以脱离程序而存在的,如果我们掌握了某种操作的算法,我们就可以很容易地用多种计算机语言来实现它。所以,我们在学习数据结构的时候,注重的应该很好地掌握数据结构中的算法的描述和实现,这样对于我们以后用具体的程序来实现它其中非常关键的作用。 我们在学习算法的过程中,也需要通过某种专业符号来描述它,这可以帮助我们更好去理解它。算法的描述可以通过自然语言、标准语言、类语言等来实现,他们的优缺点比较如下: (1)自然语言--使用自然语言、随意、方便、易于理解,任何人都能使用。但自然语言描述不严格,具有二义性,这是任何计算机语言所忌讳的。因此使用不当,会在程序中造成逻辑性的错误。 (2)标准程序语言--它的特点与自然语言描述正好相反,非常严格,无二义性,但语言要求太规范,一般人不易掌握。 (3)类语言--介于上述之间,他既接近于自然语言,又不象标准语言那样有着严格的语法规则,而且保证不会出现二义性。所以大家都采用类语言描述算法,本教材采用的是类C语言。 4.顺序表上的基本运算的算法实现: 首先来讨论顺序存储结构。假设线性表中每个元素需占用 c 个存储单元,则线性表中第 i 个元素的存储位置 LOC(ai) 与 i 有如下关系:LOC(ai)=LOC(a1)+(i-1)×c。其中第一个元素 a1 的存储位置 LOC(a1) 通常也称作线性表的起始位置。下面的图形就向大家展示了这种关系。 本新闻共 6页,当前在第 1页 1 2 3 4 5 6 |