棧和隊列的java簡單實現


  今天看了一本書《啊哈 算法》,書的內容不多,一共兩章,第一章是常見的排序算法包括桶排序、冒泡排序和快速排序,這些事基礎的排序算法網上有很多資料說明,這里主要說第二章棧,對列,鏈表,書上使用c語言實現的,這里用java代碼自己實現下,可能略有不同

  棧:這是一個先進后出的數據結構,生活中類似的瀏覽器的返回上一頁就可以利用此結構實現,代碼如下:

public class Stack<T> {
    private Object[] data;//存儲數據
    private int top;//表示棧頂元素
    public Stack(){
        data = new Object[100];//為了說明原理隨意指定
        top =-1;
    }
    public synchronized void  put(T t){    //壓棧
       data[data.length] = t;
        top++;
    }
    public synchronized T pop(){    //出棧
        if(top<0){
            return null;
        }
        T t = (T) data[top];
        top --;
        return t;
    }
}

 

 這只是我自己的Java實現只說明原理,但實際在java中是利用vector來存儲數據的,我們知道vector其實是一個線程安全的ArrayList,而ArrayList的底層也是一個數組,所以原理上大同小異

  隊列:隊列其實就是我們生活中的排隊現象,先進入的先出,后進入的后出,代碼實現如下:

  

public class Queue<T> {
    private  Object[] data;  //存儲數據
    private int head; //
    private int tail;   //

    public Queue(){
        data = new Object[100];//為了說明原理隨意指定
        head =1;
        tail =1;
    }
    public void put(T t){
        data[tail] =t;
        tail++;
    }
    public T get(){
        T t =(T) data[head];
        head ++;
        return t;
    }
}

如上所示,也只是說明原理,其實在java jdk中也有許多不同的對列,並且對列可以由數組實現,也可以由鏈表實現,下面介紹鏈表

鏈表是一個類似於現實中串項鏈的數據結構,前一個數據指向后一個數據,當然也可以后一個數據指向前一個數據,這就是雙向鏈表,這里不做討論

public class MyNode<T> {
private Node<T> headNode ;
public MyNode(T t){
headNode = new Node<>(t,null);
}
public MyNode(){

}
private static class Node<E> {
Object e;
Node<E> next;
Node(E element, Node<E> next) {
this.e = element;
this.next = next;
}
}
public void put(T t){
if(headNode==null){
headNode = new Node<>(t,null);
}else {
headNode= new Node<>(t,headNode);
}
}
public T get(int index){
Node node = headNode;
for(int i=2;i<index;i++){
node= node.next;
}
T t = (T) node.e;
return t;
}
}


以上就是用Java實現的簡單鏈表,還有雙向鏈表是一個元素指向前一個元素和后一個元素,原理大概相同,這里可以看書鏈表中取固定位置的數據是非常麻煩的,必須從第一個開始依次查找,這也就是linklist不用for(int i=0;i++;i<size())遍歷的原因,因為linklist的底層就是通過鏈表來實現的。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM