摘 要:
关键词: “数据结构+算法=程序”,这就说明程序设计的实质就是对确定的问题选择一种合适的数据结构,加上设计一种好的算法。由此可见,数据结构在程序设计中有着十分重要的地位。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。因为这其中的“关系”,指的是数据元素之间的逻辑关系,因此数据结构又称为数据的逻辑结构。而相对于逻辑结构这个比较抽象的概念,我们将数据结构在计算机中的表示又称为数据的存储结构。 建立问题的数学模型,进而设计问题的算法,直至编出程序并进行调试通过,这就是我们解决信息学问题的一般步骤。我们要建立问题的数学模型,必须首先找出问题中各对象之间的关系,也就是确定所使用的逻辑结构;同时,设计算法和程序实现的过程,必须确定如何实现对各个对象的操作,而操作的方法是决定于数据所采用的存储结构的。因此,数据逻辑结构和存储结构的好坏,将直接影响到程序的效率。 在程序设计中,逻辑结构的选用就是要分析题目中的数据元素之间的关系,并根据这些特定关系来选用合适的逻辑结构以实现对问题的数学描述,进一步解决问题。逻辑结构实际上是用数学的方法来描述问题中所涉及的操作对象及对象之间的关系,将操作对象抽象为数学元素,将对象之间的复杂关系用数学语言描述出来。 根据数据元素之间关系的不同特性,通常有以下四种基本逻辑结构:集合、线性结构、树形结构、图状(网状)结构。这四种结构中,除了集合中的数据元素之间只有“同属于一个集合”的关系外,其它三种结构数据元素之间分别为“一对一”、“一对多”、“多对多”的关系。 因此,在选择逻辑结构之前,我们应首先把题目中的操作对象和对象之间的关系分析清楚,然后再根据这些关系的特点来合理的选用逻辑结构。尤其是在某些复杂的问题中,数据之间的关系相当复杂,且选用不同逻辑结构都可以解决这一问题,但选用不同逻辑结构实现的算法效率大不一样。所以,在解决问题的过程中,选择合理的逻辑结构是相当重要的环节。 我们平常使用数据结构,往往只将其作为建立模型和算法实现的工具,而没有考虑这种工具对程序效率所产生的影响。信息学问题随着难度的不断增大,对算法时空效率的要求也越来越高,而算法的时空效率,在很大程度上都受到了数据结构的制约。随着数据结构的不断发展,人们对数据结构的认识也不断深入。本文只是对数据结构进行了初步的探讨,要对数据结构进行全面的了解和掌握,还需要我们更进一步的进行分析和总结。 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 同时,链表是数据结构中的一个难点,也是数据结构中的一个重要组成部分。它对数据结构中的其他知识点的理解具有重要的意义,而链表的创建时链表算法中的重点,很多关于数据结构的书籍都阐述了关于链表的创建方法,但都没有一个统一、全面的算法。通过多年对链表的研究发现,在链表的创建过程中,总是存在一定的规律。即每个链表都由若干个离散的节点组成,这些节点在创建链表时总是做个生成的,从而把这些生成的节点逐个地链接起来,形成链表。 因此,在算法中之只需要考虑哲学节点的连接方式与连接书怒即可。在此从这些节点的链接顺序进行分析与归纳,以单行链表为例对链表的创建方法总结为一线3种,即顺序创建法、逆序创建发、有序创建发。 当然,在创建链表之前,也要对链表的特点进行全面的掌握。因为所创建的链表要符合这些特点,也便于对链表创建算法的实现。 链表有一个“头指针”,它存放一个地址,该地址指向链表中的第一个节点,第一个节点又指向第二个节点,知道最后一个节点。该节点不再指向其他机诶到哪,它称为“表尾“,它的地址部分存放一个”NULL“(空地址),链表到此结束。链表中每个结点都包括两个部分:用户需要用的实际数据和下一个结点的地址。 链表的一个重要特点是插入、删除操作灵活方便,不需移动结点,只需改变结点中指针域的值即可。而数组由于用存储单元的邻接性体现数组中元素的逻辑顺序关系,因此对数组进行插入和删除运算时,可能需要移动大量的元素,以保持这种物理和逻辑的一致性。如数组中有m个元素,往第i(i