阿摩線上測驗 登入

申論題資訊

試卷:111年 - 111 專技高考_資訊技師:程式設計#111894
科目:程式設計
年份:111年
排序:0

申論題內容

一、請用 Java 或 C++實作一個資料結構堆疊(stack)的泛型(Generics)物件,此 stack 物件必須有下列函式(Method) :
a.建構子(Constructor)及解構子(Destructor) ,若以 Java 撰寫,不必解 構子。
 b. void push( {datatype} a ){ .. },可以加資料入 stack 頂端。
c. {datatype} pop(){ .. },可以取出 stack 頂端資料。
d. int length(){ .. },傳回 stack 內資料的數量。
e. void clear(),清除 stack 物件內資料。
f. void inverse(){ .. },可以將 stack 內的資料存放順序顛倒放置。
因為是泛型物件,上述之{datatype}是指使用者使用此物件時才會決定其 資料型態。必須注意,此題的資料儲存空間必須使用動態矩陣,不能使用其他物件。另外也必須對物件進行封裝以及處理記憶空間不足時,動 態增加空間的應變問題。(25 分)

詳解 (共 1 筆)

詳解 提供者:hchungw
這裡是一個使用 Java 語言實作的泛型堆疊(Generic Stack)類別。這個類別使用動態陣列(在 Java 中為 ArrayList)作為儲存空間,並且包含了所有要求的方法。

import java.util.ArrayList;
public class GenericStack<T> {
    private ArrayList<T> stack;
    private int capacityIncrement;
    public GenericStack() {
        stack = new ArrayList<>();
        capacityIncrement = 5;
    }
    public void push(T item) {
        if (stack.size() == stack.size()) {
            stack.ensureCapacity(stack.size() + capacityIncrement);
        }
        stack.add(item);
    }
    public T pop() {
        if (stack.isEmpty()) {
            throw new IndexOutOfBoundsException("Cannot pop from an empty stack.");
        }
        return stack.remove(stack.size() - 1);
    }
    public int length() {
        return stack.size();
    }
    public void clear() {
        stack.clear();
    }
    public void inverse() {
        ArrayList<T> tempStack = new ArrayList<>();
        while (!stack.isEmpty()) {
            tempStack.add(stack.remove(stack.size() - 1));
        }
        stack = tempStack;
    }
}
在這個類別中:
push(T item) 方法將一個元素添加到堆疊頂端。
pop() 方法移除並返回堆疊頂端的元素,如果堆疊為空,則拋出 IndexOutOfBoundsException。
length() 方法返回堆疊中的元素數量。
clear() 方法清空堆疊。
inverse() 方法將堆疊中的元素順序顛倒。
記憶體的管理由 Java 的垃圾回收機制處理,因此開發者不需要明確處理解構子。ArrayList 在內部會自動擴充其容量,因此也處理了動態增加空間的問題。capacityIncrement 是當 ArrayList 需要擴容時,一次增加的最小單位。這可以根據需求進行調整以避免頻繁的擴容操作。