標籤:異常 soc dex eric return 清空 for 一個 remove
在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 //進行彈棧操作30 public void Pop()31 {32 //判斷如果當前棧為空白時不允許彈棧,拋出異常33 if (IsEmpty())34 {35 throw new IndexOutOfRangeException();36 }37 else38 {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 else52 {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======查看元素是否在棧中======TrueFalse======複製到新List中======121110======清空棧======棧元素個數: 0棧是否為空白: True
自己寫一個C#資料結構:用List<T>實現一個簡單的Stack