java利用动态数组实现栈(先进后出)
程序员文章站
2024-03-18 12:04:34
...
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;}
private void resize(int max){
Item[] temp=(Item[])new Object[max];
for(int i=0;i<N;i++){
temp[i]=a[i];
}
a=temp;
}
public void push(Item item){
if(N==a.length){
resize(a.length*2);
}
a[N++]=item;
}
public Item pop(){
if(N==0){
return null;
}
Item item=a[N--];
a[N]=null;
if(N>0 && N==a.length/4){
resize(a.length*2);
}
return item;
}
public Iterator<Item> iterator(){
return new ReverseArrayIterator();
}
private class ReverseArrayIterator implements Iterator<Item>{
private int i=N;
@Override
public boolean hasNext() {
return i>0;
}
@Override
public Item next() {
return a[--i];
}
}
}
测试:
public static void main(String[] args) {
ResizingArrayStack<String> obj=new ResizingArrayStack<>();
obj.push("a");
obj.push("b");
obj.push("c");
Iterator<String> iter=obj.iterator();
while (iter.hasNext()){
String temp=iter.next();
System.out.println(temp);
}
上一篇: 数据结构-线性结构之队列
下一篇: queue的清空方式