算法1.4背包API
public class Bag<Item> implements Iterable <Item> | ||||||
private Node first 链表的首节点 private int N
| ||||||
public boolean isEmpty() public int size() public void add(Item item) 同入栈方法 @Override public Iterator<Item> iterator()
|
package _1_3linkedList;
import java.util.Iterator;
/*算法1.4 背包
* 背包是一种不支持从中删除元素的集合数据类型
* 目的是帮助用例收集元素并迭代遍历所有收集到的元素
*/
public class Bag<Item> implements Iterable <Item>
{
private Node first; /*链表的首节点*/
private int N;
private class Node
{
Item item;
Node next;
}
public boolean isEmpty()
{
return N==0;
}
public int size()
{
return N;
}
public void add(Item item) /*同入栈方法*/
{
Node oldfirst;
oldfirst=first;
first=new Node(); /*first指向一个新的节点*/
first.item=item;
first.next=oldfirst;
N++;
}
@Override
public Iterator<Item> iterator()
{
return new ListIterator();
}
public class ListIterator implements Iterator<Item>
{
private Node current=first;
@Override
public boolean hasNext()
{
return current!=null;
}
@Override
public Item next()
{
Item item=current.item;
current=current.next;
return item;
}
}
}
package _1_3linkedList;
import java.util.Scanner;
/*算法1.4 背包-测试用例
*/
public class TestBag
{
public static void main(String[] args)
{
Bag<String> bag=new Bag<String>();
Scanner sc=new Scanner(System.in);
while(true)
{
String s=sc.nextLine();
if(s.equals("eof")) /*输入终止*/
break;
else
bag.add(s);
}
for(String s:bag)
System.out.println(s);
sc.close();
}
}
1
2
3w
e
r
s
dqew
eof
dqew
s
r
e
3w
2
1