使用C#自定義棧
1.定義一個MyStack泛型類
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _06_MyStack { class MyStack<T> : IEnumerable<T>, IDisposable { //棧頂指針 private int _top = 0; //棧的大小 private int _size = 0; //棧的數據 private T[] _stack = null; public int Top { get { return _top; } } public int Size { get { return _size; } } public int Length { get { return _top; } } public T this[int index] { get { return _stack[index]; } } /// <summary> /// 棧的構造函數 /// </summary> /// <param name="size">初始化棧的大小</param> public MyStack(int size) { _size = size; _top = 0; _stack = new T[size]; } /// <summary> /// 棧是否為空 /// </summary> /// <returns></returns> public bool IsEmpty() { return _top == 0; } /// <summary> /// 棧是否已滿 /// </summary> /// <returns></returns> public bool IsFull() { return _top == _size; } /// <summary> /// 清除棧 /// </summary> public void Clear() { _top = 0; } /// <summary> /// 入棧 /// </summary> /// <param name="node"></param> /// <returns></returns> public bool Push(T node) { if(!IsFull()) { _stack[_top] = node; _top++; return true; } return false; } /// <summary> /// 出棧 /// </summary> /// <returns></returns> public T Pop() { //此default關鍵字對於引用類型會返回空,對於數值類型會返回零 T node = default(T); if (!IsEmpty()) { _top--; node = _stack[_top]; } return node; } /// <summary> /// 釋放資源 /// </summary> public void Dispose() { _stack = null; } /// <summary> /// 迭代器,用於foreach迭代 /// </summary> /// <returns></returns> public IEnumerator<T> GetEnumerator() { for(int i=0;i<_stack.Length;i++) { if(_stack[i] != null) { yield return _stack[i]; } } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }
2.測試
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; /// <summary> /// 06_MyStack /// 自定義實現棧 /// 棧特點:先進后出 /// </summary> namespace _06_MyStack { class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main(string[] args) { Person p1 = new Person { Name = "Flyee", Age = 24 }; Person p2 = new Person { Name = "Flyee2", Age = 18 }; Stack<Person> stack = new Stack<Person>(2); MyStack<Person> myStack = new MyStack<Person>(2); myStack.Push(p1); myStack.Push(p2); foreach(var p in myStack) { Console.WriteLine(p.Name); } Console.WriteLine(myStack[1].Age); Person result = myStack.Pop(); Console.WriteLine(myStack.Length); Console.WriteLine("Name:" + result.Name + " Age:" + result.Age); myStack.Pop(); Console.WriteLine(myStack.Length); myStack.Dispose(); Console.Read(); } } }
3.測試結果
參考博客地址:https://www.cnblogs.com/yezhu008/p/5726234.html