棧和隊列


棧是先存進去的數據只能最后被取出來,是FILO(First In Last Out,先進后出)。

棧結構.png

用鏈表實現棧:

class Node<E>{
    Node<E> next = null;
    E data;
    public Node(E data) {this.data = data;}
}
public class Stack<E>{
    Node<E> top = null;
    public boolean isEmpty(){
      return top ==  null;
    }
    public void push(E data){
        Node<E> newNode = new Node<E>(data);
        newNode.next = top;
        top = newNode;
    }
    public E pop(){
        if(this.isEmpty()){
            return null;
        }
        E data = top.data;
        top = top.next;
        return data;
    }
    public E peek(){
        if(isEmpty()) {
            return null;
        }
        return top.data;
    }
}

隊列是FIFO(First In First Out,先進先出),它保持進出順序一致。

隊列結構.png
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;
            taile = 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

注:
如果需要實現多線程安全,要對操作方法進行同步,用synchronized修飾方法

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 棧和隊列是兩種應用非常廣泛的數據結構,它們都來自線性表數據結構,都是“操作受限”的線性表。 棧 棧(Stack):...
    karlsu閱讀 815評論 0 1
  • 棧 棧的英文單詞是Stack,它代表一種特殊的線性表,這種線性表只能在固定一端(通常認為是線性表的尾端)進行插入,...
    Jack921閱讀 1,630評論 0 5
  • 一、隊列的定義 【定義】:隊列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表?!咎卣鳌浚?..
    NotFunGuy閱讀 710評論 0 3
  • 再過十幾個小時,我又要離開這兒了,嗯,我又要和你相隔千里了,盡管雖然這段時間我們并沒有什么交集,但至少想到你也在萬...
    穿白襯衫的小狐貍閱讀 324評論 0 0
  • 細細碎碎的夕陽落在往遠處延伸的土路上, 眼前被這暖暖的金黃色包裹了,大路兩旁的鄉(xiāng)間草叢也打上了傍晚黃昏的金粉,透著...
    我及我閱讀 342評論 0 1

友情鏈接更多精彩內容