栈
栈也称下压栈,是一种先进后出的集合数据类型,在现代计算机科学领域有着广泛的应用。
接口设计
public interface StackInterface<Item> extends Iterable<Item> {//实现Iterable,可迭代,可Foreach循环
/** 入栈 */
void pop(Item item);
/** 出栈 */
Item push();
/** 元素个数 */
int size();
/** 栈是否为空 */
boolean isEmpty();
}
具体实现
public class Stack<Item> implements StackInterface<Item> {
private int idx = 0;//有效界限的索引,左边为有效数据
private Item[] data;//存放数据的数组
public Stack(int initSize) { data = (Item[]) new Object[initSize]; }
public void push(Item item) {
if (idx >= data.length) resize(data.length * 2);
data[idx++] = item;
}
public Item pop() {
if (idx > 0 && idx <= data.length / 4) resize(data.length / 2);
return isEmpty() ? null : data[--idx];
}
public int size() {return idx;}
public boolean isEmpty() { return idx == 0;}
public Iterator<Item> iterator() {
return new Iterator<Item>() {
private int index = idx;
public boolean hasNext() {return index > 0;}
public Item next() {return hasNext() ? data[--index] : null;}
public void remove() {}
};
}
private void resize(int newSize) {//重新调整数组大小
Item[] temp = (Item[]) new Object[newSize];
for (int i = 0; i < idx; i++) {
temp[i] = data[i];
}
data = temp;
}
}
总结
此栈的实现入栈弹栈,可迭代,支持泛型,并且能动态调整大小,提高空间利用效率。