二 基于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隔离 ...
随机推荐
- selenium+python实现自动化登录
工作需要实现一个微博自动登录的操作,在网上差了一些资料,决定使用selenium+python实现 selenium 是一个web的自动化测试工具,主流一般配合java或者python使用,我这里使用 ...
- MockMVC - 基于RESTful风格的Springboot,SpringMVC的测试
MockMVC - 基于RESTful风格的SpringMVC的测试 对于前后端分离的项目而言,无法直接从前端静态代码中测试接口的正确性,因此可以通过MockMVC来模拟HTTP请求.基于RESTfu ...
- <img>标签显示本地路径的图片的.NET解决方案
今天朋友问了我一个奇怪的需求:项目中要求图片上传到工作目录,上传后要在网页中通过<img>显示出来.图片上传后显示,在开发中常见的做法是将它图片上传到网站目录下(upload/),如果保存 ...
- java 事务解释。
面试的时候,面试人员总喜欢问在spring中, 1. 如果一个主线程上有一个事务,在事务中开启了一个线程.子线程跑出异常,对主线程有没有影响,或者主线程产生异常对子线程有没有影响. 这个时候,你只要记 ...
- python2.7环境下升级pip3,及出错解决办法
执行 pip3 install --upgrade pip 进行升级 升级后若出现, Import Error:cannot import name main 是因为将pip更新为10.0.0后库里面 ...
- 【转】Swagger详解(SpringBoot+Swagger集成)
Swagger-API文档接口引擎Swagger是什么 Swagger是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器 ...
- Linux终端的一些快捷键命令
一.初识linux的终端种类:本地.远程 查看本终端命令: #tty 命令,看到当前所处的终端 #(w)who 命令,看到系统中所有登录的用户 其中,tty 终端为表示在本地命令行模式下打开的终端:p ...
- jquery 分页 Ajax异步
//使用Ajax异步查询数据 <div class="table-responsive"> <table class="table table-bord ...
- 的aspnet_client文件夹
在早期,有一些asp.net组件是默认要调用(从客户端调用)服务器根(域名)下这个子目录里边的文件的. 不过如果你使用高版本的asp.net,那么全都从你的网站里调用了,因为asp.net有了更好地直 ...
- 读书笔记 - The Hitchhiker's Guide to Python
网址 http://docs.python-guide.org/en/latest/ Reuqests库的作者写的经验 1. 项目需要一个好的结构 https://www.kennethreitz.o ...