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