数据结构——绪论

1.1  数据结构的基本概念

1数据和数据元素

            数据是人们利用文字符号、数字符号以及其他规定的符号对现实世界的事物及其活动所做的抽象描述。

            表示一个事物的一组数据称作一个数据元素;构成数据元素的数据称作该数据元素的数据项

          数据结构课程在讨论一种类型的数据结构问题时,通常说的是抽象意义上的数据元素,是没有实际含义的。我们把没有实际含义的数据元素称作抽象数据元素

2   数据的逻辑结构

          数据元素之间的相互联系方式称为数据的逻辑结构

         按照数据元素之间的相互联系方式,数据的逻辑结构可分为线性结构、树结构和图结构。

          线性结构的一般定义是:除第一个和最后一个数据元素外每个数据元素只有一个前驱数据元素和一个后继数据元素。

          树结构的一般定义是:除根结点外每个数据元素只有一个前驱数据元素,可有零个或若干个后继数据元素

3数据的存储结构

             任何需要计算机进行管理和处理的数据元素都必须首先按某种方式存储在计算机中。数据元素在计算机中的存储方式称为数据的存储结构

            数据存储结构的基本形式有两种:一种是顺序存储结构,另一种是链式存储结构。

             顺序存储结构是把数据元素存储在一块连续地址空间的内存中,程序设计方法是使用数组。顺序存储结构的特点是,逻辑上相邻的数据元素在物理上也相邻,数据间的逻辑关系表现在数据元素的存储位置关系上。

链式存储结构是用对象的引用把相互直接关联的结点(即直接前驱结点或直接后继结点)链接起来。链式存储结构的特点是,逻辑上相邻的数据元素在物理上(即内存存储位置上)不一定相邻,数据间的逻辑关系表现在结点的链接关系上。下图是包含数据元素a0,a1,…,an-1的线性结构的链式存储结构示意图.其中,上一个结点到下一个结点的箭头表示上一个结点中对象变量域所表示的下一个结点对象。对象变量head表示了链式存储结构中的第一个结点对象。

4    数据的操作

            对一种类型的数进行的某种方法的处理称作数据的操作,一种类型的数据所有的操作集合称作数据的操作集合。

5数据结构课程讨论的内容

          数据结构课程主要讨论线性表、堆栈、队列、串、数组、树、二叉树、图等典型的常用数据结构,在讨论这些典型的常用数据结构时,主要从它们的逻辑结构、存储结构和数据操作三个方面进行分析讨论。


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.2 抽象数据类型

      类型是一组值的集合。

      数据类型是指一个类型和定义在这个类型上的操作集合。

     在数据结构课程中,通常把在已有的数据类型基础上设计新的数据类型的过程称作数据结构设计,在这里,数据结构的含义和数据类型的含义相同。

      抽象数据类型(AbstractData Type, 缩写为ADT)是指一个逻辑概念上的类型和这个类型上的操作集合。

      数据类型和抽象数据类型的不同之处仅仅在于:数据类型指的是高级程序设计语言支持的基本数据类型,而抽象数据类型指的是在基本数据类型支持下用户新设计的数据类型。数据结构课程主要讨论表、堆栈、队列、串、数组、树、二叉树、图等典型的常用数据结构,这些典型的常用数据结构就是一个个不同的抽象数据类型。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.3     算法和算法的时间复杂度

1.3.1 算法

1  算法的定义和算法的表示方法

         算法是描述求解问题方法的操作步骤集合。

         算法要用某种语言来描述。描述算法的语言主要有三种形式:

文字形式:使用文字语言

伪码形式:使用类似于程序设计语言的语言

程序设计语言形式:使用程序设计语言

2算法的性质

      算法满足以下性质:

   (1)输入性:具有零个或若干个输入量;

   (2)输出性:至少产生一个输出或执行一个有意义操作;

   (3)有限性:执行语句的序列是有限的;

   (4)确定性:每一条语句的含义明确,无二义性;

   (5)可执行性:每一条语句都应在有限的时间内完成。

1.3.2   算法设计目标

   算法设计应满足以下五条目标:

    (1)正确性

    (2)可读性

    (3)健壮性

    (4)高时间效率

    (5)高空间效率


1.3.3  算法的时间复杂度分析

 算法的时间效率度量方法

    算法的时间效率反映了算法执行时间的长短。度量一个算法在计算机上的执行时间通常有如下两种方法:

1)事后统计方法。计算机内部均设有计时功能,可设计一组或若干组测试数据,然后分别运行根据不同的算法编制的程序,并比较这些程序的实际运行时间,从而确定算法时间效率的优劣。

2)事前分析方法。用数学方法直接对算法的时间效率进行分析。因为这种分析方法是在计算机上实际运行该算法之前进行的,所以称为事前分析方法。

根据算法编制的程序在计算机上运行时所消耗的时间与下列因素有关:

        a.书写算法的程序设计语言

        b.编译产生的机器语言代码质量

        c.机器执行指令的速度

        d.问题的规模,即算法的时间效率与算法所处理的数据元素个数n的函数关系


2O()函数

           表示算法的时间效率与算法所处理的数据元素个数n函数关系的最常用函数是O()函数(O()读做大O)。该函数表示算法和所处理数据元素个数n的数量级关系。

           [定义]算法的时间复杂度T(n) = O(f(n))当且仅当存在正常数cn0,对所有的n(n ≥n0)满足T(n) ≤c*f(n)

            上述定义表示,算法的时间复杂度T(n)随数据元素个数n的增长率和函数f(n)的增长率在数量级上相同


算法的时间复杂度分析

           分析一个算法中基本语句执行次数和数据元素个数n的函数关系,就可得出该算法的时间复杂度T(n)

指数级时间复杂度的问题

           算法的时间复杂度是衡量一个算法好坏的重要指标。一般来说,具有多项式时间复杂度的算法,是可接受、可实际使用的算法;具有指数时间复杂度的算法,是只有当n足够小时才可使用的算法。

1.4 算法的空间复杂度分析

           算法的空间复杂度分析主要是分析算法在运行时所需要的内存空间的数量级。算法的空间复杂度通常也采用O()函数。

    算法的空间复杂度分析方法和算法的时间复杂度分析方法类同。


1.5   Java语言的工具包

              数据结构课程讨论的数据结构问题都是软件设计的基本结构问题。数据结构课程讨论的基本数据结构都可以设计成通用软件模块(如线性表、堆栈、队列、串、二叉树等)。

     Java类库(即JavaAPI)提供了许多系统定义的包。其中,工具包(java.util包)中给出了包括顺序表、单链表、堆栈、队列、串、二叉树、哈希表等功能丰富、使用方便的类。












你可能感兴趣的:(DATA,数据结构,算法,语言)