阅读背景:

算法系列(一)背包、队列和栈(Java实现)

来源:互联网 

前言:算法第四版1.3节 背包、队列和栈 学习总结

Stack:

import java.util.Iterator;

/**
 * 动态调剂数组大小的栈
 * 功效: LIFO
 * @author Chuanjie
 * @param <T>
 *
 */
public class ResizingArrayStack<T> implements Iterable<T> {

	private T[] a = (T[])new Object[1];;
	private int n = 0;
	private void resize(int sz){
		T[] temp = (T[])new Object[sz];
		for(int i = 0;i < n;i++)
			temp[i] = a[i];
		a = temp;
	}
	public boolean isEmpty(){
		return n == 0;
	}
	public int size(){
		return n;
	}
	public void push(T item){
		if(n == a.length)
			resize(2*a.length);
		a[n++] = item;
	}
	public T pop(){		
		T item = a[--n];
		a[n] = null;//释放援用, 避免对象游离,垃圾回收器可以将其回收
		if(n > 0 && n == a.length/4)
			resize(a.length/2);
		return item;
	}
	@Override
	public Iterator<T> iterator() {
		return new ReverseArrayIterator();
	}
	private class ReverseArrayIterator implements Iterator<T>{
		private int i = n;
		@Override
		public boolean hasNext(){
			return i > 0;
		}
		@Override
		public T next() {			
			return a[--i];
		}
		@Override
		public void remove() {
		}
	}
}import java.util



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: