博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类型参数化
阅读量:4326 次
发布时间:2019-06-06

本文共 1507 字,大约阅读时间需要 5 分钟。

第19章

queue函数队列

head:返回队列第一个元素;tail 返回除第一个元素之外的队列;append返回尾部添加了指定元素的新队列

class SlowAppendShow[T](elems: List[T]) {  def head = elems.head  def tail = new SlowAppendShow(elems.tail)  def append(x: T) = new SlowAppendShow(elems::: List(x))}

2种表达方式效率都不高

class SlowAppendShow1[T](smele: List[T]) {  def head = smele.last  def tail = new SlowAppendShow1(smele.init)  def append(x: T) = new SlowAppendShow1(x:: smele)}

 高效率的解决办法:

class Queue[T]{  private val leading: List[T] = Nil  private val tariling: List[T] = Nil  private def mirror = {      if (leading.isEmpty)          new Queue{tariling.reverse}      else       this    def head = mirror.leading.head    def tail = {      val q = mirror      new Queue(q.leading.tail, q.tariling)    }    def append(x: T) =      new Queue(leading, x:: tariling)  }}

 最终解决方案

trait Queue[T] {  def head: T  def tail :Queue[T]  def append(x: T):Queue[T]}
object Queue{  def apply[T](xs: T*): Queue[T] =    new QueuImpml[T](xs.toList, Nil)  private class QueueImpl[T](    private val leading: List[T] = Nil,    private val tarining: List[T] = Nil    ) extends Queue[T] {      def mirror =        if(leading.isEmpty)            new QueueImpl[T](tarining.reverse, Nil)            else          this     def head : T = mirror.leading.head     def tail: QueueImpl[T] = {       val q = mirror       new QueueImpl[T](q.leading.tail, q.tarining)     }    def append(x: T) =       new QueueImpl[T](leading, x:: tarining)  }}

变化型注解:

下界:

转载于:https://www.cnblogs.com/zhanggl/p/4986145.html

你可能感兴趣的文章
为Sublime Text 3设置优雅的字体
查看>>
Eclipse使用Jetty(转)
查看>>
vim命令收集(持续中)
查看>>
Zynq -- 启动过程
查看>>
206. Reverse Linked List(LeetCode)
查看>>
day 04 Java并发多线程
查看>>
Java定时任务调度工具Timer Quartz
查看>>
WPF,Silverlight与XAML读书笔记第三十五 - 可视化效果之图像
查看>>
Nginx中location配置[转]
查看>>
编程重点
查看>>
00-A-springmvc分布式项目项目结构
查看>>
vs调试时报503错误
查看>>
SVN使用&CVS使用
查看>>
redis
查看>>
Oracle存储过程中如何使用游标
查看>>
揭开NodeJS的神秘面纱!
查看>>
Number Triangles
查看>>
Ext分页实现(前台与后台)
查看>>
转 迭代器模式
查看>>
CYQ.Data V5 MAction新增加SetExpression方法说明
查看>>