中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java實現棧的數組和鏈表的方法

發布時間:2020-06-23 11:05:14 來源:億速云 閱讀:169 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關java實現棧的數組和鏈表的方法,以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

棧的介紹

棧,是一種先進后出(FILO)的線性數據結構,主要操作為入棧和出棧。

棧底:最早進入的元素存放的位置。

棧頂:最后進入元素存放的位置(有些棧中將棧頂表示為棧頂元素的下一位置)。

棧的數組的實現

示例如下:

public class MyStack {
    private int[] array;
    private int top = -1;//用top來表示棧頂,指向棧頂元素
 
    public MyStack(int capacity){
        array = new int[capacity];
    }
 
    public void push(int data) throws Exception{
        if(top >= array.length-1)
            throw new IndexOutOfBoundsException("邊界超過范圍!");
        else
            array[++top] = data;//先將指針上移,后賦值
    }
 
    public int pop() throws Exception{
        int temp;
        if(top < 0)
            throw new IndexOutOfBoundsException("棧為空,不能再刪除元素!");
        else{
            temp = array[top];
            array[top--] = 0;
        }
        return temp;
    }
 
    public void output(){
        for(int i = 0; i <= top; i++){
            System.out.println(array[i]);
        }
    }
 
    public static void main(String[] args) throws Exception{
        MyStack myStack = new MyStack(5);
        myStack.push(1);
        myStack.push(3);
        myStack.push(2);
        myStack.pop();
        myStack.push(4);
        myStack.pop();
        myStack.output();
    }
}

棧的鏈表實現

棧用鏈表來實現時,和數組實現不同的是,在出棧時,因為我們只有一個top節點來指向棧頂,因此需要從頭到尾遍歷一遍,來找到棧頂的前一個位置。

具體的實現如下:

public class MyStack_LinkList {
    private static class Node{
        int data;
        Node next;
        Node(int data){
            this.data = data;
        }
    }
    private Node head;//定義鏈表的頭結點
    private Node top;
    private int size;//定義棧中的元素個數
    private int maxSize;
 
    private MyStack_LinkList(int capacity){
        maxSize = capacity;
    }
 
    public void push(int data) throws Exception{
        if(size >= maxSize){
            throw new IndexOutOfBoundsException("棧已滿,不能再入棧!");
        }
        Node pushedNode = new Node(data);
        if(size == 0){
            head = pushedNode;
            top = pushedNode;
            pushedNode.next = null;
        }
        else{
            top.next = pushedNode;
            pushedNode.next = null;
            top = pushedNode;
        }
        size++;
    }
 
    public int pop() throws Exception{
        int temp = 0;
        if(size <= 0)
            throw new IndexOutOfBoundsException("棧為空,不能再出棧!");
        else if(size == 1){//當棧中元素個數為1時,單獨討論,需將頭節點置為空
            temp = top.data;
            top = null;
        }
        else{
            temp = top.data;
            top = get(size - 1);//此時需遍歷一遍鏈表,用top指向需出棧的上一個節點
            top.next = null;
        }
        size--;
        return temp;
 
    }
 
    /*
    從頭到尾查找元素
     */
    public Node get(int index){
        Node temp = head;
        for(int i = 1; i < index; i++){
            temp = temp.next;
        }
        return temp;
    }
 
    public void output(){
        Node temp = head;
        for(int i = 0; i < size; i++){
            System.out.println(temp.data);
            temp = temp.next;
        }
    }
 
    public static void main(String[] args) throws Exception{
        MyStack_LinkList myStack_linkList = new MyStack_LinkList(5);
        myStack_linkList.push(1);
        myStack_linkList.push(2);
        myStack_linkList.pop();
        myStack_linkList.push(3);
        myStack_linkList.push(5);
        myStack_linkList.output();
    }
}

棧的應用場景

(1)括號匹配判斷,用于判斷()、{}等是否匹配;

(2)進制轉換時,逆向輸出轉換后的數;

(3)實現遞歸的邏輯可以用棧來實現;

(4)棧還可以用于面包屑導航,使用戶在瀏覽頁面時可以輕松地回溯到上一級或更上一級頁面。

上述就是小編為大家分享的java實現棧的數組和鏈表的方法了,如果您也有類似的疑惑,不妨參照上述方法進行嘗試。如果想了解更多相關內容,請關注億速云行業資訊。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

朝阳市| 阜宁县| 宜州市| 诸暨市| 望都县| 平邑县| 富阳市| 万年县| 安丘市| 都匀市| 韶山市| 滨州市| 鹤岗市| 独山县| 当涂县| 芮城县| 金秀| 新竹市| 剑河县| 华池县| 油尖旺区| 巨野县| 沙雅县| 辰溪县| 尉犁县| 青阳县| 固始县| 花莲市| 台东县| 靖江市| 慈溪市| 织金县| 迭部县| 巧家县| 古丈县| 老河口市| 中方县| 平邑县| 黎城县| 昭苏县| 龙里县|