- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章:数据结构导论 目录 8-1 数据结构的概念 要想成为一个专业的开发人员,至少需要以下3个条件: (1)能够熟练地选择和设计各种数据结构和算法。 (2)至少要能够熟练地掌握一门程序设计语言。 (3)熟知所涉及的相关应用领域的知识。 其中,后两个条件比较容易实现,而第一个条件则需要花相当多时间和精力才能够达到,它是区分一个程序设计人员水平高低的重要标志,数据结构贯穿程序设计的始终,缺乏数据结构和算法的深厚功底,很难设计出高水平的具有专业水准的应用程序。 数据结构是在整个计算机科学与技术领域上广泛被使用的术语。它用来反映一个数据的内部构成,即一个数据由哪些成分数据构成,以什么方式构成,呈什么结构。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安排。数据结构是数据存在的形式。 该表的存储结构则是指用计算机语言如何表示结点之间的这种关系,即表中的结点是顺序邻接地存储在一片连续的单元中,还是用指针将这些结点链接在一起?在这张表中,可能要经常查看某一学生的成绩,当学生退学时要删除相应的结点,进来新学生时要增加结点。究竟怎样进行查找、删除、插入,这就是数据的运算问题。搞清楚了上述的3个问题,也就弄清了学生成绩表这个数据结构。 数据结构定义为: 按某种逻辑关系组织起来的一批数据,应用计算机语言,按一定的存储方式将它们存储在计算机的存储器中,并在这些数据上定义了一个运算的集合,就叫做一个数据结构。 8-2 数据结构的应用实例 在计算机发展初期,人们使用计算机主要是处理数值计算问题。由于当时所涉及的运算对象是简单的整型、实型或布尔型数据,所以程序设计者的主要精力是集中于程序设计的技巧上,而无需重视数据结构。随着计算机应用领域的扩大和软硬件的发展,“非数值问题”越来越显得重要。根据统计,当今处理非数值问题占用了90%以上的机器时间,这类问题涉及到的数据结构更为复杂,数据元素之间的相互关系一般无法用数学方程式加以描述。 解决此类问题的关键已不再是分析数学和计算方法,而是能设计出合适的数据结构,才能有效地解决问题。 从提出一个实际问题到计算机解出答案需要经过下列步骤: 首先从实际问题抽象出一个数学模型, 然后设计一个解此数学模型的算法, 最后编写程序、进行测试、调试直至得到最终解答。 寻求数学模型的实质是分析问题,从中提取操作的对象以及这些操作对象之间含有的关系,然后用数学语言加以描述。例如,在分析了一个物理现象或化学现象变化的规律之后可以得到一组代数方程或微分方程。然而,更多的问题无法用数学方程加以描述。 【例8-1】电话号码查询系统 编一个查询某个城市或单位的私人电话号码的程序。要求对任意给出的一个姓名,若该人有电话号码,则迅速找到其电话号码;否则指出该人没有电话号码。 要解此问题首先构造一张电话号码登记表。表中每个结点存放两个数据项:姓名和电话号码。 但对一个有上百万私人电话的城市就不实用了。若这张表是按姓氏排列的,则可另造一张姓氏索引表。查找过程是先在索引表中查对姓氏,然后根据索引表中的地址到电话号码登记表中核查姓名,这样查找登记表时就无需查找其他姓氏的名字了。因此,在这种新的结构上产生的查找算法就更为有效。 【例8-2】田径赛的时间安排问题 设某校的田径选拔赛共设6个项目的比赛,即跳高、跳远、标枪、铅球、100米和200米短跑,规定每个选手至多参加3个项目的比赛。现有5名选手报名参赛,选手所选择的项目如表8-2所示。 例8-3】多叉路口交通灯的管理问题。 8-3 数据结构的具体分类 数据结构分为两大类: 线性结构和非线性结构。 线性结构的逻辑特征是:有且仅有一个开始结点和一个终端结点,并且所有结点最多只有一个直接前趋和一个直接后继。结点和结点的关系是一对一。 非线性结构的逻辑特征是一个结点可能有多个直接前趋和直接后继。结点和结点的关系是一对多或多对多。 8-3-1 线性表 线性表的逻辑特征是在非空的线性表中,有且仅有一个开始结点a1,它没有直接前趋,而仅有一个直接后继a2;有且仅有一个终端结点an,它没有直接后继,而仅有一个直接前趋an-1;其余的内部结点ai(2≤i≤n-1)都有且仅有一个直接前趋ai-1和一个直接后继a i+1。很明显,线性表是一种典型的线性结构。例如英文字母表(A,B,C,…,Z)是线性表,表中的每个字母就是一个数据元素。 一副扑克的点数(2,3,4,…,J,Q,K,A)也是线性表,其中每一张牌的点数是一个数据元素。 8-3-2 栈 栈是指能在某一端插入和删除的特殊线性表。例如用桶堆积物品,先堆进来的压在底下,随后一件一件往堆。取走时,只能从上面一件一件取。 栈也称为后进先出表(LIFO表)
文档评论(0)