网站大量收购独家精品文档,联系QQ:2885784924
  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
表 表 表是函数式编程的一个基本数据结构。 一个包含n个元素的表被写作List(x1,…,xn) 在表与数组之间,有两个重要的不同。 表是不变的—表的元素不能被改变 表是递归的,而数组是扁平的。 表 表的类型 像数组一样,表是单一性的:表的元素必需是相同的类型。 元素类型为T的表被写作scala.List[T]或者List[T] 例: 表的构建 所有的表通过以下方式构建: 空表Nil 构建操作符::(发音为cons): x :: xs 构建一个新的表,头元素为x,后跟表xs。 例如: 右结合 约定:以”:”结尾的操作符具有右结合性。 A :: B :: C被解释为 A::(B::C)。 因此我们往往省略上式中的括号。 例如: 以”:”结尾的操作符不同之处还在于被看作为右手边操作数的方法调用。 所以上面的表达式等价于: 表的操作 所有的列表操作都可以利用下面的三个操作来表达: head 表的第一个元素 tail 除了第一个元素外的所有元素 isEmpty 表为空时为’true’,反之为’false’ 那些操作被定义为表对象的方法。例如: 表的模式 将表使用模式匹配进行解构也是可以得。 Nil Nil常量 p::ps 匹配表的模式:表头匹配p,表尾匹配ps。 List(p1,…,pn) 同p1::…::pn::Nil相同。 例如: 练习 考虑模式 下面的条件哪个更准确的描述了匹配列表的长度L。 表排序 假设我们想以升序的方式排序列表的数字: 排序List(7,3,9,2)的一个方法是,排序表尾List(3,9,2)得到List(2,3,9)。 下一步将表头数字7插入到正确的位置得到List(2,3,7,9)。 这个思想描述了插入排序(Insertion Sort)算法: 练习 在下面定义的???处填入代码完成插入排序: 相对于表的长度N,插入排序算法的最糟糕的时间复杂度是: L=3 * case List() = list(x) case y::ys = if (x=y) x::xs else y:: insert(x,ys) * L=3 * case List() = list(x) case y::ys = if (x=y) x::xs else y:: insert(x,ys) *

文档评论(0)

骨干 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档