首页 > 代码库 > 下压栈(LIFO) (能动态调整数组大小的实现)
下压栈(LIFO) (能动态调整数组大小的实现)
import java.util.*; // 下压栈(LIFO) 能动态调整数组大小的实现 public class ResizeArrayStack<Item> implements Iterable<Item> { @SuppressWarnings("unchecked") private Item[] a=(Item[]) new Object[1]; private int N; public boolean isEmpty() { return N==0; } public int size() { return N; } public void resize(int max){ // 将栈中元素移动到大小为max的新数组中 @SuppressWarnings("unchecked") 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(2*a.length); } a[N++]=item; } public Item pop(){ Item item=a[--N]; // 将a[N]的值设为null 避免对象游离,及时回收内存 a[N]=null; if(N>0 && N==(a.length/4)) resize(a.length/2); return item; } @Override public Iterator<Item> iterator() { return new ReverseArrayIterator(); } // 逆序迭代遍历数组 // Iterator类必须包含 hasNext() 和 next() 两个方法 // 嵌套类可以访问包含它的类的实例变量 public class ReverseArrayIterator implements Iterator<Item>{ private int i=N; @Override public boolean hasNext() { return i>0; } @Override public Item next() { return a[--i]; } @Override public void remove() {} // 可以不用实现,避免迭代中有修改数据的操作 } public static void main(String[] args) { ResizeArrayStack<String> s=new ResizeArrayStack<String>(); Scanner cin=new Scanner(System.in); System.out.println("Input a String end with $:"); while(cin.hasNext()){ String item=cin.next(); if(item.equals("$")){ break; } else { s.push(item); } } // foreach语句是while语句的一种简写方式 System.out.println("display by for:"); for(String str : s){ System.out.print(str+" "); } System.out.println(); // which System.out.println("display by which:"); Iterator<String> it=s.iterator(); while(it.hasNext()){ String i=it.next(); System.out.print(i+" "); } } }
// Test example Input a String end with $: 123 456 789 dut $ display by for: dut 789 456 123 display by which: dut 789 456 123
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。