實現棧資料結構,支援 push、pop、min 三操作,要求時間複雜度均為 O(1)。
利用棧先進後出 (LIFO) 特性,維護一個同步的「最小值棧」,其棧頂始終為主棧當前最小元素。
x <= minStack.top(),最小值棧也入 x。y == minStack.top(),最小值棧也出棧。minStack.top()。struct StackNode {
int value;
StackNode *next;
static StackNode *minTop; // 靜態成員:全棧共享最小值棧頂
StackNode* push(int v) { ... }
StackNode* pop() { ... }
int min() { return minTop->value; }
// 內部輔助:最小值棧操作
void minPush(int v) { ... }
void minPop() { ... }
};
StackNode* StackNode::minTop = nullptr; // 靜態成員定義
StackNode *s = nullptr; s = s->push2(5); // min=5 s = s->push2(2); // min=2 s = s->push2(4); // min=2 s = s->push2(1); // min=1 s = s->push2(1); // min=1 (相等也入最小值棧,保證 pop 正確) while (s) s = s->pop2(); // 依序輸出 pop 過程中最小值變化
輸出顯示最小值棧正確追蹤:5 → 2 → 2 → 1 → 1 → 2 → 5。