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

來源:互聯網
上載者:User

標籤:異常   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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.