下压栈(LIFO) (能动态调整数组大小的实现)
2014-05-10 15:08
281 查看
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 的值设为null 避免对象游离,及时回收内存 a =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
相关文章推荐
- 下压栈(能动态调整数组大小的实现)
- 下压(LIFO)栈(能够动态调整数组大小的实现)
- 下压栈(能够动态调整数组大小的实现)
- 算法1.1 下压(LIFO)栈 (能够动态调整数组大小的实现)
- 栈的实现,动态调整数组大小
- 下压栈——能够动态调整数组大小的实现
- 算法(第四版)学习笔记之java实现能够动态调整数组大小的栈
- 算法(第四版)学习笔记之java实现可以动态调整数组大小的栈
- 算法1.1 下压栈(LIFO)能动态调整数组的大小
- 栈的数组实现(动态调整数组大小) JAVA版本
- 下压栈:动态数组实现
- iOS开发笔记-根据frame大小动态调整fontSize的自适应文本及圆形进度条控件的实现
- 实现控件拖动 及 动态调整控件大小
- 算法4 ---栈(动态调整数组大小)
- ios7:实现类似于人人、safari的可动态调整大小的导航条以及类似于雅虎天气的全透明导航条
- Android图片大小调整动态实现方法(bitmap)
- 算法(第四版) 能够动态调整数组大小的队列数据结构
- java算法之下压栈来动态调整数组大小
- Vector容器实现未知大小的数组动态存储数据
- Java动态调整数组大小