一、任务目标
用链表实现队列的基本功能:
1.getSize;
2.getFront;
3.isEmpty;
4.enqueue;
5.dequeue;
二、实现代码:
1.接口部分:
package IMUHERO;
public interface Queue {
E getFront();
boolean isEmpty();
void enqueue(E e);
E dequeue();
int getSize();
}
2.LinkedListQueue部分:
package IMUHERO;
/*
* @作者:IMUHERO
* @时间:2019/3/6
* @功能:用链表实现队列
* */
public class LinkedListQueueimplements Queue {
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
符合链表实现队列的要求和功能!
注:关于数据结构的所有代码都放在我的Github上,有需要的同学可以自行Fork,如果觉得还不错,可以打个☆Star哦~~~