Scala实现栈结构
Stack Trait
/**
* Copyright (c) 2019 qingzhi.wu ALL Rights Reserved
*
* Project: arithmetic
* Package: stack
* Version: 1.0
* Created by HeartisTiger on 2019/9/15 15:22
*/
trait Stack[E] {
def push(e:E)
def pop():E
def peek():E
def getSize():Int
def isEmpty():Boolean
}
Array Stack
package stack
import array.MyArray
import scala.collection.mutable.ArrayBuffer
import scala.reflect.ClassTag
/**
* Copyright (c) 2019 qingzhi.wu ALL Rights Reserved
*
* Project: arithmetic
* Package: stack
* Version: 1.0
* Created by HeartisTiger on 2019/9/15 15:23
*/
class ArrayStack[E:ClassTag] extends Stack[E] {
private val data = new MyArray[E]()
override def push(e: E): Unit = {
data.addFirst(e)
}
override def pop(): E = {
return data.removeFirst()
}
override def peek(): E = {
return data.get(0)
}
override def getSize(): Int = data.getSize()
override def isEmpty(): Boolean = data.getSize() == 0
def show(): Unit ={
var array = ArrayBuffer[E]()
for(i <- 0 until data.getSize()){
array.append(data.get(i))
}
printf("Size = %d, Pop [%s] Tail \n",getSize(),array.mkString(","))
}
}
Main
package stack
/**
* Copyright (c) 2019 qingzhi.wu ALL Rights Reserved
*
* Project: arithmetic
* Package: stack
* Version: 1.0
* Created by HeartisTiger on 2019/9/15 15:26
*/
object Main {
def main(args: Array[String]): Unit = {
val stack = new ArrayStack[Int]()
for(i <- 1 to 20){
stack.push(i)
}
stack.show()
println(stack.pop())
println(stack.peek())
stack.show()
}
}