算法学习之基础(背包 列队 栈) 习题1.3.34随机背包的实现
背包的API
void add()
int size()
boolean isEmpty()
背包的遍历用Iterator
代码、
1 package gh; 2 3 import java.util.Iterator; 4 /** 5 * 随机背包 6 * @author ganhang 7 * 8 * @param <T> 9 */ 10 public class RandomBag<T>implements Iterable<T> { 11 private int n;//元素数量 12 private T [] bag; 13 public RandomBag(int max){ 14 bag=(T[])new Object[max]; 15 } 16 public boolean isEmpty(){ 17 return n==0; 18 } 19 20 public int size(){ 21 return n; 22 } 23 public void add(T item){ 24 bag[n++]=item; 25 } 26 27 @Override 28 public Iterator<T> iterator() { 29 // TODO Auto-generated method stub 30 return new RandomBagIterator(); 31 } 32 private class RandomBagIterator implements Iterator<T>{ 33 public RandomBagIterator(){ 34 shuffle(bag);//构造函数中随机排列下数组中的元素 35 } 36 private void shuffle(T b[]){//数组的随机排序 37 int N=b.length; 38 for(int i=0;i<N;i++){ 39 int r=i+(int)(Math.random()*(N-i)); 40 T temp=b[i]; 41 b[i]=b[r]; 42 b[r]=temp; 43 } 44 } 45 @Override 46 public boolean hasNext() { 47 // TODO Auto-generated method stub 48 return n!=0; 49 } 50 51 @Override 52 public T next() { 53 // TODO Auto-generated method stub 54 return bag[--n]; 55 } 56 57 @Override 58 public void remove() { 59 // TODO Auto-generated method stub 60 61 } 62 63 } 64 65 }
随便写写。一点学习心得。。。--如果本文章没有注明转载则为原创文章,可以随意复制发表,但请注明出处与作者