包含顺序队列,链表队列的实现
package Structure.Queue;
/*Author: CPlusPlus小码农
*If any question,
*Please contact:
* http://daixiecplusplus.blog.163.com/
* QQ:1926742804
*/
public interface QueueInterface<E extends Comparable<E>> {
public void Enqueue(E value);
public E Dequeue();
public void Clear();
}
package Structure.Queue;
/*Author: CPlusPlus小码农
*If any question,
*Please contact:
* http://daixiecplusplus.blog.163.com/
* QQ:1926742804
*/
class Node<E extends Comparable<E> >
{
Node<E> next_;
E data_;
public Node(E data, Node<E> next)
{
data_ = data;
next_ = next;
}
}
public class ListQueue<E extends Comparable<E> > implements QueueInterface<E> {
private Node<E> front_;
private Node<E> rear_;
public ListQueue(){front_ = rear_ = null;}
private boolean IsEmpty(){return front_ == null;}
@Override
public void Enqueue(E value) {
// TODO Auto-generated method stub
if(IsEmpty())
{
front_ = rear_ = new Node<E>(value,null);
}
else
{
Node<E> n = new Node<E>(value,null);
rear_.next_ = n;
rear_ = n;
}
}
@Override
public E Dequeue() {
// TODO Auto-generated method stub
if(IsEmpty()) return null;
else
{
Node<E> n = front_;
front_ = n.next_;
return n.data_;
}
}
@Override
public void Clear() {
// TODO Auto-generated method stub
front_ = rear_ = null;
}
}
package Structure.Queue;
/*Author: CPlusPlus小码农
*If any question,
*Please contact:
* http://daixiecplusplus.blog.163.com/
* QQ:1926742804
*/
public class SeqCircleQueue<E extends Comparable<E> > implements QueueInterface<E> {
private Object[] data_;
private int front_;
private int rear_;
private int maxSize_;
public SeqCircleQueue(int maxSize)
{
maxSize_ = maxSize+1;
data_ = new Object[maxSize_];
front_ = rear_ = 0;
}
private void DoubleSize()
{
Object[] newData = new Object[2*maxSize_];
int i = 0;
int k = 0;
for(i = front_ , k = front_; i != rear_ ;)
{
newData[k] = data_[i];
i++;
k++;
if(i == maxSize_) i = 0;
}
data_ = newData;
maxSize_ = 2*maxSize_;
rear_ = k;
}
private boolean IsEmpty(){return front_ == rear_;}
private boolean IsFull()
{
int num = (rear_ + 1 ) % (maxSize_);
return num == front_;
}
@Override
public void Enqueue(E value) {
// TODO Auto-generated method stub
if(IsFull())
{
DoubleSize();
}
data_[rear_] = value;
rear_++;
if(rear_ == maxSize_) rear_ = 0;
}
@Override
public E Dequeue() {
// TODO Auto-generated method stub
if(!IsEmpty())
{
E e = (E)data_[front_];
front_++;
if(front_ == maxSize_) front_ = 0;
return e;
}else{
return null;}
}
@Override
public void Clear() {
// TODO Auto-generated method stub
rear_ = front_;
}
}
package Structure.Queue;
/*Author: CPlusPlus小码农
*If any question,
*Please contact:
* http://daixiecplusplus.blog.163.com/
* QQ:1926742804
*/
public class QueueTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
QueueInterface<Integer> queue = new SeqCircleQueue<Integer>(2);
queue.Enqueue(1);
queue.Enqueue(2);
Integer t = queue.Dequeue();
System.out.println(t);
t = queue.Dequeue();
System.out.println(t);
queue.Enqueue(4);
queue.Enqueue(5);
queue.Enqueue(6);
t = queue.Dequeue();
System.out.println(t);
t = queue.Dequeue();
System.out.println(t);
t = queue.Dequeue();
System.out.println(t);
queue.Clear();
t = queue.Dequeue();
System.out.println(t);
queue.Enqueue(1);
queue.Enqueue(2);
t = queue.Dequeue();
System.out.println(t);
System.out.println();
System.out.println();
System.out.println();
QueueInterface<Integer> queue2 = new ListQueue<Integer>();
queue2.Enqueue(1);
queue2.Enqueue(2);
System.out.println(queue2.Dequeue());
System.out.println(queue2.Dequeue());
System.out.println(queue2.Dequeue());
queue2.Enqueue(3);
System.out.println(queue2.Dequeue());
queue2.Enqueue(4);
queue2.Enqueue(5);
queue2.Clear();
System.out.println(queue2.Dequeue());
}
}