栈是一种"后进先出(LIFO)"的数据结构.最近压入的数据项总是位于栈顶的.
首先我们先定义一个Stack Interface,我们把他定义成泛型的.
/**
* Stack接口
* @author 鼎鼎
*
* @param <E>
*/
public interface Stack<E> {
/**
* 判断栈是否为空
* @return
*/
public boolean isEmpty();
/**
* 返回栈中元素个数
* @return
*/
public int size();
/**
* 入栈
* @param target
*
*/
public void push(E target);
/**
* 出栈
* @return E
*/
public E pop();
/**
* 返回栈顶元素,并不出栈
* @return
*/
public E top();
}
然后进行利用Java中的数组实现ArrayStack,下面是代码:
/**
* 一个基于数组的栈实现
*
* @author 鼎鼎
* @param <E>
*/
public class ArrayStack<E> implements Stack<E> {
/**
* 表示要存入栈里的元素
*/
private E[] data;
/**
* 表示当前栈的容量
*/
private int size = 0;
public ArrayStack() {
data = (E[]) new Object[10];
//一开始的时候 栈中元素为空
size = 0;
}
public int size() {
return size;
}
public boolean isEmpty() {
return size < 1;
}
/**
* 返回栈顶元素,但是不出栈
*/
public E top() {
if (isEmpty()) {
throw new RuntimeException("链表为空!!");
}
return data[size-1];
}
/**
* 出栈
*/
public E pop() {
if (isEmpty()) {
throw new RuntimeException("链表为空!!");
}
// 先保存那个栈顶元素
E element = data[size - 1];
// 然后清空栈顶元素,
data[size] = null;
//栈中元素减少一个
size--;
return element;
}
/**
* 入栈的时候先判断 栈是否已满,如栈满就扩充
*/
public void push(E target) {
if(target==null)
throw new RuntimeException("插入的元素不可为NULL");
if (isFull()) {
enlarge();
}
size++;
// 往栈顶添加一个元素
data[size - 1] = target;
}
/**
* 扩充数组长度 注意:一般是判断栈满以后 才扩充 扩充为原数组的两倍长度
*/
public void enlarge() {
E[] newData = (E[]) new Object[data.length * 2];
for (int i = 0; i < size; i++) {
newData[i] = data[i];
}
data = newData;
}
/**
* 如果数组的长度 已经等于 放入栈中的元素数量 则表示 栈已经满了
*
* @return
*/
public boolean isFull() {
return data.length == size;
}
}
分享到:
相关推荐
Java数组堆栈的实现是通过创建一个名为ArrayStack的类,该类提供了堆栈的基本操作。该类使用泛型T来表示堆栈中元素的数据类型。 在ArrayStack类中,使用了一个Object类型的数组来存储堆栈中的元素。由于Java不支持...
利用Java语言实现的,基于数组实现的顺序栈——ArrayStack
数组栈相比于Java内置的Stack类,有以下优缺点: - 优点:自定义程度高,可以根据需求调整数组大小、优化内存管理等。 - 缺点:预设容量可能造成空间浪费,若需动态扩容,还需额外实现机制。 在ArrayStack-master这...
JAVA基于静态数组实现栈的基本原理与用法详解主要介绍了JAVA基于静态数组实现栈的基本原理与用法,结合实例形式详细分析了JAVA基于静态数组实现栈相关原理、用法与操作注意事项。 一、栈的定义 栈是一种“先进后出...
在 Java 实现中,我们使用了一个名为 ArrayStack 的类来实现栈的数据结构。该类包含了一个私有的数组arr来存储栈中的元素,一个私有的整数变量MaxSize来存储数组的最大长度,一个私有的整数变量top来存储栈顶的索引...
- 在数组栈中,`push`和`pop`操作也是O(1),但当数组满时,需要扩容,这会导致O(n)的时间复杂度,其中n是当前元素数量。 ### 应用场景 栈数据结构在计算机科学中广泛应用于各种算法和问题解决,例如: - **括号...
下面我们将深入探讨数组栈的概念、实现方式以及其在Java中的应用。 一、数组栈的概念 栈是一种特殊的线性数据结构,遵循“后进先出”(Last In First Out,简称LIFO)原则。在栈中,元素的添加(压栈)和删除(弹...
leetcode双人赛 ...数组栈 ArrayStack push:均摊O(1) pop:均摊O(1) getTop:O(1) getSize:O(1) isEmpty:O(1) 链栈 LinkedStack 链栈 push:O(1) pop:O(1) getTop:O(1) getSize:O(1) isEmpty:O(1)
以下是一个简单的基于数组实现的顺序栈的Java代码示例: ```java public class ArrayStack { private String[] items; // 数组 private int count; // 栈中元素个数 private int n; // 栈的大小 // 初始化数组...
本篇文章将深入探讨一个名为"MyArrayStack"的具体实现,它是基于数组的栈,通过Java编程语言来构建,同时符合抽象数据类型MyStack接口的要求。本文将围绕其设计思想、实现原理、功能特性以及测试案例进行详尽解析。 ...
数组实现的栈称为顺序栈,链表实现的栈称为链式栈。 顺序栈的实现如下(以Java为例): ```java public class ArrayStack { private String[] items; private int count; private int n; public ArrayStack...
3. **`ArrayStack`实现**:在提供的文件名`arrayStack`中,可能包含了使用数组实现栈的代码。数组是最基础的数据结构之一,可以方便地实现栈的功能。通常,我们使用数组的末尾作为栈顶,通过改变索引来实现压入和弹...
在这个文件中,可能会定义一个名为`ArrayStack`的类,它使用数组作为底层数据结构,并且利用泛型来指定存储元素的类型。基本的堆栈操作如`push`、`pop`、`peek`和`isEmpty`将在这个类中实现。 ```java public class...
`ArrayStack` 类是一个数组实现的栈,支持基本的栈操作。 以下是 `ArrayStack` 类的实现代码: ```java public class ArrayStack implements StackADT { private Object[] stack; private int top; private ...
3. **栈和队列**:栈是一种后进先出(LIFO)的数据结构,而队列则是先进先出(FIFO)的。它们在很多算法中都有应用,如递归、回溯和缓存管理。书中会讲解ArrayStack和LinkedListStack的实现,以及ArrayQueue和...
Java中,堆栈可以通过ArrayStack或LinkedList实现,或者使用内置的java.util.Stack类。 3. **队列**:队列是一种先进先出(FIFO)的数据结构,适用于处理并发任务、事件驱动编程等。Java提供了多种队列实现,如...
这里使用了名为ArrayStack的自定义栈类,它基于数组实现。在main方法中,我们定义了一个字符串变量express来存储输入的表达式,以及用于遍历表达式的索引index。 2. 遍历表达式:通过while循环,逐个字符地处理...
Java中的栈实现主要依赖于ArrayStack或LinkedList。栈在递归、表达式求值、回溯算法等方面有着广泛应用。 4. **二叉树**:二叉树是一种每个节点最多有两个子节点的数据结构。常见的二叉树类型有二叉搜索树、完全...