zoukankan      html  css  js  c++  java
  • 自己写一个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
  • 相关阅读:
    用nodejs的express框架在本机快速搭建一台服务器
    Python版求数组的最大连续区间
    简洁的python测试框架——Croner
    中国有嘻哈——押韵机器人
    服务端测试环境hosts配置检查脚本
    手机客户端软件测试用例设计模板
    【Tomcat】压力测试和优化
    【Tomcat】详解tomcat的连接数与线程池
    【RabbitMQ】2、心得总结,资料汇总
    【高并发解决方案】7、HAProxy安装和配置
  • 原文地址:https://www.cnblogs.com/yzz071277/p/9291647.html
Copyright © 2011-2022 走看看