您的位置:首页 > 其它

算法(第四版)课后练习 1.3.29

2016-04-25 00:00 323 查看
摘要: 用环形链表实现Queue

package com.zt.data;

import java.util.Iterator;

import javax.swing.plaf.basic.BasicScrollPaneUI.HSBChangeListener;

import edu.princeton.cs.algs4.In;

public class Queue<Item> implements Iterable<Item>{

private Node first;
private Node last;
private int N;

private class Node<Item>{

Item item;
Node next;
};

public Queue(){

first = null;
last =null;
}

public boolean isEmpty(){

return first==null;
}

public int size(){

return N;
}

public void enqueue(Item item){

Node node = new Node();
node.item = item;
if(isEmpty()){
first = node;
last = node;
}else{

last.next = node;
last = node;
}
N++;
}

public Item dequeue(){

if(isEmpty()) throw new RuntimeException("Queue is null!!!");
Item item = (Item) first.item;
first = first.next;

N--;
return item;
}

public  String toString(){

StringBuilder s = new StringBuilder();
for(Item item:this){

s.append(item+" ");
}

return s.toString();
}

public static void main(String[] args) {

Queue<Integer> queue = new Queue<Integer>();
for(int i=0;i<10;i++){
queue.enqueue(i);
}

System.out.println(queue.toString()+ "Size:" + queue.size());
System.out.println(queue.dequeue());
System.out.println(queue.dequeue());
System.out.println(queue.toString()+ "Size:" + queue.size());

}

@Override
public Iterator<Item> iterator() {
return new ListIterator();
}

private class ListIterator implements Iterator<Item>{

private Node current = first;

@Override
public boolean hasNext() {

return current!=null;
}

@Override
public Item next() {
if(!hasNext()){

throw new RuntimeException("has not Next");
}
Item item = (Item) current.item;
current = current.next;
return item;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: