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


在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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM