真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java實(shí)現(xiàn)棧的數(shù)組和鏈表的方法

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)java實(shí)現(xiàn)棧的數(shù)組和鏈表的方法,以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

站在用戶的角度思考問題,與客戶深入溝通,找到北湖網(wǎng)站設(shè)計(jì)與北湖網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋北湖地區(qū)。

棧的介紹

棧,是一種先進(jìn)后出(FILO)的線性數(shù)據(jù)結(jié)構(gòu),主要操作為入棧和出棧。

棧底:最早進(jìn)入的元素存放的位置。

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

棧的數(shù)組的實(shí)現(xiàn)

示例如下:

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();
    }
}

棧的鏈表實(shí)現(xiàn)

棧用鏈表來實(shí)現(xiàn)時(shí),和數(shù)組實(shí)現(xiàn)不同的是,在出棧時(shí),因?yàn)槲覀冎挥幸粋€(gè)top節(jié)點(diǎn)來指向棧頂,因此需要從頭到尾遍歷一遍,來找到棧頂?shù)那耙粋€(gè)位置。

具體的實(shí)現(xiàn)如下:

public class MyStack_LinkList {
    private static class Node{
        int data;
        Node next;
        Node(int data){
            this.data = data;
        }
    }
    private Node head;//定義鏈表的頭結(jié)點(diǎn)
    private Node top;
    private int size;//定義棧中的元素個(gè)數(shù)
    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){//當(dāng)棧中元素個(gè)數(shù)為1時(shí),單獨(dú)討論,需將頭節(jié)點(diǎn)置為空
            temp = top.data;
            top = null;
        }
        else{
            temp = top.data;
            top = get(size - 1);//此時(shí)需遍歷一遍鏈表,用top指向需出棧的上一個(gè)節(jié)點(diǎn)
            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();
    }
}

棧的應(yīng)用場景

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

(2)進(jìn)制轉(zhuǎn)換時(shí),逆向輸出轉(zhuǎn)換后的數(shù);

(3)實(shí)現(xiàn)遞歸的邏輯可以用棧來實(shí)現(xiàn);

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

上述就是小編為大家分享的java實(shí)現(xiàn)棧的數(shù)組和鏈表的方法了,如果您也有類似的疑惑,不妨參照上述方法進(jìn)行嘗試。如果想了解更多相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊。


當(dāng)前文章:java實(shí)現(xiàn)棧的數(shù)組和鏈表的方法
網(wǎng)頁路徑:http://weahome.cn/article/jighsp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部