Java中是没有栈这种数据结构的,如果想利用栈的先进后出(FILO),就必须自己动手实现。栈的底层可以使用数组,也可以使用Java中的容器类,如ArrayList、LinkList等。栈最常用的操作主要是压栈(push)、出栈(pop)、查看栈顶元素(peek)、判断栈是否为空(isEmpty)、返回栈的当前大小。原则上栈中有一个指针指向栈顶元素。
1、底层基于数组的栈实现:
import java.util.EmptyStackException;
public class MyStack {
private int[] arr; //底层数组
private int top; //相当于栈顶指针
/**
* 无参构造方法,默认初始容量为10个整形数据大小
*/
public MyStack(){
arr = new int[10];
top = -1;
}
/**
* 含参构造方法,构造指定大小的底层数组
* @param size
*/
public MyStack(int size){
arr = new int[size];
top =-1;
}
/**
* 判断栈是否为空
* @return
*/
public boolean isEmpty(){
return top == -1;
}
/**
* 压栈操作
* @param element
*/
public void push(int element){
if(top == arr.length-1)throw new StackOverflowError();
else arr[++top] = element;
}
/**
* 出栈操作
* @return
*/
public int pop(){
if(top == -1)throw new EmptyStackException();
else return arr[top--];
}
/**
* 查看栈顶元素
* @return
*/
public int peek(){
if(top == -1)throw new EmptyStackException();
else return arr[top];
}
}
2、底层基于容器的栈的实现:
注:使用ArrayList容器作为底层来实现栈,就必须知道ArrayList的一些特性,ArrayList是基于数组实现的,默认初始容量是10,当容量不足的时候,是会自动以1.5倍扩容,所以无需担心越界的问题,ArrayList提供的一些方法会对我们实现栈有帮助。因此,下面就无需再使用栈顶指针,ArrayList中有一个随内容数量变化的size可作为指针。
import java.util.ArrayList;
import java.util.EmptyStackException;
import java.util.List;
public class MyCollectionStack<E extends Object>{
private List<E> list = new ArrayList<E>(); //底层基于ArrayList的容器
public MyCollectionStack(){
}
public boolean isEmpty(){
return list.isEmpty();
}
public void push(E e){
list.add(e);
}
public E pop(){
if(list.isEmpty()) throw new EmptyStackException();
else return list.remove(list.size()-1);
}
public E peek(){
if(list.isEmpty()) throw new EmptyStackException();
else return list.get(list.size()-1);
}
}
分享到:
相关推荐
本章节介绍了表、栈和队列三种重要的数据结构及其在Java中的实现方式。表作为一种灵活的线性数据结构,既可以基于数组也可以基于链表实现;栈和队列则是具有特定操作规则的特殊表。这些数据结构在算法设计和软件开发...
在这个主题中,我们将深入探讨如何在Java中实现栈这一基本数据结构,具体包括顺序栈(stack_SqStack)和链栈(stack_SLinkList)。 栈是一种后进先出(Last In First Out, LIFO)的数据结构,常用于临时存储和快速...
总之,Java中的栈数据结构提供了一种高效的方法来处理需要后进先出逻辑的问题,它在编程中扮演着至关重要的角色,尤其是在处理需要临时存储和按顺序处理数据的任务时。了解和熟练掌握栈的操作和实现对于提升编程技能...
本文通过对《Java基础复习笔记05数据结构-栈》的解析,详细介绍了栈的基本概念、操作方法以及应用场景,并提供了栈的两种实现方式——顺序实现与链表实现的详细说明。理解这些知识点对于深入学习数据结构与算法至关...
本学习资料包"java数据结构--学习"聚焦于如何在Java环境下理解和应用各种数据结构,旨在提升开发者的技术水平,使其能够编写出更加高效和优化的代码。 1. **数组**:数组是最基本的数据结构,用于存储同类型元素的...
### JAVA数据结构与基础知识详解 #### 一、Java与面向对象程序设计 Java是一种广泛使用的高级编程语言,其核心特点之一就是支持面向对象编程(OOP)。面向对象编程通过将数据和行为封装在对象中来简化软件开发和...
Java数据结构是编程中至关重要的组成部分,它们定义了如何有效地存储和操作数据。在这个话题中,我们将重点关注两种常见的数据结构——链表和数组,并探讨它们如何被用来实现栈这一特定的抽象数据类型。 栈是一种...
【Java 数据结构 - 栈】 栈是一种线性数据结构,具有后进先出(LIFO)的特点。在Java中,栈可以用于多种用途,包括括号匹配和表达式求值。本实验报告主要涵盖了使用Java实现顺序栈和链栈,并通过实际应用加深对栈的...
《计算机科学丛书·数据结构从应用到实现(Java版)》系统地介绍了数据结构以及数据结构与对象之间的联系。主要内容包括:算法效率的输入规模、阶和大O,数据结构的无序和有序列表,队列和栈基于数组和链表的设计实例...
Java作为广泛应用的编程语言,其在实现数据结构和算法时有着丰富的库支持和优秀的可读性。下面将对标题和描述中提到的一些关键知识点进行详细解释。 1. **数据结构**: - **稀疏数组**:当大量数据中大部分为零或...
Java是一种广泛使用的面向对象的编程语言,具有丰富的库支持,使得在Java中实现数据结构变得既方便又强大。在清华大学出版社出版的朱站立编著的《数据结构》一书中,作者深入浅出地讲解了数据结构的基本概念、设计与...
在实际编程中,我们还可以使用各种高级语言提供的内置数据结构,如C++的`std::stack`,Java的`java.util.Stack`,Python的`collections.deque`(双端队列,也可用作栈)等。这些库提供了封装好的栈操作,方便程序员...
数据结构在计算机科学中扮演着至关重要的角色,而栈作为一种特殊的数据结构,其“后进先出”(LIFO)的特性使得它在许多问题中都有广泛应用。在本主题“数据结构-栈的应用-迷宫求解”中,我们将探讨如何利用栈来解决...
#### Java中的栈实现 在Java中,栈可以通过多种方式实现,包括使用数组或链表。本笔记将重点介绍基于数组实现的栈。 ##### 数组实现的栈 数组实现的栈是最常见的一种方式,它使用固定大小的数组来存储栈中的元素...
本资料包“java-数据结构代码实现”提供了使用Java语言实现数据结构的实例,旨在帮助开发者加深对数据结构的理解并提升编程技能。 1. **链表**:链表是一种动态数据结构,其元素在内存中不是顺序排列的。Java中的...
总之,利用Java和栈数据结构解决迷宫问题是一个很好的实践项目,它能够帮助我们深入理解数据结构与算法在实际问题中的应用。在进行这样的实践作业时,不仅要关注代码的实现,还要注重代码的可读性和优化,这对提升...
下面将详细介绍Java中实现链表、栈、队列、优先级队列以及哈希表这些基本数据结构的方法。 首先,我们来看链表。链表是一种线性数据结构,其中的元素不连续存储,而是通过指针连接。Java中的`LinkedList`类实现了`...
在IT领域,数据结构是计算机科学的基础,而二叉树作为一种重要的数据结构,被广泛应用于算法设计、数据库系统、编译器等领域。本教程将详细阐述如何使用JAVA语言实现二叉树的相关操作。 首先,我们要了解二叉树的...
2. **自定义栈实现**: 如果想要更灵活地控制栈的行为,可以自定义基于数组或链表的栈。例如,使用ArrayList或LinkedList作为底层数据结构: - **基于ArrayList的栈**:ArrayList提供了动态扩容功能,可以方便地...