在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
原文:https://www.cnblogs.com/yzz071277/p/9291647.html