手写ArrayStack底层 实现代码

2023-11-05

一、接口的定义

package p1.接口;

public interface Stack<E> extends Iterable<E> {
    //返回栈中元素的个数
    public int size();
    //查看栈对否为空
    public boolean isEmpty();
    //入栈 进栈一个元素 在线性表的表尾添加一个元素
    public void push(E element);
    //出栈 弹出一个元素 在线性表的表尾删除一个元素
    public E pop();
    //查看当前栈顶元素 并不是移除 查看线性表中最后一个元素
    public E peek();
    //清空栈
    public void clear();

}

二、接口的实现

(1)导入Stack接口,import p1.接口.Stack;

(2)基本组成的定义;

    private ArrayList<E> list;

    public ArrayStack() {

        list = new ArrayList<>();
    }

    public ArrayStack(int capacity) {

        list = new ArrayList<>(capacity);
    }

(3)返回栈中元素的个数

        利用size()方法获取并返回

 @Override
    public int size() {

        return list.size();
    }

(4)查看栈对否为空

        利用isEmpty()方法返回

 @Override
    public boolean isEmpty() {

        return list.isEmpty();
    }

(5)入栈 进栈一个元素 在线性表的表尾添加一个元素

        利用add()直接添加

@Override
    public void push(E element) {

        list.add(element);
    }

(6)出栈 弹出一个元素 在线性表的表尾删除一个元素

        因为删除表尾的元素,所以利用size()-1找到线性表的最后一个元素角标采用  remove(index)的方法移除。

 @Override
    public E pop() {

        return list.remove(list.size() - 1);
    }

(7)查看当前栈顶元素 并不是移除 查看线性表中最后一个元素

        因为查看表尾的元素,所以利用size()-1找到线性表的最后一个元素角标采用  get(index)的方法获取。

@Override
    public E peek() {

        return list.get(list.size() - 1);
    }

(8)清空栈

        采用list.clear()

 @Override
    public void clear() {

        list.clear();
    }

(9) toSting(),iterator(),equals()

        均通过list对应的方法实现

  @Override
    public Iterator<E> iterator() {
        return list.iterator();
    }

    @Override
    public String toString() {

        return list.toString();
    }

    @Override
    public boolean equals(Object o) {
        if (o == null) {
            return false;
        }
        if (this == o) {
            return true;
        }
        if (o instanceof ArrayStack) {
            ArrayStack other = (ArrayStack) o;
            return this.list.equals(other.list);
        }
        return false;
    }

三、测试类

        导入实现类:import p2.线性结构.ArrayStack;

        测试部分接口是否正常;

package p0.测试;

import p2.线性结构.ArrayStack;

public class TestArrayStack {
    public static void main(String[] args) {
        ArrayStack<Integer> stack01 = new ArrayStack<>();
        ArrayStack<Integer> stack02 = new ArrayStack<>(15);
        for (int i = 1; i <= 12; i++) {
            stack01.push(i);
            stack02.push(i);
        }
        System.out.println(stack01);
        System.out.println(stack02);
        System.out.println(stack01.equals(stack02));

        System.out.println(stack01.pop());
        System.out.println(stack01);
        System.out.println(stack01.peek());
    }
}

输出结果:

 由图可知输出结果和预期设计结果相同

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

手写ArrayStack底层 实现代码 的相关文章

随机推荐

  • angular:ServerTransferStateModule将服务器请求的数据保存,避免客户端再次请求

    参考 https www youtube com watch v B9hCjN4Tr1Y t 165s 12 40开始讲解
  • 百度地图API的简单使用(vue3)

    以下地图API的使用是在vue3中进行使用 也可在其他框架中使用 可能只是路由引入的方式不同 div盒子的创建 生成地图的方法 生成点标记的方法 生成信息窗口的方法皆一致 1 在框架中要找到入口文件并将一下代码引入其中 html直接引入即可
  • Ubuntu 14.04 LTS apt-get install添加自动补齐-完成功能

    1 安装bash completion apt get install bash completion 2 编辑 bashrc 文件 添加如下内容 if f etc bash completion then etc bash complet
  • 区块链+边缘计算 技术白皮书

    近日 中国移动5G联合创新中心与中兴通讯 区块链技术与数据安全工业和信息化部重点实验室 北京大学新一代信息技术研究院合作 共同发布了 区块链 边缘计算白皮书 白皮书聚焦于区块链与边缘计算技术和应用的结合点 探索二者结合产生的相互赋能 相互促
  • 深入JVM - JIT分层编译技术与日志详解

    深入JVM JIT分层编译技术与日志详解 文章目录 深入JVM JIT分层编译技术与日志详解 1 背景简介 2 JIT 编译器 2 1 客户端版本的编译器 C1 2 2 服务端版本的编译器 C2 2 3 Graal JIT 编译器 3 分层
  • yocto配置好eclipse之后编译多线程配置

    在yocto项目中配置好eclipse的开发环境 如何配置eclipse开发出多线程程序 普通的eclipse程序只需要在Properties gt C C Build gt Settings gt Tool Settings gt GCC
  • sublime text 3 扩展插件SideBarEnhancements用法教程

    SideBarEnhancements本是增强侧边栏的插件 这里将教大家如何用来做sublime text 3浏览器预览插件 并可自定义浏览器预览的快捷键 第一步 安装此插件 在sublime里面ctrl shift p install p
  • springboot-静态资源目录的配置

    一 通过配置文件配置 配置节点 spring web resources static locations值为要配置的静态资源存放目录如 spring web resources static locations classpath tes
  • IP包头结构定义以及结构体iphdr分析

    Linux linux 可以使用 http blog csdn net dreamintheworld article details 52096675 中的例程来实践通讯过程 来看一下IP包 IP头结构的定义 包格式解析如图 数据对应 对
  • word中添加Mathtype公式行间距改变问题

    在mathtype中编辑任何一个公式 将字体调整好 然后在公式编辑窗口中点 Preference Save to file 将设置保存为一个文件 文件名任取 关闭公式编辑窗口 退回到Word窗口 然后在Mathtype菜单中点 Format
  • xrdp无法启动

    xrdp突然无法启动l systemctl start xrdp A dependency job for xrdp service failed See journalctl xe for details 查看日志信息 journalct
  • 分享25个适合上班族的副业路子

    你是否也曾经在为每个月的工资发愁 你是否想过做点副业来增加收入 现在很多上班族的工资 已经难以满足他们的生活需求了 很多人开始尝试通过副业来增加收入 那么上班族要如何寻找适合自己的副业呢 下面就给大家分享25个适合上班族的副业赚钱路子 或许
  • 密码学加密模式分类

    目录 电子密码本模式 Electronic Codebook ECB 密码分组链接模式 Cipher Block Chaining CBC 密文反馈模式 Cipher Feedback CFB 输出反馈模式 Output Feedback
  • RepBaseRepeatMaskerEdition下载

    开源的生物信息世界居然有这么个需要注册才能下载的工具 开源世界不是怎么方便怎么来吗 这个注册真的麻烦 这里上传了一个可以使用的版本 RepBaseRepeatMaskerEdition 20170127 tar gz 想转成fasta可以用
  • 程序员财富自由之路 自媒体篇

    疫情期间 很多人的收入多多少少都受到了影响 当然 有的人坐吃山空 也有的人收入翻倍 我仔细观察了一下这些收入翻倍的人 发现他们基本都离不开三个字 哪三个字 就是自媒体 自媒体是什么 自媒体是指以内容为中心 个人创作者以网络的形式进行内容传播
  • Linux文件下I/O基础详解

    视频地址 华清远见 https www bilibili com video BV1dz411B7vj p 1 文件基础 一组相关数据的有序集合 文件类型 常规文件 r 二进制文件 ASCII码文件 目录文件 d 字符设备文件 c 块设备文
  • Python->进程-线程->TCP服务器客户端-服务端->返回固定数据的静态web服务器-学习

    作者 芝士小熊饼干 系列专栏 Python 坚持天数 12天 获取进程id和进程的父id 进程名 导入包 import multiprocessing import time import os 创建任务 def task1 print f
  • Django-admin录入中文错误:Incorrect string value

    在Django自带后台中经常会出现编码错误 Incorrect string value xE7 xAE x80 xE5 x8D x95 for column message at row 1 需要修改admin表的中的编码 才能保证数据正
  • Rust- FFI (Foreign Function Interface)

    Foreign Function Interface FFI is a mechanism that allows code written in one language to call code written in another l
  • 手写ArrayStack底层 实现代码

    一 接口的定义 package p1 接口 public interface Stack