1. 基于数组简单实现

 /**
* @author <a herf="mailto:yanwu0527@163.com">XuBaofeng</a>
* @date 2019-11-29 14:37.
* <p>
* description: 基于数组实现栈
*/
public class ArrayStack<T> {
private static final Integer DEFAULT_SIZE = 10;
/*** 栈 */
private T[] items;
/*** 栈顶所在角标 */
private int top = -1;
/*** 栈总容量 */
private int size; public ArrayStack() {
this(DEFAULT_SIZE);
} public ArrayStack(int len) {
if (len <= 0) {
throw new IndexOutOfBoundsException("new instance error, len need more than 0, size: " + len);
}
size = len;
items = (T[]) new Object[size];
} /**
* 判断栈是否为控
*
* @return
*/
public boolean isEmpty() {
return top == -1;
} /**
* 压栈
*
* @param t
* @return
*/
public boolean push(T t) {
if (top == size - 1) {
return false;
}
items[++top] = t;
return true;
} /**
* 弹栈
*
* @return
*/
public T pop() {
if (isEmpty()) {
return null;
}
T item = items[top];
items[top--] = null;
return item;
} /**
* 获取栈顶元素
*
* @return
*/
public T top() {
if (isEmpty()) {
return null;
}
return items[top];
} public static void main(String[] args) {
ArrayStack<Integer> stack = new ArrayStack<>();
for (int i = 0; i < DEFAULT_SIZE + 1; i++) {
System.out.println("push: " + stack.push(i) + ", item: " + i);
}
for (int i = 0; i < DEFAULT_SIZE + 1; i++) {
System.out.println("top: " + stack.top() + ", pop: " + stack.pop());
}
}
}

2. 基于链表简单实现

 import lombok.AllArgsConstructor;
import lombok.Data; /**
* @author <a herf="mailto:yanwu0527@163.com">XuBaofeng</a>
* @date 2019-12-10 17:27.
* <p>
* description: 基于链表实现栈
*/
public class LinkedStack<T> {
private static final Integer DEFAULT_SIZE = 10;
/*** 栈顶元素 */
private Node top;
/*** 栈当前容量 */
private Integer index;
/*** 栈总容量 */
private Integer size; public LinkedStack() {
this(DEFAULT_SIZE);
} public LinkedStack(Integer len) {
if (len <= 0) {
throw new IndexOutOfBoundsException("new instance error, len need more than 0, size: " + len);
}
index = -1;
size = len;
} /**
* 判断栈是否为空
*
* @return
*/
public Boolean isEmpty() {
return top == null;
} /**
* 压栈
*
* @param t
* @return
*/
public boolean push(T t) {
if (index >= size - 1) {
return false;
}
Node old = top;
top = new Node(t, old);
index++;
return true;
} /**
* 弹栈
*
* @return
*/
public Node pop() {
if (isEmpty()) {
return null;
}
Node result = top;
top = top.next;
index--;
return result;
} /**
* 获取栈顶元素
*
* @return
*/
public Node top() {
return top;
} @Data
@AllArgsConstructor
private class Node {
private T data;
private Node next;
} public static void main(String[] args) {
LinkedStack<String> stack = new LinkedStack<>();
for (int i = 0; i < DEFAULT_SIZE + 1; i++) {
System.out.println("push: " + stack.push(String.valueOf(i)) + ", item: " + i);
}
for (int i = 0; i < DEFAULT_SIZE + 1; i++) {
System.out.println("top: " + stack.top());
System.out.println("pop: " + stack.pop());
}
}
}

java代码简单实现栈的更多相关文章

  1. 用JAVA写简单的栈

    package com.gailekesi.example.expl_tuple; import javax.naming.NameNotFoundException; import java.awt ...

  2. java代码简单练习

    总结: package com.ds; import java.awt.Color; import java.awt.FlowLayout; import javax.swing.JFrame; im ...

  3. 遗传算法与Java代码简单实现

    参阅地址: https://www.jianshu.com/p/ae5157c26af9 代码实现: public class GA { private int ChrNum = 10; //染色体数 ...

  4. Java代码 简单用于处理和数据库相关的操作

    package util; import org.apache.commons.beanutils.BeanUtils; import java.lang.reflect.InvocationTarg ...

  5. java代码简单实现队列

    1. 基于链表简单实现 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; / ...

  6. java的堆,栈,静态代码区 详解

    面试中,有家公司做数据库开发的,对内存要求比较高,考到了这个 一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方— ...

  7. Centos7.4简单安装使用gitlab+maven+jenkins实现java代码的持续集成部署

    1.工具的简单介绍 gitlab--源代码版本管理控制工具 maven--java代码编译构建工具 jenkins--基于java开发的自动化持续集成部署工具 sonar--代码质量管理工具 2.gi ...

  8. Java静态检测工具/Java代码规范和质量检查简单介绍(转)

    静态检查: 静态测试包括代码检查.静态结构分析.代码质量度量等.它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行.代码检查代码检查包括代码走查.桌面检查.代码审查等,主要检查代码 ...

  9. MongoDB最简单的入门教程之三 使用Java代码往MongoDB里插入数据

    前两篇教程我们介绍了如何搭建MongoDB的本地环境: MongoDB最简单的入门教程之一 环境搭建 以及如何用nodejs读取MongoDB里的记录: MongoDB最简单的入门教程之二 使用nod ...

随机推荐

  1. c++设计模式:代理模式

    代理模式的实现和visitor实现有一曲同工之妙.这里就不多说了,也是实现set_delegate接口,以及回调函数处理接口. 主要区别在于: visitor主要是把信息回调之后就不管了. 代理模式主 ...

  2. LUOGU P1680 奇怪的分组

    题目背景 终于解出了dm同学的难题,dm同学同意帮v神联络.可dm同学有个习惯,就是联络同学的时候喜欢分组联络,而且分组的方式也很特别,要求第i组的的人数必须大于他指定的个数ci.在dm同学联络的时候 ...

  3. js数组操作方法

    数组的操作方法在js中可谓是诸子百家,各种某乱的方法让人眼花缭乱,有时候就会分不清什么是自带的什么是曾今写的api了 数组的增删 1 . push() , pop()  和 shift() unshi ...

  4. 用CSS添加选中文字的背景色

  5. 2019.8.9 NOIP模拟测试15 反思总结

    日常爆炸,考得一次比一次差XD 可能还是被身体拖慢了学习的进度吧,虽然按理来说没有影响.大家听的我也听过,大家学的我也没有缺勤多少次. 那么果然还是能力问题吗……? 虽然不愿意承认,但显然就是这样.对 ...

  6. C#基础之Async和Await 的异步编程

    官方文档地址:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/async/ Coffee cup = ...

  7. session失效刷新后登录页面嵌入在iframe中的解决办法

    在login页面中添加以下一段代码:   var _topWin = window;  while (_topWin != _topWin.parent.window) {       _topWin ...

  8. Leetcode653.Two Sum IV - Input is a BST两数之和4-输入BST

    给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. struct TreeNode { int val; struct TreeNode * ...

  9. MaxCompute问答整理之7月

    本文是基于本人对MaxCompute产品的学习进度,再结合开发者社区里面的一些问题,进而整理成文.希望对大家有所帮助. 问题一.DataWorks V2.0简单模式和标准模式的区别?公司数仓的数据上云 ...

  10. Android学习笔记之mainfest文件中android属性

    android:allowTaskReparenting 是否允许activity更换从属的任务,比如从短信息任务 切换到浏览器任务. -------------------------------- ...