自定义数组实现栈的结构。

 package test;

 public class MyArrayStackClient {
public static void main(String[] args) {
ArrayStack<Integer> stack = new ArrayStack<Integer>();
// ArrayStack<Integer> stack=new ArrayStack<Integer>();
// 入栈
stack.push(6);
stack.push(5);
stack.push(4);
stack.push(3);
stack.push(2);
stack.push(1); System.out.println("此时栈是否为空:" + stack.isEmpty());// 判断栈是否为空
System.out.println("获取栈顶元素: " + stack.peek());// 获取栈顶元素
System.out.println("当前栈内元素共有: " + stack.size() + "个");
System.out.println("元素: " + stack.pop() + "出栈");// 元素出栈
System.out.println("当前栈内元素共有: " + stack.size() + "个");
stack.clear();
System.out.println("当前栈内元素共有: " + stack.size() + "个"); }
}
 package test;

 public class ArrayStack<T> implements IStack<T> {
private final int DEFAULT_SIZE = 3;
private int size = 0;
private int capacity = 0; // top指向下一个能够添加元素的位置
private int top = 0;
private Object[] array; public ArrayStack() {
this.capacity = this.DEFAULT_SIZE;
this.array = new Object[this.capacity];// 初始栈
this.size = 0;
} public ArrayStack(int capacity) {
this.capacity = capacity;
this.array = new Object[this.capacity];
this.size = 0;
} // 栈中元素为空
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return size == 0;
} // 获取栈顶元素
@Override
public T peek() {
// TODO Auto-generated method stub
return (T) this.array[this.top - 1];
} @Override
public T pop() {
// TODO Auto-generated method stub
T element = (T) this.array[top - 1];
this.array[top - 1] = null;
this.size--;
return element;
} // 元素入栈
@Override
public void push(T element) {
// TODO Auto-generated method stub
if (this.size < this.capacity) {
this.array[top] = element;
this.top++;
this.size++;
} else {
// System.out.println("out of array");
enlarge(); // 扩大栈的容量
push(element);
}
} // 扩大栈的容量
public void enlarge() {
this.capacity = this.capacity + this.DEFAULT_SIZE;
Object[] newArray = new Object[this.capacity];
// System.arraycopy(array, 0, newArray, 0, array.length);
arrayCopy(array, newArray);
fillArray(array, null); // 用null将array填满
this.array = newArray;
} // 复制元素
public void arrayCopy(Object[] array, Object[] newArray) {
for (int i = 0; i < array.length; i++) {
newArray[i] = array[i];
}
} // 向数组中装填元素
public void fillArray(Object[] array, Object val) {
for (int i = 0; i < array.length; i++) {
array[i] = val;
}
} // 求出此时栈中元素的大小
public int size() {
return this.size;
} // 清空栈
@Override
public void clear() {
// TODO Auto-generated method stub
fillArray(array, null);
this.top = 0;
this.size = 0;
this.capacity = this.DEFAULT_SIZE;
this.array = new Object[this.capacity];
}
}
 package test;

 public interface IStack<T> {
// 元素出栈,并返回出栈元素
public T pop(); // 元素入栈
public void push(T element); // 获取栈顶元素
public T peek(); // 判断栈是否为空
public boolean isEmpty(); // 清栈
public void clear();
}

输出结果如下:

 此时栈是否为空:false
获取栈顶元素: 1
当前栈内元素共有: 6个
元素: 1出栈
当前栈内元素共有: 5个
当前栈内元素共有: 0个

数组实现栈的结构(java)的更多相关文章

  1. 数组、栈、堆(java基础知识五)

    1.数组概述.定义格式 * A:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数据类型,也可以存储引用数据类型. * B:数组定义格式 格式1:数据类型[ ...

  2. 算法入门 - 基于动态数组的栈和队列(Java版本)

    之前我们学习了动态数组的实现,接下来我们用它来实现两种数据结构--栈和队列.首先,我们先来看一下栈. 什么是栈? 栈是计算机的一种数据结构,它可以临时存储数据.那么它跟数组有何区别呢? 我们知道,在数 ...

  3. Java虚拟机运行时栈帧结构--《深入理解Java虚拟机》学习笔记及个人理解(二)

    Java虚拟机运行时栈帧结构(周志明书上P237页) 栈帧是什么? 栈帧是一种数据结构,用于虚拟机进行方法的调用和执行. 栈帧是虚拟机栈的栈元素,也就是入栈和出栈的一个单元. 2018.1.2更新(在 ...

  4. JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想

    JAVA之旅(三)--数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想 我们继续JAVA之旅 一.数组 1.概念 数组就是同一种类型数据的集合,就是一个容器 数组的好 ...

  5. 深入理解java虚拟机(十) Java 虚拟机运行时栈帧结构

    运行时栈帧结构 栈帧(Stack Frame) 是用于虚拟机执行时方法调用和方法执行时的数据结构,它是虚拟栈数据区的组成元素.每一个方法从调用到方法返回都对应着一个栈帧入栈出栈的过程. 每一个栈帧在编 ...

  6. 栈的数组和链表实现(Java实现)

    我以前用JavaScript写过栈和队列,这里初学Java,于是想来实现栈,基于数组和链表. 下面上代码: import java.io.*; //用接口来存放需要的所有操作 interface st ...

  7. 详细解析Java虚拟机的栈帧结构

    欢迎关注微信公众号:万猫学社,每周一分享Java技术干货. 什么是栈帧? 正如大家所了解的,Java虚拟机的内存区域被划分为程序计数器.虚拟机栈.本地方法栈.堆和方法区.(什么?你还不知道,赶紧去看看 ...

  8. Java连载69-接受输入、用数组模拟栈

    一.编写一个酒店管理系统 1.直接上代码 package com.bjpowernode.java_learning; ​ public class D69_1_ { //编写一个程序模拟酒店的管理系 ...

  9. java中的栈(利用数组实现栈)

    java中的栈(利用数组实现栈) 常见的数据结构:https://blog.csdn.net/weixin_43304253/article/details/119764275 栈的介绍 1.栈的英文 ...

随机推荐

  1. android源码在线查看

    http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/

  2. System.Net.Sockets.Socket SendAsync System.ObjectDisposedException: Cannot access a disposed object.

    发生未处理的域异常! System.ObjectDisposedException: Cannot access a disposed object. Object name: 'System.Net ...

  3. UICollectionView使用

    本文原文 原文转自 1.1. Collection View 全家福: UICollectionView, UITableView, NSCollectionView n   不直接等效于NSColl ...

  4. 手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单

    手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单   手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩 ...

  5. 第10章 系统级I/O

    第10章 系统级I/O 10.1 Unix I/O 一个Unix文件就是一个m个字节的序列:B0,B1,…,BK,…,Bm-1 Unix I/O:一种将设备优雅地映射为文件的方式,允许Unix内核引出 ...

  6. Java JSON、XML文件/字符串与Bean对象互转解析

    前言      在做web或者其他项目中,JSON与XML格式的数据是大家经常会碰见的2种.在与各种平台做数据对接的时候,JSON与XML格式也是基本的数据传递格式,本文主要简单的介绍JSON/XML ...

  7. 零散知识记录-Jira的安装

    Jira不支持openjdk,在linux下需要卸载后,装个jdk才行.

  8. 利用window.name+iframe跨域获取数据详解

    详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...

  9. 基于DDD的.NET开发框架 - ABP分层设计

    返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...

  10. PM2实用入门指南

    简介 PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控.自动重启.负载均衡等,而且使用非常简单. 下面就对PM2进行入门性的介绍,基本涵盖了PM2的常用的功能和 ...