二 基于java动态数组手写栈
package dataStucture2.stack;
import dataStucture2.array.MyDynamicArray;
/**
* 基于动态数组手写栈
* 设计时,栈中仅栈顶对用户可见
*
* @param <E>
*/
public class MyArrayStack<E> implements Stack<E> {
MyDynamicArray<E> array;
//有参构造
public MyArrayStack(int capacity) {
array = new MyDynamicArray<>(capacity);
}
//无参构造
public MyArrayStack() {
array = new MyDynamicArray<>();
}
@Override
//获取栈中元素个数
public int getSize(){
return array.getSize();
}
@Override
//判断栈是否为空
public boolean isEmpty(){
return array.isEmpty();
}
//获取栈容量
public int getCapacity(){
return array.getCapacity();
}
/*
* 基于动态数组的入栈和出栈:
* last in first out
* 后入先出 ,压栈 addLast,出栈removeLast,后添加的先取出来
* (non-Javadoc)
* @see dataStucture2.stack.Stack#push(java.lang.Object)
*/
@Override
//压栈
public void push(E e) {
array.addLast(e);
}
@Override
//出栈,后入先出,后添加的先取出来
public E pop( ) {
return array.removeLast();
}
@Override
//获取栈顶元素
public E peek() {
return array.getLast();
}
@Override
//打印栈
public String toString() {
StringBuilder res = new StringBuilder();
res.append("Stack: ");
res.append("[");
for(int i = 0 ; i < array.getSize() ; i++){
res.append(i);
if(i != array.getSize() -1){
res.append(", ");
}
}
//提醒用户那里是栈顶
res.append("] top");
return res.toString();
}
}
栈的时间复杂度简单分析:
补录:此处后来发现一个解释错误
入栈和出栈操作的时间复杂度之所以是O(1),并非是因为根据索引,而是因为addLast和removeLast是操作在数组末尾的元素,之后无需其他移动元素,所以是O(1)

二 基于java动态数组手写栈的更多相关文章
- 三 基于Java动态数组手写队列
手写队列: package dataStucture2.stackandqueue; import com.lt.datastructure.MaxHeap.Queue; import dataStu ...
- 基于tensorflow的MNIST手写数字识别(二)--入门篇
http://www.jianshu.com/p/4195577585e6 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型 基于tensorflow的MNIST手写数字识 ...
- <数据结构系列1>封装自己的数组——手写动态泛型数组(简化版ArrayList)
哈哈,距离上一次写博客已经快过去半个月了,这这这,好像有点慢啊,话不多说,开始我们的手写动态泛型数组 首先是我们自己写一个自己的动态数组类,代码如下所示: public class Array< ...
- 基于TensorFlow的MNIST手写数字识别-初级
一:MNIST数据集 下载地址 MNIST是一个包含很多手写数字图片的数据集,一共4个二进制压缩文件 分别是test set images,test set labels,training se ...
- dfs手写栈模板
在竞赛中如果系统栈很小的话,过深的递归会让栈溢出,这个时候我们就要自己手写栈,将递归转化成手工栈. 方法其实也很简单. 基本思路上,我们就是用栈不断的pop,push.但是何时push,何时pop呢? ...
- Java动态数组
其中java动态数组: Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是ArrayList,ArrayList是javaAPI中自带的java.util.ArrayList. ...
- 基于Numpy的神经网络+手写数字识别
基于Numpy的神经网络+手写数字识别 本文代码来自Tariq Rashid所著<Python神经网络编程> 代码分为三个部分,框架如下所示: # neural network class ...
- POJ1780 欧拉路+手写栈解决爆战问题
题目链接:http://poj.org/problem?id=1780 本题中给出一个位数n,要求给出一个10^n+n-1位数的数,要求每个n位的数都要在里面出现,一个n位的数一共有10^n种,我们容 ...
- Blazor组件自做二 : 使用JS隔离制作手写签名组件
Blazor组件自做二 : 使用JS隔离制作手写签名组件 本文相关参考链接 JavaScript 模块中的 JavaScript 隔离 Viewer.js工程 Blazor组件自做一 : 使用JS隔离 ...
随机推荐
- mac机器smb映射
1 finder中打开前往 2 输入:smb://10.216.90.* 链接 3 输入 账户和密码(名称和密码是你机器的smb密码:比如123***)
- 传奇定时器OnTimer功能详解(泡点、时间触发、任务活动)
传奇定时器OnTimer功能详解(泡点.时间触发.任务活动) 定时器功能,是传奇服务端中非常常见的一种功能,常见如:泡点脚本.赌博脚本,任务活动指定时间刷怪,时间触发一些都需要用到OnTimer功能, ...
- Python 使用 prettytable 库打印表格(美化输出)
pip install prettytable 每次添加一行 from prettytable import PrettyTable # 默认表头:Field 1.Field 2... # 添加表头 ...
- 16 Z变换
Z变换 由于\(DTFT\)变换是有收敛条件的,并且其收敛条件比较严格,很多信号不能够满足条件,为了有效的分析信号,需要放宽收敛的条件,引入\(Z\)变换. 定义 已知序列的\(DTFT\)为 \[ ...
- beyond compare 用法
1.过滤器用法:点击小眼睛(回话-->回话设置)打开过滤器界面----设置多个过滤文件或目录直接使用回车键 2.比较时最好先设置编码以防出现乱码问题 工具-->文件格式. 3.比较时出现乱 ...
- Ubuntu各个版本的镜像下载地址
http://mirrors.melbourne.co.uk/ubuntu-releases/
- Codeforces Round #620 (Div. 2) C. Air Conditioner
Gildong owns a bulgogi restaurant. The restaurant has a lot of customers, so many of them like to ma ...
- mcast_get_if函数
#include <errno.h> int sockfd_to_family(int); int mcast_get_if(int sockfd) { switch (sockfd_to ...
- [经验] 如何在虚拟机上安装 CentOS
环境配置 虚拟机 vmware 15.5 Pro 操作系统 CentOS-7-x86_64-DVD-1908.iso 第一步: 在虚拟机上打开操作系统的镜像文件并配置硬件信息 这里的操作就是一本道 ...
- 5种JVM调优配置方法概览
1 堆设置 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n:设置年轻代和年老代的比值.如:为3,表示年轻代与年老代比值为1:3,年 ...