前言
本文主要介绍的是关于Kotlin 实现基本的数据结构 Stack 和 LinkedList,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
Stack
Java中Stack由List实现,Kotlin中有MutableList,Stack类的基本定义如下,继承Iterator为了迭代遍历:
class Stack<T : Comparable<T>>(list : MutableList<T>) : Iterator<T>
基本属性实现
// stack的count var itCounter: Int = 0 // stack内部实现为MutableList var items: MutableList<T> = list // 判断stack是否为null fun isEmpty(): Boolean = this.items.isEmpty() // 获取stack的items counte fun count(): Int = this.items.count() // tostring操作 override fun toString(): String { return this.items.toString() }
基本操作实现
// pop操作,弹出栈顶元素即链表最末端元素,可为null fun pop(): T? { if (this.isEmpty()) { return null } else { val item = this.items.count() - 1 return this.items.removeAt(item) } } // 只读操作,不弹出 fun peek(): T? { if (isEmpty()) { return null } else { return this.items[this.items.count() - 1] } } // hasNext操作 override fun hasNext(): Boolean { val hasNext = itCounter < count() if (!hasNext) itCounter = 0 return hasNext } // 取next元素 override fun next(): T { if (hasNext()){ val topPos : Int = (count() - 1) - itCounter itCounter++ return this.items[topPos] }else{ throw NoSuchElementException("No such element") // 异常不用new哦 } }
LinkedList
LinkedList的实现需要Node,然后实现first、last、count以及append等操作。
Node 定义
class Node<T>(value : T){ var value : T = value // value可以是任意类型 var next : Node<T>? = null // next可以为null var previous : Node<T>? = null // pre也可以为null }
基本操作一
// 头结点,引导性作用 var head : Node<T>?= null // 取决于head是否为null var isEmpty : Boolean = head == null // 获取first fun first() : Node<T>? = head // 获取last结点,需要一直next才能到达last结点 fun last() : Node<T>?{ var node = head if (node != null){ while (node?.next != null){ node = node?.next } return node }else{ return null } }
基本操作二
// 获取count,同样通过next计算 fun count():Int { var node = head if (node != null){ var counter = 1 while (node?.next != null){ node = node?.next counter += 1 } return counter } else { return 0 } } // append操作,在last结点上append fun append(value : T){ var newNode = Node(value) // 获取当前节点的最后一个节点 var lastNode = this.last() if (lastNode != null){ newNode.previous = lastNode lastNode.next = newNode }else{ head = newNode } } // 删除操作 fun removeNode(node : Node<T>) : T{ val prev = node.previous val next = node.next if (prev != null){ prev.next = next }else{ head = next } next?.previous = prev node.previous = null // 将断开的节点前后置null node.next = null return node.value // 返回删除节点的value }
以上,用kotlin实现基本的数据结构stack和linkedlist.
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
本文向大家介绍JS栈stack类的实现与使用方法示例,包括了JS栈stack类的实现与使用方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS栈stack类的实现与使用方法。分享给大家供大家参考,具体如下: 栈是一种“先进后出”的数据结构,原理如下图所示: 示例代码: 这里使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/cod
本文向大家介绍Java Stack search()方法与示例,包括了Java Stack search()方法与示例的使用技巧和注意事项,需要的朋友参考一下 堆栈类方法 search()方法在java.util包中可用。 search()方法用于将给定对象(ob)搜索到堆栈上,并在给定对象存在时返回其位置。 search()方法是一种非静态方法,只能通过类对象访问,如果尝试使用类名称访问该方法,
本文向大家介绍Java Stack pop()方法与示例,包括了Java Stack pop()方法与示例的使用技巧和注意事项,需要的朋友参考一下 堆栈类方法 pop()方法在java.util包中可用。 pop()方法用于从此Stack中返回顶部元素,并通过删除来检索元素。 pop()方法是一种非静态方法,只能通过类对象访问,如果尝试使用类名称访问该方法,则会收到错误消息。 在返回top元素时,
本文向大家介绍Java Stack peek()方法与示例,包括了Java Stack peek()方法与示例的使用技巧和注意事项,需要的朋友参考一下 堆栈类方法 peek()方法在java.util包中可用。 peek()方法用于从此Stack中返回顶部元素,并且它不删除就检索元素。 peek()方法是一种非静态方法,只能通过类对象访问,如果尝试使用类名访问该方法,则会收到错误消息。 peek(
本文向大家介绍Java Stack empty()方法与示例,包括了Java Stack empty()方法与示例的使用技巧和注意事项,需要的朋友参考一下 堆栈类方法 empty()方法在java.util包中可用。 empty()方法用于检查此堆栈是否为空。 empty()方法是一个非静态方法,只能通过类对象访问,如果尝试使用类名称访问该方法,则会收到错误消息。 在检查空状态时,empty()方
本文向大家介绍Kotlin实现静态方法,包括了Kotlin实现静态方法的使用技巧和注意事项,需要的朋友参考一下 工具类 全都是静态方法的情况 : class 类名 改为 object 类名 即可 普通静态方法 一部分是静态方法的情况 : 将方法用 companion object { } 包裹即可 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。