封裝 Clist,對外暴露 LIFO 操作:
using System;
namespace List
{
public class CStack
{
private readonly Clist list = new Clist();
// 壓入:尾部新增
public void Push(int value) => list.Append(value);
// 彈出:取得尾部值並刪除
public int Pop()
{
if (list.IsEmpty) return int.MaxValue; // 2147483647 表示空堆疊
list.MoveLast();
int val = list.CurrentValue;
list.Delete();
return val;
}
public bool IsEmpty => list.IsEmpty;
public int Count => list.Count;
// 額外導航 (非標準堆疊操作,供除錯/檢視)
public void MoveBottom() => list.MoveFirst();
public void MoveTop() => list.MoveLast();
public void MoveUp() => list.MoveNext();
public void MoveDown() => list.MovePrevious();
public int Peek() => list.CurrentValue; // 不移除
public void Clear() => list.Clear();
}
}
CStack 內含 Clist 私有欄位,不公開串列介面,確保 LIFO 語意。Append (尾部新增) / MoveLast + Delete (尾部移除),皆為 O(1)。Pop 回傳 int.MaxValue 側寫錯誤值,現代建議拋 InvalidOperationException 或回傳 bool TryPop(out int value)。MoveUp/Down 等非標準方法,僅供內部除錯或特定演算法使用。var stack = new CStack();
stack.Push(10);
stack.Push(20);
stack.Push(30);
Console.WriteLine(stack.Pop()); // 30
Console.WriteLine(stack.Pop()); // 20
Console.WriteLine(stack.Pop()); // 10
Console.WriteLine(stack.Pop()); // 2147483647 (空)
CStack<T> 支援任意型別。IEnumerable<T>、IReadOnlyCollection<T>。TryPop/TryPeek 避免魔術數字。IDebugView 介面。System.Collections.Generic.Stack<T> (陣列基底,效能更好)。