簡體   English   中英

我應該使用什么樣的 Stack 數據結構?

[英]What kind of Stack data structure should I use?

我正在編寫一個解決迷宮的算法,我有一個名為 char [] [] 迷宮的迷宮。 它的元素是這樣的;

{1,1,1,1,1,1, ..},
{1,0,1,0,1,1, ..},
{1,0,0,1,0,1, ..}, ...

有 13 行和 17 列。 我必須使用塊數據結構來解決它。 根據我心中設定的算法,我需要將可導航路徑的索引值存儲在這個堆棧中。 例如根據上面的迷宮:

0,0
0,1
0,2
0,3
0,4
1,4
1,5
2,5...

我在之前的例子中都是保留了一個integer的數字,所以在實現棧構建的時候就采用了這樣的結構。

public class Stack {
    int topOfStack;
    int capacity;
    int[] Stack;

    public Stack(int capacity) {
        this.capacity = capacity;
        Stack = new int[capacity];
        topOfStack = -1;
    }

    void push(int element)
    {
        if(topOfStack == capacity){
            System.out.println("Stack Overflow...");
        }
        else{
            topOfStack++;
            Stack[topOfStack] = element;
        }
    }
}

我的問題正是這個。 我如何為我的迷宮解算器程序修改這個堆棧結構? 如果我需要再次 state ,我必須在堆棧中保留坐標或類似的東西,而不是整數。 非常感謝。

您可以創建一個新的 class object 稱為坐標。 這個 class 將有兩個主要參數,即 X 和 Y。然后你可以制作一個填充坐標 object 而不是簡單的 Integer 的卡。

您正在構建的卡住可以是通用的,並且包含比基本結構更復雜的結構,這就是您在此示例中看到的

簡單來說,一個二維數組可以用來存儲坐標:

public class Stack {
    int topOfStack;
    int capacity;
    int[][] stack;

    public Stack(int capacity) {
        this.capacity = capacity;
        stack = new int[capacity][2];
        topOfStack = -1;
    }

    void push(int x, int y)
    {
        if(topOfStack == capacity){
            System.out.println("Stack Overflow...");
        }
        else{
            stack[++topOfStack] = new int[] { x, y };
        }
    }

    int[] pop() {
        if (topOfStack < 0) {
            System.out.println("Stack is empty");
            return null;
        }
        return stack[topOfStack--];
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM