Coursera算法Programming Assignment 2: Deques and Randomized Queues
代码实现
题目链接:http://coursera.cs.princeton.edu/algs4/assignments/queues.html
本次编程要求编写3个类,分别是Deque类、RandomizedQueue类以及Permutation类。Deque类为数据提供双向储存结构,要求在结构始末都可实现数据的增减操作。RandomizedQueue类需要实现随机取出数据,Permutation类主要对RandomizedQueue类进行测试。
Deque类
Deque类可采用双向链表实现,类似于向后增加索引last,可在前增加索引pre,便可实现双向操作。
//Deque类
import java.util.NoSuchElementException ;
import java.util.Iterator ;
public class Deque<Item> implements Iterable<Item> {
private Node<Item> first , last ;
private int n ;
private static class Node<Item> {
// construct an empty deque
private Item item ;
private Node<Item> pre ;
private Node<Item> next ;
}
public Deque(){
n=0;first=null;last=null;
}
public boolean isEmpty(){
return n==0;} // is the deque empty?
public int size(){
return n;} // return the number of items on the deque
public void addFirst(Item item){
// add the item to the front
if(item==null) throw new IllegalArgumentException();
Node<Item> oldfirst=first;
first=new Node<Item>();
first.pre=null;first.item=item;
if(isEmpty()) {
first.next=null;last=first;
}
else {
first.next=oldfirst;oldfirst<