數據結構之鏈棧(二)

一:鏈棧結點

package linkedstack;

/**
 * @packagname:linkedstack
 * @classname:LinkedStackNode
 * @date:2017/1/24
 * @author:cullinans
 * @des:鏈棧結點
 */

public class LinkedStackNode<T> {
    T data;
    LinkedStackNode<T> next;
}

二:創建鏈棧結點的工廠類

package linkedstack;

/**
 * @packagname:linkedstack
 * @classname:LinkedStackNodeFactory
 * @date:2017/1/25
 * @author:cullinans
 * @des:創建鏈式存儲的棧結點的工廠
 */

public class LinkedStackNodeFactory {
    public static LinkedStackNode createLinkedStackNode(){
        return new LinkedStackNode();
    }
}

三:鏈棧的入棧,出棧操作

package linkedstack;

/**
 * @packagname:linkedstack
 * @classname:LinkedStackList
 * @date:2017/1/24
 * @author:cullinans
 * @des:鏈式存儲結構的棧
 */

public class LinkedStackList<T> {
    int count;
    LinkedStackNode<T> top;//棧頂指針

    //入棧
    public int push(LinkedStackList<T> l,T ele){
        LinkedStackNode<T> tempnode=l.top;//定義一個臨時引用指向棧頂元素
        LinkedStackNode linkedStackNode = LinkedStackNodeFactory.createLinkedStackNode();//創建一個新結點
        linkedStackNode.data=ele;//給新結點賦值
        linkedStackNode.next=tempnode;//原結點賦值給新結點的後繼
        l.top=linkedStackNode;//新結點賦值給棧頂元素引用
        count++;//棧長度加1
        return 0;
    }
    //出棧
    public T pop(LinkedStackList<T> l,T ele){
        LinkedStackNode<T> tempNode=l.top;//定義一個結點,指向頭結點
        if(l.top==null){//如果頭結點爲空
            return null;//彈出空
        }
        ele=tempNode.data;//如果頭結點不爲空
        l.top=tempNode.next;//頭結點的後繼賦值爲棧頂結點
        l.count--;//元素減一
        return ele;//返回彈出的元素
    }
    //main方法用來測試
    public static void main(String[] args){
        LinkedStackList<Integer> ls=new LinkedStackList<Integer>();
        LinkedStackNode<Integer> topnode=LinkedStackNodeFactory.createLinkedStackNode();
        topnode.data=1;
        ls.top=topnode;
        Integer[] elems=new Integer[]{2,3,4,5};
        for(int i=0;i<elems.length;i++){
            ls.push(ls,elems[i]);
        }
        ls.printEle(ls);

    }
    //打印出棧元素
    public void printEle(LinkedStackList<T> t){
        LinkedStackNode<T> tempnode=t.top;
        T tempdata = null;
        while(tempnode!=null){
            System.out.println(t.pop(t,tempdata));
            tempnode=tempnode.next;
        }
    }
}
發佈了46 篇原創文章 · 獲贊 48 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章