1.基于数组的栈
public class StackClass {
private int maxStackSize;
private int stackTop;
private int[] list;
/* 默认构造函数 */
public StackClass() {
maxStackSize = 100;
stackTop = 0;
list = new int[maxStackSize];
}
public StackClass(int stackSize) {
if (stackSize <= 0)
maxStackSize = 100;
else
maxStackSize = stackSize;
stackTop = 0;
list = new int[maxStackSize];
}
/* 拷贝构造函数 */
public StackClass(StackClass otherStack) {
copy(otherStack);
}
public void initializeStack() {
for (int i = 0; i < stackTop; i++) {
list[i] = 0;
}
stackTop = 0;
}
/* 判断栈是否为空 */
public boolean isEmptyStack() {
return (stackTop == 0);
}
public boolean isFullStack() {
return (stackTop == maxStackSize);
}
/* 入栈 先入再++ */
public void push(int newItem) {
if (isFullStack())
throw new StackOverflowException();
list[stackTop] = newItem;
stackTop++;
}
/* 返回栈顶元素 */
public int top() {
if (isEmptyStack())
throw new StackUnderflowException();
int temp = list[stackTop - 1];
return temp;
}
/* 出栈 先--后再刪 */
public void pop() {
if (isEmptyStack())
throw new StackUnderflowException();
stackTop--;
list[stackTop] = 0;
}
private void copy(StackClass otherStack) {
list = null;
maxStackSize = otherStack.maxStackSize;
stackTop = otherStack.stackTop;
list = new int[maxStackSize];
for (int i = 0; i < stackTop; i++) {
list[i] = otherStack.list[i];
}
}
/* 拷贝方法 */
public void copyStack(StackClass otherStack) {
if (this != otherStack)
copy(otherStack);
}
}
2.基于链表的栈
//栈节点类
class StackNode {
int info;
StackNode link;
}
//链表栈类
public class LinkedStackClass {
private StackNode stackTop;
public LinkedStackClass() {
stackTop = null;
}
public void initializeStack() {
stackTop = null;
}
/* 栈是否为空 */
public boolean isEmptyStack() {
return (stackTop == null);
}
/* 链式栈不会满 */
public boolean isFullStack() {
return false;
}
/* 入栈 如右图:*/
public void push(int newElement) {
StackNode newNode;
newNode = new StackNode();
newNode.info = newElement;
newNode.link = stackTop;
stackTop = newNode;
}
/* 返回栈顶元素 */
public int top() throws StackUnderflowException {
if (stackTop == null)
throw new StackUnderflowException();
return stackTop.info;
}
/* 出栈 */
public void pop()throws StackUnderflowException{
if(stackTop==null)throw new StackUnderflowException();
stackTop=stackTop.link;
}
}
分享到:
相关推荐
数据结构在计算机科学中扮演着至关重要的角色,而栈作为一种特殊的数据结构,其“后进先出”(LIFO)的特性使得它在许多问题中都有广泛应用。在本主题“数据结构-栈的应用-迷宫求解”中,我们将探讨如何利用栈来解决...
本章节介绍了表、栈和队列三种重要的数据结构及其在Java中的实现方式。表作为一种灵活的线性数据结构,既可以基于数组也可以基于链表实现;栈和队列则是具有特定操作规则的特殊表。这些数据结构在算法设计和软件开发...
《数据结构(Java版本)》这本书正是为此目的而编写,旨在将理论与实际编程相结合,通过Java语言来实现各种经典的数据结构。 首先,书中的基础部分会介绍数据结构的基本概念,如数组、链表、栈和队列。数组是最基本...
在这个主题中,我们将深入探讨如何在Java中实现栈这一基本数据结构,具体包括顺序栈(stack_SqStack)和链栈(stack_SLinkList)。 栈是一种后进先出(Last In First Out, LIFO)的数据结构,常用于临时存储和快速...
### Java基础数据结构—栈 #### 一、栈的基本概念 栈作为一种常见的数据结构,在计算机科学领域具有重要的地位。在《Java基础复习笔记05数据结构-栈》中提到,**栈**是一种特殊的线性表,它遵循“先进后出”...
Java是一种广泛使用的面向对象的编程语言,具有丰富的库支持,使得在Java中实现数据结构变得既方便又强大。在清华大学出版社出版的朱站立编著的《数据结构》一书中,作者深入浅出地讲解了数据结构的基本概念、设计与...
总之,Java中的栈数据结构提供了一种高效的方法来处理需要后进先出逻辑的问题,它在编程中扮演着至关重要的角色,尤其是在处理需要临时存储和按顺序处理数据的任务时。了解和熟练掌握栈的操作和实现对于提升编程技能...
叶核亚的《数据结构(java版)第4版》是一本专门针对Java程序员的数据结构教程,旨在帮助读者深入理解这些概念并应用到实际编程中。 该书涵盖了广泛的数据结构类型,包括数组、链表、栈、队列、集合、映射、树(如...
栈是一种先进后出(LIFO)的数据结构。 - **MinStack** - 描述:设计一个支持O(1)时间复杂度获取最小元素的栈。 - 关键技术:维护一个额外的最小值栈,用于记录当前栈中最小元素。 - **ValidParentheses** - ...
Java基础复习笔记05数据结构-栈,详细介绍了栈的相关知识
《计算机科学丛书·数据结构从应用到实现(Java版)》系统地介绍了数据结构以及数据结构与对象之间的联系。主要内容包括:算法效率的输入规模、阶和大O,数据结构的无序和有序列表,队列和栈基于数组和链表的设计实例...
总之,利用Java和栈数据结构解决迷宫问题是一个很好的实践项目,它能够帮助我们深入理解数据结构与算法在实际问题中的应用。在进行这样的实践作业时,不仅要关注代码的实现,还要注重代码的可读性和优化,这对提升...
链表是一种常用的数据结构,它在计算机科学中扮演着重要的角色。...通过深入学习这些链表的Java实现,你可以更好地理解数据结构的内部工作原理,并将其应用到实际项目中,提升代码的效率和灵活性。
数据结构的学习不仅包括数组,还有链表、栈、队列、树、图等多种类型。理解并熟练运用这些数据结构可以帮助我们设计更高效、更具可扩展性的算法。对于Java开发者来说,掌握数据结构是提高编程技能的关键步骤。通过...
数据结构中的栈(Stack)是计算机科学中一种基础且重要的数据结构,它的核心特性是遵循后进先出(LIFO)原则。栈就像一个只允许在一端进行操作的线性容器,这一端被称为栈顶。栈的操作主要有两个基本操作:压栈...
- 栈(Stack):栈是一种后进先出(LIFO)的数据结构,常用于实现函数调用、表达式求值等场景。Java中,`java.util.Stack` 类可以用来创建栈。 - 队列(Queue):队列是一种先进先出(FIFO)的数据结构,适用于...
本标题《数据结构与算法分析----java语言描述 (1)》与描述《数据结构与算法分析----java语言描述 (1).pdf java基础》中隐含了若干重要的知识点,主要围绕着数据结构和算法分析这两个IT专业核心话题,并且使用Java...