版权声明:文章为作者原创,若要转载请获得作者同意。尊重版权,从你我做起! https://blog.csdn.net/qq_37768971/article/details/88214734
一、任务目标
用链表实现队列的基本功能:
1.getSize;
2.getFront;
3.isEmpty;
4.enqueue;
5.dequeue;
二、实现代码:
1.接口部分:
package IMUHERO;
public interface Queue<E> {
E getFront();
boolean isEmpty();
void enqueue(E e);
E dequeue();
int getSize();
}
2.LinkedListQueue部分:
package IMUHERO;
/*
* @作者:IMUHERO
* @时间:2019/3/6
* @功能:用链表实现队列
* */
public class LinkedListQueue<E>implements Queue<E> {
private class Node{
E e;
Node next;
public Node(E e,Node next){
this.e=e;
this.next=next;
}
public Node(E e){
this(e,null);
}
public Node(){
this(null,null);
}
@Override
public String toString() {
return e.toString();
}
}
private Node head;
private Node tail;
private int size ;
public LinkedListQueue(){
head=null;
tail=null;
size=0;
}
@Override
public int getSize() {
return size;
}
@Override
public boolean isEmpty() {
return size==0;
}
@Override
public E getFront() {
if (isEmpty())throw new IllegalArgumentException("The queue is empty!");
return head.e;
}
@Override
public void enqueue(E e) {
if (tail==null){
tail= new Node(e);//表示Node(e,null),新建一个节点,节点内元素为e,先把这个节点的next指向null,再把这个节点赋值给tail;
head=tail;
}
else {
tail.next=new Node(e);
tail=tail.next;
}
size++;
}
@Override
public E dequeue() {
if (isEmpty())throw new IllegalArgumentException("The queue is empty,can not dequeue any element!");
Node retNode=head;
head =retNode.next;
retNode.next=null;
if (head==null)tail=null;
size--;
return retNode.e;
}
@Override
public String toString() {
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append("queue|front[");
for(Node cur=head;cur!=null;cur=cur.next)
stringBuilder.append(cur+"->");
stringBuilder.append("null]tail");
return stringBuilder.toString();
}
}
3.测试部分:
package IMUHERO;
public class Main {
public static void main(String[] args) {
// write your code here
LinkedListQueue queue=new LinkedListQueue();
System.out.println(queue);
for (int i=0;i<5;i++){
queue.enqueue(i);
System.out.println(queue);
}
for (int i=0;i<3;i++){
queue.dequeue();
System.out.println(queue);
}
System.out.println("队列的大小为:"+queue.getSize());
System.out.println("队首第一个元素为:"+queue.getFront());
}
}
三、最终结果:
queue|front[null]tail
queue|front[0->null]tail
queue|front[0->1->null]tail
queue|front[0->1->2->null]tail
queue|front[0->1->2->3->null]tail
queue|front[0->1->2->3->4->null]tail
queue|front[1->2->3->4->null]tail
queue|front[2->3->4->null]tail
queue|front[3->4->null]tail
队列的大小为:2
队首第一个元素为:3
符合链表实现队列的要求和功能!