基于java的数据结构学习——数组实现的栈以及简单应用
栈 Stack
- 栈是一种线性结构
- 相比数组,栈对应的操作是数组的子集
- 只能从一端添加元素,也只能从一端取出元素
- 这一端称为栈顶
- 栈是一种后进先出的数据结构
栈的应用
- 无处不在的Undo操作(撤销)
- 括号匹配(编译器)
- 程序调用的系统栈
funA(){ 1 ... 2 B() 3 ... } |
funB(){ 1 ... 2 C() 3 ... } |
funC(){ 1 ... 2 ... 3 ... } |
栈的实现及复杂度分析
Stack<E> <---implement--- ArrayStack<E>
- void push(E) O(1) 均摊
- E pop() O(1) 均摊
- E peek() O(1)
- int getSize() O(1)
- boolean isEmpty() O(1)
实现源码:
public class ArrayStack<E> implements Stack<E>{private Array<E> array;// 有参构造public ArrayStack(int capacity){array = new Array<>(capacity);}// 默认构造public ArrayStack(){this(10);}// 判断栈是否为空@Overridepublic boolean isEmpty(){return array.isEmpty();}// 判断栈是否已满public boolean isFull(){return array.isFull();}// 获取栈的容量@Overridepublic int getCapacity(){return array.getCapacity();}// 获取栈内元素个数@Overridepublic int getSize(){return array.getSize();}// 查看栈顶元素@Overridepublic E peek(){return array.getLast();}// 栈顶元素出栈@Overridepublic E pop(){return array.removeLast();}// 入栈@Overridepublic void push(E e){array.addLast(e);}@Overridepublic String toString(){StringBuilder res = new StringBuilder();res.append(String.format("Stack Size = %d, Capacity = %d\n", array.getSize(), array.getCapacity()));res.append("Stack [");for (int i = 0; i < array.getSize(); i++) {res.append(array.get(i));if (i != array.getSize() - 1)res.append(", ");}res.append("] top");return res.toString();}public static void main(String[] args){ArrayStack<Integer> stack = new ArrayStack<>();for (int i = 0; i < 10; ++i) {stack.push(i);System.out.println(stack);if (i % 3 == 2) {stack.pop();System.out.println(stack);}}}
}
基于java的数据结构学习——数组实现的栈以及简单应用相关推荐
- 基于java的数据结构学习——数组实现的栈以及简单应用C++实现
基于java的数据结构学习--数组实现的栈以及简单应用的 C++ 实现 源码: // // Created by PC-Saw on 2019/1/3. //#ifndef DATA_STRUCTUR ...
- 基于java的数据结构学习——数组实现的队列和循环队列及性能对比
队列 Queue 队列也是一种线性结构 相比数组,队列对应的操作是数组的子集 只能从一端(队尾)添加元素,只能从另一端(队首)取出元素 队列是一种先进先出的数据结构 队列的实现及复杂度分析 Queue ...
- 基于java的数据结构学习——动态数组C++类模板(含拷贝构造,重载常见运算符)
之前实现了java的动态数组,试着写了个C++版的,同样对时间复杂度振荡进行了处理.纯手打,代码如下 : // // Created by PC-Saw on 2018/12/19. //#ifnde ...
- 基于java的数据结构学习——泛型动态数组的封装
public class Array<E> {private E[] data;private int size;// 构造函数public Array(int Capacity){dat ...
- ndarray python 映射_NDArray — 基于Java的N维数组工具
前言 随着数据科学在生产中的应用逐步增加,使用N维数组灵活的表达数据变得愈发重要.我们可以将过去数据科学运算中的多维循环嵌套运算简化为简单几行.由于进一步释放了计算并行能力,这几行简单的代码运算速度也 ...
- Java版数据结构之数组模拟环形队列demo
Java版数据结构之数组模拟环形队列demo 我的代码仓库:https://github.com/zhuangbinan/datastructure 类 CircleArray package clu ...
- 基于JAVA计算机在线学习管理系统-计算机毕业设计源码+系统+mysql数据库+lw文档+部署
基于JAVA计算机在线学习管理系统-计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA计算机在线学习管理系统-计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技 ...
- 基于Java毕业设计在线学习平台源码+系统+mysql+lw文档+部署软件
基于Java毕业设计在线学习平台源码+系统+mysql+lw文档+部署软件 基于Java毕业设计在线学习平台源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...
- go语言基础数据结构学习---- 数组, 列表(list)和切片(slice)
go语言基础数据结构学习–> 数组, 列表(list)和切片(slice) go 语言中的 数组是类型相同的元素的集合, 列表是双链表的容器, 可以添加不同类型的数据切片是对现有数组的引用, 比 ...
最新文章
- 《学习之道》第十三章自己也要总结
- linux - svn命令操作使用随笔svn import
- 中文课程!台大李宏毅机器学习公开课2019版上线
- 字符串匹配的Boyer-Moore算法
- @Controller,@Service,@Repository,@Component详解
- JavaScript高级程序设计学习笔记第二十章--JSON
- java 2分钟_java开发中的那些事(5)--------一点经历,败给2分钟的2个小时
- Qt实践| HTTP知识点-Qt填充referer请求头盗取图片
- 有什么办法可以判断页面是静态还是动态?_你知道seo到底是什么吗?该怎么优化?...
- 面试题 数组长度可否赋值
- Ultrabook是什么意思
- 新装主机测试性能软件,装机必看 如何快速测试电脑性能?
- 【零基础】入门51单片机图文教程(Proteus+Keil)
- PHPWord替换word模板内容时,存在表格,且不确定表格行数的处理方式
- 数据分析:大数据时代的必备技能之Power BI
- R语言中Axis()函数的参数详解
- 戒骄戒躁,笃实前行;
- 80老翁谈人生(187):老翁为北大排名而自豪
- 在HTML中制作贪吃蛇游戏
- ZDMS0.8/30S-RS55/EX防爆型自动跟踪定位射流灭火装置
热门文章
- 微信公众平台网站开发JS_SDK遇到的bug——wx.config注册提示成功,但部分接口注册失败问题
- leetcode383. 赎金信
- leetcode48. 旋转图像
- 终于,我读懂了所有Java集合——queue篇
- leetcode206 反转链表
- python基础技巧总结(一)
- 根据当前docker容器生成镜像提交到远端服务器
- 数据结构和算法(01)--- 算法复杂度
- 开封高级高考2021成绩查询,2021开封市地区高考成绩排名查询,开封市高考各高中成绩喜报榜单...
- java mvc 菜鸟_【java框架】SpringMVC(1)--SpringMVC入门