`

Java数组栈ArrayStack

阅读更多

  栈是一种"后进先出(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数组堆栈

    Java数组堆栈的实现是通过创建一个名为ArrayStack的类,该类提供了堆栈的基本操作。该类使用泛型T来表示堆栈中元素的数据类型。 在ArrayStack类中,使用了一个Object类型的数组来存储堆栈中的元素。由于Java不支持...

    自定义实现的顺序栈ArrayStack

    利用Java语言实现的,基于数组实现的顺序栈——ArrayStack

    数组栈

    数组栈相比于Java内置的Stack类,有以下优缺点: - 优点:自定义程度高,可以根据需求调整数组大小、优化内存管理等。 - 缺点:预设容量可能造成空间浪费,若需动态扩容,还需额外实现机制。 在ArrayStack-master这...

    JAVA基于静态数组实现栈的基本原理与用法详解

    JAVA基于静态数组实现栈的基本原理与用法详解主要介绍了JAVA基于静态数组实现栈的基本原理与用法,结合实例形式详细分析了JAVA基于静态数组实现栈相关原理、用法与操作注意事项。 一、栈的定义 栈是一种“先进后出...

    利用数组实现栈(Java实现)

    在 Java 实现中,我们使用了一个名为 ArrayStack 的类来实现栈的数据结构。该类包含了一个私有的数组arr来存储栈中的元素,一个私有的整数变量MaxSize来存储数组的最大长度,一个私有的整数变量top来存储栈顶的索引...

    用Java代码实现栈数据结构的基本方法归纳

    - 在数组栈中,`push`和`pop`操作也是O(1),但当数组满时,需要扩容,这会导致O(n)的时间复杂度,其中n是当前元素数量。 ### 应用场景 栈数据结构在计算机科学中广泛应用于各种算法和问题解决,例如: - **括号...

    ArrayStack_TPD

    下面我们将深入探讨数组栈的概念、实现方式以及其在Java中的应用。 一、数组栈的概念 栈是一种特殊的线性数据结构,遵循“后进先出”(Last In First Out,简称LIFO)原则。在栈中,元素的添加(压栈)和删除(弹...

    leetcode双人赛-DataStructure:基于Java的数据结构

    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)

    栈:如何实现浏览器的前进和后退功能?.pdf

    以下是一个简单的基于数组实现的顺序栈的Java代码示例: ```java public class ArrayStack { private String[] items; // 数组 private int count; // 栈中元素个数 private int n; // 栈的大小 // 初始化数组...

    MyArrayStack

    本篇文章将深入探讨一个名为"MyArrayStack"的具体实现,它是基于数组的栈,通过Java编程语言来构建,同时符合抽象数据类型MyStack接口的要求。本文将围绕其设计思想、实现原理、功能特性以及测试案例进行详尽解析。 ...

    08丨栈:如何实现浏览器的前进和后退功能?1

    数组实现的栈称为顺序栈,链表实现的栈称为链式栈。 顺序栈的实现如下(以Java为例): ```java public class ArrayStack { private String[] items; private int count; private int n; public ArrayStack...

    JAVA符号匹配

    3. **`ArrayStack`实现**:在提供的文件名`arrayStack`中,可能包含了使用数组实现栈的代码。数组是最基础的数据结构之一,可以方便地实现栈的功能。通常,我们使用数组的末尾作为栈顶,通过改变索引来实现压入和弹...

    java泛型容器堆栈代码

    在这个文件中,可能会定义一个名为`ArrayStack`的类,它使用数组作为底层数据结构,并且利用泛型来指定存储元素的类型。基本的堆栈操作如`push`、`pop`、`peek`和`isEmpty`将在这个类中实现。 ```java public class...

    使用栈求n个元素的所有排列.pdf

    `ArrayStack` 类是一个数组实现的栈,支持基本的栈操作。 以下是 `ArrayStack` 类的实现代码: ```java public class ArrayStack implements StackADT { private Object[] stack; private int top; private ...

    Java数据结构和算法中文第二版_Java数据结构_

    3. **栈和队列**:栈是一种后进先出(LIFO)的数据结构,而队列则是先进先出(FIFO)的。它们在很多算法中都有应用,如递归、回溯和缓存管理。书中会讲解ArrayStack和LinkedListStack的实现,以及ArrayQueue和...

    华为机考100例java.rar

    Java中,堆栈可以通过ArrayStack或LinkedList实现,或者使用内置的java.util.Stack类。 3. **队列**:队列是一种先进先出(FIFO)的数据结构,适用于处理并发任务、事件驱动编程等。Java提供了多种队列实现,如...

    利用栈使用简易计算器(Java实现)

    这里使用了名为ArrayStack的自定义栈类,它基于数组实现。在main方法中,我们定义了一个字符串变量express来存储输入的表达式,以及用于遍历表达式的索引index。 2. 遍历表达式:通过while循环,逐个字符地处理...

    Java常用算法手册

    Java中的栈实现主要依赖于ArrayStack或LinkedList。栈在递归、表达式求值、回溯算法等方面有着广泛应用。 4. **二叉树**:二叉树是一种每个节点最多有两个子节点的数据结构。常见的二叉树类型有二叉搜索树、完全...

Global site tag (gtag.js) - Google Analytics