当前位置: 代码迷 >> 综合 >> 下压(LIFO)栈,ResizingArrayStack
  详细解决方案

下压(LIFO)栈,ResizingArrayStack

热度:43   发布时间:2023-10-08 19:49:34.0

能够动态调整数组大小的实现:耗时跟栈大小成正比

package com.vadonmo.exp.example;import java.util.Iterator;/*** 下压(LIFO)栈,能够动态调整数组大小的实现* */
public class ResizingArrayStack<Item> implements Iterable<Item> {// 栈元素private Item[] a = (Item[]) new Object[1];// 栈元素数量private int N = 0;// 是否为空public boolean isEmpty() {return N == 0;}// 大小public int size() {return N;}// 动态调整大小public void resize(int max) {// 将原来的元素全部移到新数组Item[] temp = (Item[]) new Object[max];for (int i = 0, len = temp.length; i < len; i++) {temp[i] = a[i];}a = temp;}// 增加元素public void push(Item item) {if (N == a.length) {resize(2 * a.length);}a[N++] = item;}// 删除元素public Item pop() {Item item = a[--N];a[N] = null;if (N > 0 && N == a.length / 4) {resize(a.length / 2);}return item;}@Overridepublic Iterator<Item> iterator() {return new ReverseArrayIterator();}private class ReverseArrayIterator implements Iterator<Item> {private int i = N;@Overridepublic boolean hasNext() {return i > 0;}@Overridepublic Item next() {return a[--i];}@Overridepublic void remove() {}}}