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 } }