自己写一个C#数据结构:用List<T>实现一个简单的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

猜你喜欢

转载自www.cnblogs.com/yzz071277/p/9291647.html