java代码简单实现栈
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代码简单实现栈的更多相关文章
- 用JAVA写简单的栈
package com.gailekesi.example.expl_tuple; import javax.naming.NameNotFoundException; import java.awt ...
- java代码简单练习
总结: package com.ds; import java.awt.Color; import java.awt.FlowLayout; import javax.swing.JFrame; im ...
- 遗传算法与Java代码简单实现
参阅地址: https://www.jianshu.com/p/ae5157c26af9 代码实现: public class GA { private int ChrNum = 10; //染色体数 ...
- Java代码 简单用于处理和数据库相关的操作
package util; import org.apache.commons.beanutils.BeanUtils; import java.lang.reflect.InvocationTarg ...
- java代码简单实现队列
1. 基于链表简单实现 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; / ...
- java的堆,栈,静态代码区 详解
面试中,有家公司做数据库开发的,对内存要求比较高,考到了这个 一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方— ...
- Centos7.4简单安装使用gitlab+maven+jenkins实现java代码的持续集成部署
1.工具的简单介绍 gitlab--源代码版本管理控制工具 maven--java代码编译构建工具 jenkins--基于java开发的自动化持续集成部署工具 sonar--代码质量管理工具 2.gi ...
- Java静态检测工具/Java代码规范和质量检查简单介绍(转)
静态检查: 静态测试包括代码检查.静态结构分析.代码质量度量等.它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行.代码检查代码检查包括代码走查.桌面检查.代码审查等,主要检查代码 ...
- MongoDB最简单的入门教程之三 使用Java代码往MongoDB里插入数据
前两篇教程我们介绍了如何搭建MongoDB的本地环境: MongoDB最简单的入门教程之一 环境搭建 以及如何用nodejs读取MongoDB里的记录: MongoDB最简单的入门教程之二 使用nod ...
随机推荐
- R语言中如何使用最小二乘法
R语言中如何使用最小二乘法 这里只是介绍下R语言中如何使用最小二乘法解决一次函数的线性回归问题. 代码如下: > x<-c(6.19,2.51,7.29,7.01,5.7, ...
- macOS 中Boost的安装和使用
1 安装Boost 1.1 使用源码安装 下载Boost源码 解压放在任意目录,例如/home/wang/ ./bootstrap.sh,默认的位置是在usr/local下面;可以通过--prefix ...
- 使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用
原文:使用Docker 安装Elasticsearch.Elasticsearch-head.IK分词器 和使用 Elasticsearch的安装 一.elasticsearch的安装 1.镜像拉取 ...
- oracle基本认识
概要图 1. 环境搭建 1.1 Oracle的安装 数据库的三个常用的用户及默认密码sys:change_on_installsystem:managerscott:tiger Oracle客户端: ...
- Leetcode74. Search a 2D Matrix搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入: matrix ...
- DLedger —基于 raft 协议的 commitlog 存储库
“点击获取上云帮助文档” 尊敬的阿里云用户: 您好!为方便您试用开源 RocketMQ 客户端访问阿里云MQ,我们申请了专门的优惠券,优惠券可以直接抵扣金额.请填写下您公司账号信息,点击上图,了解更多 ...
- 隐马尔可夫模型及Viterbi算法
隐马尔可夫模型(HMM,hidden Markov model)是可用于标注问题的统计学模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型.HMM模型主要用于语音识别,自然语言处理,生物 ...
- web前端学习(三)css学习笔记部分(6)-- 选择器详解
9.选择器详解 9.1 属性选择器 CSS3 属性选择器,在 CSS3 中,追加了三个属性选择器分别为:[att*=val].[att^=val]和[att$=val],使得属性选择器有了通配符的概 ...
- Hdu 3603
Coach Yehr’s punishment Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- hdu 1711Number Sequence (KMP入门,子串第一次出现的位置)
Number Sequence Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...