1. 程式人生 > 實用技巧 >自定義線性結構-佇列

自定義線性結構-佇列

/**
 * @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()){ return
null; } 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());
}