5-栈-Scala实现
栈是一种先进后出的一种数据结构,可以用数组和双向链表来实现,这里用数组来实现
package com.atguigu.datastructures.stack
import scala.io.StdIn
object ArrayStackDemo {
def main(args: Array[String]): Unit = {
val stack = new ArrayStack(4)
var key = ""
while (true){
println()
println("push:入栈操作")
println("list:遍历栈")
println("pop:出栈")
println("peek:查看栈顶")
key = StdIn.readLine()
key match {
case "push" =>
println("请输入一个数")
val num =StdIn.readInt()
stack.push(num)
case "list" =>
stack.list()
case "pop" =>
val res = stack.pop()
if (res.isInstanceOf[Exception]){
println(res.asInstanceOf[Exception].getMessage)
}else{
println()
println("取出栈顶的值=%d",res)
}
case "peek" =>
val res = stack.peek()
if (res.isInstanceOf[Exception]){
println(res.asInstanceOf[Exception].getMessage)
}else{
println()
println("栈顶的值=%d",res)
}
}
}
}
}
//使用数组模拟一个栈
class ArrayStack(arrMaxSize:Int){
val maxSize = arrMaxSize
//创建数组
val arr = new Array[Int](maxSize)
//栈顶
var top = -1
//入栈
def push(num:Int):Unit={
if (isFull()){
println("栈满")
return
}
top +=1 //后移一位
arr(top) = num
}
def pop():Any={
if (isEmpty()){
return new Exception("栈空")
}
val res = arr(top)
top -= 1
return res
}
//遍历
def list():Unit={
if (isEmpty()){
println("栈空不能遍历")
return
}
//逆序遍历
for(i <- 0 to top reverse){
printf("arr(%d)=%d\n",i,arr(i))
}
}
//查看栈顶的值,但是不取出
def peek():Any={
if (isEmpty()){
return new Exception("栈空")
}
return arr(top)
}
//判断栈满
def isFull():Boolean={
top == maxSize-1
}
//判断栈空
def isEmpty():Boolean={
top == -1
}
}

浙公网安备 33010602011771号