import java.util.Arrays;
import java.util.Scanner; /**
* @author 李正阳
*/
public class MyArraysStack<E> implements MyStack<E> {
private int DEFAULT_SIZE = 16;//定义栈的初始默认长度
private int capacity;//保存顺序栈的长度涉及扩容
public int size;//保存顺序栈中元素的个数
private Object[] elementData;//定义一个数组用于保存顺序栈中的元素 /**
* 初始化栈
*/
public MyArraysStack() {
elementData = new Object[DEFAULT_SIZE];
size = 0;
capacity = DEFAULT_SIZE;
} /**
* 清除栈中所有的元素
*
* @return
*/
@Override
public boolean clearStack() {
for (int i = 0; i < size; i++) {
elementData[i] = null;
}
return true;
} /**
* 栈是否为空
*
* @return true 空栈 false 非空栈
*/
@Override
public boolean isEmpty() {
if (size == 0) {
return true;
} else {
return false;
}
} /**
* 返回这个数组的长度
*
* @return
*/
@Override
public int getLengh() {
return size;
} /**
* 获得栈顶元素
*
* @return
*/
@Override
public E getTop() {
return (E) elementData[size - 1];
} /**
* 压入元素
*
* @param p 存储的值
* @return true 压入元素成功 false 失败
*/
@Override
public boolean push(Object p) {
if (size >= capacity) {
reclloc();
elementData[size] = p;
size++;
} else {
elementData[size] = p;
size++; }
return true;
} /**
* 扩容数组
*/
@Override
public void reclloc() {
elementData = Arrays.copyOf(elementData, 2 * DEFAULT_SIZE);
capacity = 2 * DEFAULT_SIZE;
} /**
* 弹出栈中的元素
*
* @return 所弹出的元素
*/
@Override
public E pop() { return (E) elementData[--size ];
} /**
* 遍历并且输出
*/
@Override
public void stackTraverse() {
for (Object a : elementData) {
System.out.println(a + " ");
}
}
}

栈的接口:


public interface MyStack<E> {
//清空栈
boolean clearStack();
//判断是否为空栈
boolean isEmpty();
//返回栈中的元素个数
int getLengh();
//返回栈的栈顶元素
E getTop();
//入栈
public boolean push(Object p);
//出栈
public E pop() ;
//编历栈
void stackTraverse();
//扩容数组
default void reclloc(){};
//进制转换
default String systemTransformation(String n,int n1,int n2) {
return "error";
}
//表达式求值
default boolean expressionEvaluation(String n){
return false;
}
//判断运算符优先级
default char precede(char a,char b){
return '#';
}
//括号匹配
default boolean correct(String n){
return true;
}
//回文判断
default boolean isPalindrome(String n){
return false;
}
}
 

java:数据结构复习(二)数组栈的更多相关文章

  1. java:数据结构(二)栈的应用(括号匹配)

    一.什么是括号匹配: 括号匹配就是利用计算机辨别表达式里面的括号是否书写成功 例如: {()((a)) }这就是一个正确 (()()   这就是一个错误的 二.括号匹配的算法: 众所周知,括号分为花括 ...

  2. java:数据结构(二)栈的应用(进制转换全收集)

    说到进制转换,java已经封装了基本的方法,在竞赛中使用封装的方法自然能节省大量时间 另一位仁兄介绍的封装好的方法: https://blog.csdn.net/m0_37961948/article ...

  3. 我理解的数据结构(二)—— 栈(Stack)

    我理解的数据结构(二)-- 栈(Stack) 一.栈基础 栈是一种线性结构 相比较数组,栈对应的操作是数组的子集 只能从一端添加元素,也只能从同一端取出元素,这一端称为栈顶 栈是一种后进先出的数据结构 ...

  4. 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现

      本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型   栈是 ...

  5. Java基础复习之数组

    Java基础复习之:数组 简介 数组(Array):多个相同数据类型按照一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理 一维数组 一维数组的声明与初始化 int[] id ...

  6. java数据结构与算法之栈(Stack)设计与实现

    本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是一种用于 ...

  7. Java数据结构和算法 - 数组

    Q: 数组的创建? A: Java中有两种数据类型,基本类型和对象类型,在许多编程语言中(甚至面向对象语言C++),数组也是基本类型.但在Java中把数组当做对象来看.因此在创建数组时,必须使用new ...

  8. Java数据结构和算法(四)——栈

    stack,中文翻译为堆栈,事实上指的是栈,heap,堆. 这里讲的是数据结构的栈,不是内存分配里面的堆和栈. 栈是先进后出的数据的结构,好比你碟子一个一个堆起来.最后放的那个是堆在最上面的. 队列就 ...

  9. Java数据结构和算法(一)--栈

    栈: 英文名stack,特点是只允许访问最后插入的那个元素,也就是LIFO(后进先出) jdk中的stack源码: public class Stack<E> extends Vector ...

  10. Java数据结构和算法之栈与队列

    二.栈与队列 1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶(Top),另一端称为栈底(Bottom). (2)当表中没有元素时称为 ...

随机推荐

  1. CopyOnWriteArrayList你都不知道,怎么拿offer?

    前言 只有光头才能变强 前一阵子写过一篇COW(Copy On Write)文章,结果阅读量很低啊...COW奶牛!Copy On Write机制了解一下 可能大家对这个技术比较陌生吧,但这项技术是挺 ...

  2. Oracle 连接查询

    1.什么是连接查询?(B) 很多时候我们需要查询的数据并不是来源于同一张表,而是来源于多张表,而这种一个查询需要对多张表进行操作,就成为连接查询. 2.如何进行表的连接查询? 连接查询有两种方式:SQ ...

  3. Mybaits-plus实战(一)

    1. Mybaits-plus实战(一) 1.1. 快速开始 1.1.1. 配置文件 # 扫描位置 mybatis-plus.mapper-locations=classpath:/mapper/*M ...

  4. 配置rsync+inotify实时同步

    与上一篇同步做 配置rsync+inotify实时同步 1:调整inotify内核参数 在linux内核中,默认的inotify机制提供三个调控参数:max_queue_events.max_user ...

  5. 【JDBC 笔记】

    JDBC 笔记 作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 对应pdf版:https://download.csdn.net/download/qq_22430159/10754554 没有积分 ...

  6. 驰骋工作流引擎 -CCBPM如何自动升级

    关键词:工作流引擎自动升级   工作流自动升级升级步骤设置1,CCBPM把更新分成三类, 应用程序代码更新.数据表结构更新.数据更新.2,CCBPM在您登录流程设计器时自动判断当前的版本与数据库版本是 ...

  7. Windows Server 2016-命令行批量导出AD用户列表信息

    本章节为大家带来如何通过Powershell或ldifde命令行方式导出域用户列表信息,方便大家日常运维工作中使用. Powershell方式导出现有Staff目录下所有用户信息列表: Get-ADU ...

  8. ASP.NET Core 中断请求了解一下(翻译)

    ASP.NET Core知多少系列:总体介绍及目录 本文所讲方式仅适用于托管在Kestrel Server中的应用.如果托管在IIS和IIS Express上时,ASP.NET Core Module ...

  9. ReactiveSwift源码解析(二) Bag容器的代码实现

    今天博客我接着上篇博客的内容来,上篇博客我们详细的看了ReactiveSwift中的Observer已经Event的代码实现.接下来我们来看一下ReactiveSwift中的结构体Bag的实现.Bag ...

  10. Linux下安装vmtools的语句

    sudo apt-get upgrade sudo apt-get install open-vm-tools-desktop -y sudo reboot 出现提示信息不确定就默认就好,一路y或ye ...