- 1、本文档共73页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[2018年最新整理]3数据结构
数据结构原理 使用原则 尽可能使用简单的数据结构,越简单越不容易出错 当问题最大输入规模确定时,或不限定但比较宽松时,使用静态的数据结构(当问题考查使用动态数据结构能力时,给出的限定会有相应的暗示) 尽可能使用程序设计语言中内置的数据类型 数据结构基础 逻辑结构(数据之间的逻辑关系) 线性结构:特点是:有唯一的“第一元素”。除了最后一个元素之外,每一个元素都有唯一的“上一个元素”和“下一个元素”。这是最简单的逻辑结构。 树型结构:具有层次性,看起来像是一棵倒立的“树”。在树状结构中,强调的是结点之间的关系。 网状结构 任意两个结点之间都可能有联系 G = (V,E),其中G为图,V为结点集,E为边集。 例如:Internet的拓扑结构 逻辑结构的物理实现(物理结构) 线性结构的物理实现 数组:连续方式,绝对地址定位,访问方便,速度快;插入和删除不方便 链表:不连续方式,相对定位,访问不方便,速度慢;插入和删除方便。 线性结构反映到线性结构(内存) 逻辑结构的物理实现(物理结构) 树 二叉树: 链式存储:从根开始遍历,链表中指针指示树中的关系。 数组存储:树中的关系利用数组下标的关系计算得出。 其它树: 孩子兄弟表示法转换成二叉树 逻辑结构的物理实现(物理结构) 图 邻接矩阵(adjacency matrix) 直接记录结点之间是否有边,方便于直接判断两个点之间是否有边;缺点:存储空间占用大,用于稠密图。(写出的算法相对比较简单,好理解) 邻接表(adjacency list) 为每个结点做一个链表,记录与之相邻的所有结点。用于稀疏图可以降低存储空间。 外部特性和内部结构 物理结构、逻辑结构中的某些属性可以被外界所感知,而另外一些属性却是不可见的。 数据结构包含外部特性和内部结构两个方面。外部特性决定了它将如何被使用,而内部结构决定了它的原理和具体实现。 初学数据结构时,可以更多的关注它们的外部特性,在熟练使用并体会到数据结构的好处之后再学习它们的内部结构,并根据其中的设计思想创造出新的数据结构。 有一只自动储钱罐,它有一个孔和一个按钮。存钱的时候,你可以从小孔往里面投一枚硬币;取钱的时候,只要按一下按钮,面值最大的硬币就会从孔里掉出来。 自动储钱罐的设计者告诉你:钱罐里有一个很小的机器人,每次按下按钮的时候,它就从钱罐里找出最值钱的一枚,从孔里扔出来。如果硬币有很多的话,从一大堆钱里找到最值钱的硬币是需要花时间的,所以可能你按下按钮以后需要等待几分钟,让小机器人慢慢找。 小机器人的一种实现方式 当你扔一枚硬币进来的时候,它什么都不做,自己睡大觉; 当你按按钮的时候,它慌了,赶紧找钱。它先随便挑出一个硬币拿在手里,然后把其他所有硬币的看一遍,如果发现更值钱的,就用把手里的硬币换掉,最后手里拿着的就是最值钱的硬币,然后从孔里扔出去。 void new_coin () { zzzZZZ (); } void delete_max () { int i; int best = 0; for(i = 1; i coin_count ; i ++) if( coin [i] coin [ best ]) best = i; throw_away ( best ); } coin[i]表示第i枚硬币,throw away(i)表示把第i枚硬币扔出去且终止程序 由于coin是无序数组,我们把这种方法称为无序数组实现法。 这个钱罐“添加硬币”很快(小机器人啥都不做),找最大面值却很慢。如果小机器人检查一枚硬币的时间是0.01秒,那么有100个硬币时需要1秒,有10,000个硬币时需要100秒( 约两分钟) , 而1,000,000个硬币时就需要10,000秒(约2.8小时)! 小机器人的另一种实现 拿几个不同的小桶,每个桶装一种面值的硬币。假设一共有1元、5角、1角、5分、2分和1分共6种面值的硬币,则只需要六个桶。 当来了一枚新硬币时,小机器人把它放到相应的盒子中; 需要找钱时,小机器人只需要看1元的盒子里有没有硬币,有的话随便拿一个扔出去;如果没有的话再看5角的盒子有没有硬币,有的话随便拿一个扔出去。不管有多少硬币,只要盒子装得下,总是最多只需要开6次桶即可,即使每开一个桶需要5秒钟,有1,000,000个硬币时最多也只需要半分钟,比刚才的2.8小时快多了。 void new_coin (int value ) { count [ value ]++; } void delete_max () { int i; for(i = 1; i = 6; i ++) if( count [i ] 0) throw_away (i); } 其中count[i]表示第i种面值的桶里有多少硬币,th
您可能关注的文档
最近下载
- 武汉市2025届高中毕业生四月调研考试 英语试卷(含答案详解).pdf
- 硕士研究生论文的选题与写作.ppt
- 2019年7月安徽省砀山县事业单位幼儿教师招聘考试《幼儿保教知识与能力》真题试卷(含答案).pdf VIP
- 确保室内空气质量的施工方案与技术措施.pdf
- 中小银行上云趋势研究分析报告 2024.pptx
- 证券从业人员证券投资基金基础知识题库与答案.doc
- 小学家长会英语老师课件.pptx VIP
- 第七单元《红楼梦》薛宝钗、林黛玉人物形象赏析 公开课一等奖创新教案统编版高中语文必修下册.docx VIP
- 最新部编版五年级下册语文单元教材分析(全册) .pdf VIP
- 春季学期《工业控制网络》试题.doc
文档评论(0)