首页 理论教育 数据结构:Java语言描述的算法选择与效率

数据结构:Java语言描述的算法选择与效率

时间:2023-11-09 理论教育 版权反馈
【摘要】:由于采用了新的结构,所以就可写出一个完全不相同的算法。上述的学生通讯录就是一个数据结构问题。从中可以看到,计算机算法与数据的结构密切相关,算法无不依附于具体的数据结构,所以数据结构直接关系到算法的选择和效率。有什么样的影响?也就是说,数据结构还需要给出每种结构类型所定义的各种运算的算法。通过以上讨论,可以直观地认为:数据结构是一门研究程序设计中计算机操作的对象及它们之间关系和运算的学科。

数据结构:Java语言描述的算法选择与效率

什么是数据结构?这是一个难以直接回答的问题。一般来说,用计算机解决一个具体问题时,需要经过下列几个步骤:首先从具体问题中抽象出一个适当的数学模型,然后设计一个能解此数学模型的算法(Algorithm),最后编出程序,进行测试,并调整程序直至得到最终解答。寻求数学模型的实质是分析问题,从具体问题中提取操作的对象,并找出这些操作对象之间的关系,然后用数学语言加以描述。为了说明这个问题,首先举一个例子,然后给出明确的含义。

假定有一个学生通讯录,该通讯录记录了某校全体学生的姓名和相应的住址,现在要写一个算法,要求是:当给定任何一个学生的姓名时,该算法能够查出该学生的住址。这样一个算法的设计,将完全依赖于通讯录中的学生姓名及相应的住址是如何组织的,以及计算机是怎样存储通讯录中的信息的。

如果通讯录中的学生姓名是随意排列的,其次序没有任何规律,那么当给定一个姓名时,则只能对通讯录从头开始逐个与给定的姓名相比较,顺序查对,直至找到所给定的姓名为止。这种方法相当费时,效率也很低。

然而,如果对学生通讯录进行适当的组织,将学生按所在班级来排列,并且再建一个附加的索引表,这个表可用来登记每个班级学生的姓名在通讯录中起始处的位置,这样情况将大为改善。这时,当要查找某学生的住址时,可先从索引表中查到该学生所在班级的学生姓名是从何处起始的,而后从起始处开始查找,而不必去查看其他班级学生的姓名。由于采用了新的结构,所以就可写出一个完全不相同的算法。

上述的学生通讯录就是一个数据结构问题。从中可以看到,计算机算法与数据的结构密切相关,算法无不依附于具体的数据结构,所以数据结构直接关系到算法的选择和效率。(www.xing528.com)

下面再对学生通讯录做进一步讨论。当有新生入学时,通讯录需要添加新学生的姓名和相应的住址;当毕业生离校时,应从通讯录中删除毕业生的姓名和相应的住址,这就要求在已安排好的结构上进行插入(Insert)和删除(Delete)操作。对于一种具体的结构,如何实现插入和删除?把要添加的学生姓名和相应的住址插入前头还是末尾,或是中间某个合适的位置上?插入后对原有的数据是否有影响?有什么样的影响?删除某学生的姓名和相应的住址后,其他数据(学生的姓名和相应的住址)是否要移动?若需要移动,应如何移动?这一系列的问题说明,为适应数据增加和减少的需要,还必须对数据结构定义一些运算。上述只涉及两种运算,即插入运算和删除运算。当然,还有一些其他可能的运算,如学生搬家后住址变了,为适应这种需要,就应该定义修改(Modify)运算等。

这些运算显然是由计算机来完成的,所以这就要设计相应的插入、删除和修改的算法。也就是说,数据结构还需要给出每种结构类型所定义的各种运算的算法。

通过以上讨论,可以直观地认为:数据结构是一门研究程序设计中计算机操作的对象及它们之间关系和运算的学科。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈