1.鏈表
實現棧的四個基本功能 入棧 出棧 長度 棧頂值
public class 基礎 : MonoBehaviour
{public class MyStack{//定義每一個元素的數據結構 //下一個元素 和 該元素的值public class StackData{public StackData next;public object data;public StackData(StackData next, object data){this.next = next;this.data = data;}}//記錄數量int size;//代表棧頂元素 StackData top;public void Push(object data){//因為棧是先進后出 后進來的元素就成為了棧頂//所以每壓入一個元素 就讓后進來元素的next指向前一個元素//出棧時 丟失最后節點的引用即可top = new StackData(top, data);size++;}public object Pop(){//彈出棧頂元素 同時下一個元素就是新棧頂object result = top.data;top = top.next;size--;return result;}public int Count{get{return size;}}public object Peek(){if (top == null) return null;return top.data;}}private void Start(){MyStack ms = new MyStack();ms.Push(1);ms.Push(2);ms.Push(3);ms.Push(4);ms.Push(5);Debug.Log(ms.Pop());Debug.Log(ms.Pop());Debug.Log(ms.Count);Debug.Log(ms.Peek());}
}
2.數組
(1)數組就是會更麻煩一點 不過可以加深對數組和棧的理解
(2)Pop和Enlarge 核心就是數組滿了以后 創建一個新數組 將舊書組中的元素放入新數組 然后再將新數組賦值給舊數組即可
(3)棧是先進后出 所以只需要著重處理數組的末尾索引即可
public class 基礎 : MonoBehaviour
{public class MyStack<T>{//通過數組實現堆棧public T[] list;public int maxSize = 2;public int nowSize = 0;public MyStack(){list = new T[maxSize];}public int Count {get{return nowSize;}}public void Push(T data){if(maxSize >= nowSize + 1){list[nowSize++] = data;}else{Enlarge();list[nowSize++] = data;}}public T Pop(){if(nowSize > 0){T[] list3 = new T[maxSize];T temp = list[--nowSize];for (int i = 0; i < list.Length - 1; i++){list3[i] = list[i];}list = list3;return temp;}else{return default(T);}}public void Enlarge(){T[] list2 = new T[maxSize * 2];for(int i = 0; i < list.Length; i++){list2[i] = list[i];}list = list2;maxSize *= 2;}}private void Start(){MyStack<int> ms = new MyStack<int>();ms.Push(1);ms.Push(2);ms.Push(3);ms.Push(4);ms.Push(5);Debug.Log(ms.Pop());Debug.Log(ms.Count);}
}