自定義線性結構-佇列
阿新 • • 發佈:2020-12-31
/** * @desc: 佇列--單鏈表實現 * @author: 毛會懂 * @create: 2020-12-30 10:55:00 **/ public class MyQueue<T> implements Iterable<T>{ private Node head; private Node last; //尾節點 private Integer count; MyQueue(){ head = new Node(null,null); last = null; count = 0; }//進佇列 public void enter(T t){ Node newNode = new Node(t,null); if(isEmpty()){ head.next = newNode; }else { last.next = newNode; } last = newNode; count++; } //出佇列 public T del(){ if(isEmpty()){ returnnull; } Node node = head.next; head.next = node.next; count--; //只有一個元素出佇列 if(isEmpty()){ last = null; } return node.t; } //佇列是否為空 public Boolean isEmpty(){ return count == 0; } //佇列的大小 public Integer size(){return count; } @Override public Iterator<T> iterator() { return new MyIterator(); } private class MyIterator implements Iterator{ private Node node; public MyIterator(){ node = head; } @Override public boolean hasNext() { return node.next != null; } @Override public T next() { node = node.next; return node.t; } } private class Node{ private T t; private Node next; public Node(T t, Node next) { this.t = t; this.next = next; } } }
測試:
public static void main(String[] args) {
MyQueue<String> myQueue = new MyQueue<>();
myQueue.enter("abc");
myQueue.enter("bddd");
for (String s : myQueue) {
System.out.println(s);
}
System.out.println("--------");
System.out.println("是否為空:" + myQueue.isEmpty());
System.out.println("佇列大小:" + myQueue.size());
System.out.println(myQueue.del());
System.out.println(myQueue.del());
System.out.println("------");
myQueue.enter("sss");
myQueue.enter("bb");
myQueue.enter("cc");
myQueue.forEach(System.out::println);
System.out.println(myQueue.del());
}