自己寫一個C#數據結構:用List<T>實現一個簡單的Stack
阿新 • • 發佈:2018-07-11
count 實現簡單 ole exceptio tac on() rem linq --
在C#中利用List<T>實現一個簡單的Stack
需要實現的功能:壓棧、彈棧、查看棧頂元素、查看元素個數、查看Socket是否為空,判斷元素是否在Socket中、清空Socket、按socket先進後出的順序復制到一個新的List中
下面是代碼:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 5 6 //用List實現簡單的棧 7 public class MyStack<T> 8 { 9 private List<T> sl;10 11 //構造函數,創建一個列表 12 public MyStack() 13 { 14 sl = new List<T>(); 15 } 16 17 //清除棧內所有元素 18 public void Clear() 19 { 20 sl.Clear(); 21 } 22 23 //進行壓棧操作 24 public void Push(T item) 25 { 26 sl.Add(item); 27 } 28 29 //進行彈棧操作 30public void Pop() 31 { 32 //判斷如果當前棧為空時不允許彈棧,拋出異常 33 if (IsEmpty()) 34 { 35 throw new IndexOutOfRangeException(); 36 } 37 else 38 { 39 sl.RemoveAt(Length() - 1); 40 } 41 } 42 43 //獲取棧頂元素但不彈出 44 public T Peek()45 { 46 //判斷如果當前棧為空時無法獲取棧頂元素,拋出異常 47 if (IsEmpty()) 48 { 49 throw new IndexOutOfRangeException(); 50 } 51 else 52 { 53 return sl[Length() - 1]; 54 } 55 } 56 57 //將棧復制到一個新的List中 58 public List<T> ToList() 59 { 60 List<T> newList = new List<T>() { }; 61 for (int i = Length() - 1; i >= 0; i--) 62 { 63 newList.Add(sl[i]); 64 } 65 return newList; 66 } 67 68 //判斷元素是否在棧中 69 public bool Contains(T item) 70 { 71 return (sl.Contains(item)); 72 } 73 74 75 //判斷當前棧是否為空 76 public bool IsEmpty() 77 { 78 return (Length() == 0); 79 } 80 81 //獲取當前棧長度 82 public int Length() 83 { 84 return sl.Count(); 85 } 86 87 }
對寫好的Socket進行測試:
1 MyStack<int> myStack = new MyStack<int>(); 2 myStack.Push(10); 3 myStack.Push(11); 4 myStack.Push(12); 5 myStack.Push(13); 6 7 Console.WriteLine("棧頂元素: "+ myStack.Peek()); 8 Console.WriteLine("棧元素個數: " + myStack.Length()); 9 Console.WriteLine("棧是否為空: " + myStack.IsEmpty()); 10 11 Console.WriteLine("======彈棧======"); 12 13 myStack.Pop(); 14 15 Console.WriteLine("棧頂元素: " + myStack.Peek()); 16 Console.WriteLine("棧元素個數: " + myStack.Length()); 17 Console.WriteLine("棧是否為空: " + myStack.IsEmpty()); 18 19 Console.WriteLine("======查看元素是否在棧中======"); 20 int a = 10; 21 int b = 15; 22 Console.WriteLine(myStack.Contains(a)); 23 Console.WriteLine(myStack.Contains(b)); 24 25 26 Console.WriteLine("======復制到新List中======"); 27 28 List<int> newList = myStack.ToList(); 29 30 for (int i = 0; i < newList.Count; i++) 31 { 32 Console.WriteLine(newList[i]); 33 } 34 35 Console.WriteLine("======清空棧======"); 36 37 myStack.Clear(); 38 Console.WriteLine("棧元素個數: " + myStack.Length()); 39 Console.WriteLine("棧是否為空: " + myStack.IsEmpty());
在控制臺輸出的結果:
棧頂元素: 13 棧元素個數: 4 棧是否為空: False ======彈棧====== 棧頂元素: 12 棧元素個數: 3 棧是否為空: False ======查看元素是否在棧中====== True False ======復制到新List中====== 12 11 10 ======清空棧====== 棧元素個數: 0 棧是否為空: True
自己寫一個C#數據結構:用List<T>實現一個簡單的Stack