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动态数组手写栈的更多相关文章

  1. 三 基于Java动态数组手写队列

    手写队列: package dataStucture2.stackandqueue; import com.lt.datastructure.MaxHeap.Queue; import dataStu ...

  2. 基于tensorflow的MNIST手写数字识别(二)--入门篇

    http://www.jianshu.com/p/4195577585e6 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型 基于tensorflow的MNIST手写数字识 ...

  3. <数据结构系列1>封装自己的数组——手写动态泛型数组(简化版ArrayList)

    哈哈,距离上一次写博客已经快过去半个月了,这这这,好像有点慢啊,话不多说,开始我们的手写动态泛型数组 首先是我们自己写一个自己的动态数组类,代码如下所示: public class Array< ...

  4. 基于TensorFlow的MNIST手写数字识别-初级

    一:MNIST数据集    下载地址 MNIST是一个包含很多手写数字图片的数据集,一共4个二进制压缩文件 分别是test set images,test set labels,training se ...

  5. dfs手写栈模板

    在竞赛中如果系统栈很小的话,过深的递归会让栈溢出,这个时候我们就要自己手写栈,将递归转化成手工栈. 方法其实也很简单. 基本思路上,我们就是用栈不断的pop,push.但是何时push,何时pop呢? ...

  6. Java动态数组

    其中java动态数组: Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是ArrayList,ArrayList是javaAPI中自带的java.util.ArrayList. ...

  7. 基于Numpy的神经网络+手写数字识别

    基于Numpy的神经网络+手写数字识别 本文代码来自Tariq Rashid所著<Python神经网络编程> 代码分为三个部分,框架如下所示: # neural network class ...

  8. POJ1780 欧拉路+手写栈解决爆战问题

    题目链接:http://poj.org/problem?id=1780 本题中给出一个位数n,要求给出一个10^n+n-1位数的数,要求每个n位的数都要在里面出现,一个n位的数一共有10^n种,我们容 ...

  9. Blazor组件自做二 : 使用JS隔离制作手写签名组件

    Blazor组件自做二 : 使用JS隔离制作手写签名组件 本文相关参考链接 JavaScript 模块中的 JavaScript 隔离 Viewer.js工程 Blazor组件自做一 : 使用JS隔离 ...

随机推荐

  1. iOS 开发之函数式编程思想(Functional Programming)

    函数式编程(Functional Programming), 函数式编程强调的函数:1.不依赖外部状态:2.不改变外部状态. 函数式编程可解决线程安全问题,每一个函数都是线程安全的. 时间状态:变量一 ...

  2. 我来给你讲清楚Pythony广播

    初学python广播搞的人头大,今天老师上课讲了一下,茅塞顿开,zt老师nb 首先说一下后向纬度(这个后向纬度书里边称作低维),举例:(3,4,5)后向纬度是:3*4*5或4*5或5 向量广播的条件有 ...

  3. mcast_set_ttl函数

    #include <errno.h> #include <net/if.h> #include <sys/socket.h> #include <netine ...

  4. P1217

    最快的办法就是打表了...不然怎么都会TLE. 先计算出给定最大范围内的所有回文质数: #include <bits/stdc++.h> using namespace std; #def ...

  5. php与js的false类型

    php除了下面列出来的情况是false  其余情况都可以看成true 包括NaN 和 空资源 整数 0 浮点数 0.0 空字符串 '' 或者'0' false 空数组 NULL类型 空标生成Simpl ...

  6. cmd添加管理员账号

    net user 用户名 密码 /add net localgroup Administrators 用户名 /add

  7. 吴裕雄--天生自然Numpy库学习笔记:NumPy 算术函数

    NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide(). 需要注意的是数组必须具有相同的形状或符合数组广播规则. import nump ...

  8. 2018 最新注册码【激活码】、在线激活 pycharm 完整方法(亲测有效)【2018.06.01 重大更新!!!!】

    2018-06-01修改如下: 原来方法的第二种还是有效的,操作如下 (1)更新hosts文件(可以直接下载,然后解压缩) host文件地址 hosts文件,在windows中的地址为: 替换host ...

  9. vue 项目中的less

    收先要在cmd中运行 npm install less less-loader --save 然后会在 moudules文件夹中生成less 和less-loader <style lang=& ...

  10. Git基本指令

    Git学习笔记 git //检查git是否安装 sudo apt-get install git git config --global user.name "dzq" git c ...