问答题 如何实现队列
【正确答案】
【答案解析】与栈类似,队列也可以采用数组和链表两种方式来实现。下面给出采用链表方式实现队列的代码:
class Node<E>{
Node<E>next=null;
E data;
public Node(E data){this.data=data;}
}
public class MyQueue<E>{
private Node<E>head=null;
private Node<E>tail=null;
public boolean isEmpty(){
return head==tail;
}
public void put(E data){
Node<E>newNode=new Node<E>(data);
if(head==null&&tail==null)//队列为空
head=tail=newNode;
else{
tail.next=newNode;
tail=newNode;
}
}
public E pop(){
if(this.isEmpty())
return null;
E data=head.data;
head=head.next;
return data;
}
public int size(){
Node<E>tmp=head;
int n=0;
while(tmp!=null){
n++;
tmp=tmp.next;
}
return n;
}
public static void main(String[]args){
MyQueue<Integer>q=new MyQueue<Integer>();
q.put(1);
q.put(2);
q.put(3);
System.out.println("队列长度为:"+q.size());
System.out.println("队列首元素:"q.pop());
System.out.println("队列首元素:"+q.pop());
}
}
运行结果为:
队列长度为:3
队列首元素:1
队列首元素:2
下面介绍数组实现队列的方式,为了实现多线程安全,增加了对队列操作的同步,实现代码如下:
public class MyQueue<E>{
private LinkedList<E>list=new LinkedList<E>();
private int size=0;
public synchronized void put(E e){
ist.addLast(e);
size++;
}
public synchronized E pop(){
size--;
return list.removeFirst();
}
public synchronized boolean empty(){
return size==0;
}
public synchronized int size(){
return size;
}
}