`
bo_hai
  • 浏览: 565943 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Stack (堆栈)使用JAVA实现

 
阅读更多

代码如下:

import java.util.AbstractList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.RandomAccess;

public class Stack<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable{

	private static final long serialVersionUID = 1L;

	private Object[] elementData; 
	
	private int size;
	
	private int length;
	
	public Stack(int length) {
		this.length = length;
		elementData = new Object[this.length];
	}
	
	public Stack() {
		this(10);
	}

	private void rangeCheck(int index) {
		if (index < 0 || index >= size) {
			throw new IndexOutOfBoundsException(
					"Index: "+index+", Size: "+size);
		}
	}
	
	
	public void ensureCapacity(int minCapacity) {
		int oldCapacity = elementData.length;
		if (minCapacity > oldCapacity) {
			int newCapacity = (oldCapacity * 3)/2 +1;
			if (newCapacity < minCapacity) {
				newCapacity = minCapacity;
				elementData = Arrays.copyOf(elementData, newCapacity);
			}
		}
		
	}
	
	public boolean push(E e) {
		ensureCapacity(size + 1);
		elementData[size++] = e;
		return true;
	}
	
	public E pop() {
		rangeCheck(size - 1);
		E result = (E)elementData[--size];
		elementData[size] = null;
		return result;
	}
	
	public boolean isEmpty() {
		return elementData == null || size == 0;
	}
	
	public E top() {
		rangeCheck(size - 1);
		return (E)elementData[size - 1];
	}
	
	@Override
	public E get(int index) {
		throw new UnsupportedOperationException("can not get");
	}

	@Override
	public int size() {
		return size;
	}

	@Override
	protected Object clone() throws CloneNotSupportedException {
		return super.clone();
	}

	@Override
	public Iterator<E> iterator() {
		return new stackIterator();
	}
	
	private class stackIterator implements Iterator<E> {

		@Override
		public boolean hasNext() {
			return size > 0;
		}

		@Override
		public E next() {
			return (E)elementData[--size];
		}

		@Override
		public void remove() {
			throw new UnsupportedOperationException("can not get");
		}
	}
}

 逻辑不复杂,小技巧是:重写 public Iterator<E> iterator() 方法。

  测试类如下:

public class StackTest {

	public static void main(String[] args) {
		Stack<Integer> st = new Stack<Integer>();
		for (int i = 0; i < 10; i++) {
			st.push(i);
		}
		
		
		for (int i = 0; i < 10; i++) {
			Integer val = st.pop();
			//Integer val = st.top();
			System.out.print(val);
			System.out.print('\t');
		}
		
		
		for (Integer val : st) {
			System.out.print(val);
			System.out.print('\t');
		}
		
	}

}

 

1
1
分享到:
评论
2 楼 bo_hai 2013-12-30  
string2020 写道
public boolean push(E e) { 
        ensureCapacity(size + 1); 
        elementData[size++] = e; 
        return true; 
}
这个要返回对象本身吧



public E push(E e) { 
        ensureCapacity(size + 1); 
        elementData[size++] = e; 
        return this; 
}


元芳,你怎么看。


元芳的看法是:在push时,就知道对象本身,所以不需要返回对象本身。需要知道的是:push是否成功,返回true表示成功。大人,你怎么看?
1 楼 string2020 2013-12-29  
public boolean push(E e) { 
        ensureCapacity(size + 1); 
        elementData[size++] = e; 
        return true; 
}
这个要返回对象本身吧



public E push(E e) { 
        ensureCapacity(size + 1); 
        elementData[size++] = e; 
        return this; 
}


元芳,你怎么看。

相关推荐

    用 Java 实现堆栈

    Java作为一种广泛使用的编程语言,提供了多种方式来实现堆栈,包括使用数组、链表以及内置的java.util.Stack类。下面我们将详细讨论如何在Java中实现堆栈,并探讨其相关知识。 首先,我们可以通过自定义一个类来...

    java中堆(heap)和堆栈(stack)有什么区别

    "Java 中堆(heap)和堆栈(stack)的区别" Java 中堆(heap)和堆栈(stack)是两个不同的内存区域,分别用于存储不同的数据类型和对象。堆栈(stack)是 Java 中的一种内存区域,用于存储基本类型的变量和对象的...

    java堆栈类使用实例(java中stack的使用方法)

    在Java编程语言中,Stack是一个内置的类,它位于java.util包下,专门用于实现堆栈数据结构。堆栈遵循“后进先出”(LIFO,Last In First Out)的原则,即最后压入栈的元素最先被弹出。这个类是Vector类的子类,因此...

    Stack3 java.rar_Stack3 java_palindrome

    标题中的"Stack3 java.rar_Stack3 java_palindrome"表明这是一个关于使用Java编程语言实现堆栈(Stack)数据结构,并且应用在判断回文(Palindrome)字符串上的项目。回文是指正读反读都能读通的字符串,如“level”...

    数据结构-Java中实现一个简单的堆栈结构Stack

    数据结构-Java中实现一个简单的堆栈结构Stack,通过数组实现堆栈数据结构,简单易懂,适合数据结构初学者学习理解堆栈的原理实现。

    基于 Java 实现的队列和堆栈

    - **基本操作**:Java中,`java.util.Stack`类实现了堆栈功能,提供了`push()`(压栈)、`pop()`(出栈)、`peek()`(查看顶部元素)等方法。 - **实现方式**:堆栈通常用数组或链表实现。Java的`Stack`类底层是...

    Android下各语言加callStack示例

    在Android系统中,理解和分析调用堆栈(call stack)对于开发者来说至关重要,尤其是在调试和性能优化时。本文将深入探讨如何在Android环境下为不同语言(C语言、C++、Java以及内核空间)添加并打印调用堆栈信息。 ...

    java 堆栈的演示程序

    `Stack`类是Java集合框架的一部分,提供了push、pop、peek等方法来操作元素,这与JVM内部的堆栈机制有相似之处,但请注意,`Stack`类并不等同于JVM的堆栈,它更多地是一种数据结构的实现。 通过分析这个演示程序,...

    数据结构-堆栈及其应用-Java代码实现

    这个过程可以通过自定义一个Stack类或者使用Java的java.util.Stack类来实现。通过这样的方法,我们能有效地解析和计算复杂的数学表达式。 总结起来,Java中的堆栈实现不仅可以帮助我们解决括号匹配问题,还能在编译...

    Java_Stack_Queue:Java中使用链表的堆栈和队列实现

    在Java中,`java.util.Stack` 类提供了对堆栈操作的支持,但它实际上是基于`Vector`类实现的,而不是链表。然而,为了理解链表如何实现堆栈,我们可以自己创建一个基于`java.util.LinkedList` 的堆栈类。`LinkedList...

    使用LinkedList模拟堆栈

    本文将详细讲解如何使用Java中的LinkedList类来模拟这两种数据结构,并实现其基本操作。 堆栈(Stack)是一种后进先出(LIFO, Last In First Out)的数据结构,它遵循“先进后出”的原则。常见的堆栈操作有压栈...

    Java利用堆栈实现简单四则运算

    在Java编程中,堆栈是一种基于“后进先出”(LIFO)原则的数据结构,常用于实现递归、表达式求值等场景。本文将详细介绍如何利用Java的堆栈数据结构来实现简单的四则运算。 四则运算,即加法(+)、减法(-)、乘法...

    打印JAVA堆栈的方法

    在深入探讨打印Java堆栈的方法之前,我们先来理解一下什么是Java堆栈以及为何需要打印它。Java堆栈是Java虚拟机(JVM)的一部分,主要用于存储方法调用的局部变量、操作数栈、动态链接信息和返回地址等。当一个方法...

    android ndk-stack使用说明。

    要查看C/C++代码的堆栈信息,可以使用`adblogcat`命令,并结合`ndk-stack`来获取具体的堆栈调用情况。具体命令格式如下: ```bash adb logcat | ndk-stack -sym ``` 其中,`&lt;path_to_symbol_directory&gt;`是指向...

    VoIP 使用SIP 和 Java实现

    在给定的压缩包文件"VoIP using SIP and Java.pdf"中,可能会详细介绍如何使用Java和SIP协议来构建一个VoIP应用程序,包括代码示例、配置指南和最佳实践。通过阅读这份文档,你可以深入理解VoIP和SIP的原理,以及...

    java堆栈详解 PDF 下载

    Java 堆栈详解 Java 是一种广泛使用的面向对象的编程语言,它的内存管理机制是其强大特性的关键部分。在 Java 中,内存分为两个主要区域:堆(Heap)和栈(Stack)。本文将深入探讨Java堆栈的概念、工作原理以及...

    常用数据结构(堆栈,队列,列表)JAVA代码

    - 在Java中,可以使用`java.util.Stack`类来实现堆栈操作,包括`push()`(压入元素)、`pop()`(弹出顶部元素)、`peek()`(查看顶部元素但不移除)和`empty()`(检查堆栈是否为空)等方法。 - `Stapel.java`可能...

    用java写的使用堆栈对表达式的计算

    这是使用java写的对于一个数学表达式字符串的分析与求解,使用的是int类型,对各种正确的输入都能有正确的输出,使用了stack来解决,希望能对大家有所帮助

    Sip注册 Java实现

    1. **初始化SIP Stack**:使用`javax.sip.SipFactory`创建SIP堆栈实例,然后设置参数,如监听端口、协议类型(UDP/TCP/TLS)等。 2. **创建SIP会话**:通过SIP堆栈创建`javax.sip.SipContext`对象,它代表了SIP会话...

Global site tag (gtag.js) - Google Analytics