1. 程式人生 > >自己寫一個C#數據結構:用List<T>實現一個簡單的Stack

自己寫一個C#數據結構:用List<T>實現一個簡單的Stack

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 //進行彈棧操作 30
public 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