首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 資料結構實作 (二):堆疊 CStack 以鏈結串列為基底

     編輯:關於C語言

堆疊類別:CStack

封裝 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 語意。
  • Push/Pop 對應: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 (空)

現代化改良

  1. 泛型化:CStack<T> 支援任意型別。
  2. 實作 IEnumerable<T>、IReadOnlyCollection<T>。
  3. 提供 TryPop/TryPeek 避免魔術數字。
  4. 移除非標準導航方法,或移至 IDebugView 介面。
  5. 直接使用 System.Collections.Generic.Stack<T> (陣列基底,效能更好)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved