李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
Scala栈练习
Leefs
2021-04-26 PM
1549℃
0条
# Scala栈练习 ### 一、概念 详情可参考文章:[数据结构学习--栈(一)](https://lilinchao.com/archives/495.html) > 1. 栈(stack)就像弹夹一样,是先入后出的有序列表 > 2. 栈(stack)是限制线性表中元素的插入和删除`只能在线性表的同一端`进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为`栈顶(Top)`,另一端为固定的一端,称为`栈底(Bottom)`。 > 3. 根据堆栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。 **入栈过程** ![21.Scala栈练习01.png](https://lilinchao.com/usr/uploads/2021/04/3810124443.png) **出栈过程** ![21.Scala栈练习02.png](https://lilinchao.com/usr/uploads/2021/04/1251618369.png) ### 二、数组模拟栈 **代码** **object** ```scala import scala.io.StdIn object ArrayStackDemo01 { def main(args: Array[String]): Unit = { //测试栈的基本使用 val arrayStack = new ArrayStackDemo(3) var key = "" while (true) { println("list:表示显示栈的数据") println("exit:表示退出程序") println("push:表示将数据压栈") println("pop:表示将数据弹栈") key = StdIn.readLine() key match { case "list" => arrayStack.list() case "exit" => System.exit(0) case "push" => { print("请输入一个数据(Int类型):") val n = StdIn.readInt() arrayStack.push(n) } case "pop" => arrayStack.pop() case default => println("输入格式错误,请重新输入!") } } } } ``` **class** ```scala class ArrayStackDemo(size:Int) { //栈的大小 val maxSize =size var stack = new Array[Int](maxSize) //栈顶初始化为-1 var top = -1 //判断是否栈满 def isFull(): Boolean ={ top == maxSize - 1 } //判断是否栈空 def isEmpty():Boolean = { top == -1 } /** * 数据压栈: * 1.判断数组是否满 * 2.将栈顶指针向上移动一位 * 3.将数据存入数组中 */ def push(value:Int):Unit = { if(isFull()){ println("栈中元素已满,不能在存入栈中") return } top +=1 stack(top) = value } /** * 数据弹出栈: * 1.判断数组是否为空 * 2.取出栈顶数据 * 3.将栈顶指针向下移动一位 * 4.返回取出的值 */ def pop():Any = { if(isEmpty()){ println("栈中元素为空!") return } val value = stack(top) top -= 1 printf("value:%d",value) println() return value } /** * 遍历栈,从栈顶向下逐个取出数据 * 对数组进行反向遍历reverse */ def list():Unit = { if(isEmpty()){ println("栈中元素为空!") return } for(i <- 0 to top reverse){ printf("stack[%d]=%d\n",i,stack(i)) } } } ```
标签:
数据结构
,
Scala
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/1240.html
上一篇
Scala单向链表练习
下一篇
一、Stream流概念介绍
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Python
二叉树
Redis
Sentinel
字符串
并发编程
Quartz
SpringCloudAlibaba
Flink
NIO
Flume
Spark
算法
Http
排序
查找
并发线程
正则表达式
人工智能
JavaScript
Typora
数据结构
Java工具类
JavaWEB项目搭建
Java阻塞队列
Nacos
高并发
哈希表
Golang
DataX
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭