.net 实现修改后的堆栈[已关闭]

lyr7nygr  于 2023-01-14  发布在  .NET
关注(0)|答案(1)|浏览(150)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

昨天关门了。
Improve this question
实现存储两个颜色值的修改堆栈 (红色和黑色),并支持以下操作:

  1. void Push(value,color)-将颜色(color)的值(value)推到堆栈的顶部。
  2. value Pop()-从栈顶移除top元素并返回其值(如果栈为空,则返回null)。
  3. value FindLastByColor(color)-在不从堆栈中移除该元素的情况下,查找堆栈中颜色(color)的最高值(如果堆栈中没有该颜色的元素,则返回null)。
vnjpjtjt

vnjpjtjt1#

如果堆栈可以保存值 不同类型的堆栈类,则不需要编写泛型堆栈类(MyStack),基于此假设,可以设计满足其需要的堆栈类,如下所示。
这是我的助手对象的定义

public enum MyColor
{
    Red,
    Black
}

public class Item
{
    public MyColor Color { get; }
    public object Obj { get; }

    public Item(MyColor color, object obj)
    {
        Color = color;
        Obj = obj;
    }
}

这是CustomStack类

public class MyStack
{
    private readonly Stack<Item> _items;

    public MyStack()
    {
        _items = new Stack<Item>();
    }

    public void Push(MyColor color, object value)
    {
        _items.Push(new Item(color, value));
    }

    public object? Pop()
    {
        return _items.TryPop(out Item? item) ? item.Obj : null;
    }

    public object? FindLastByColor(MyColor myColor)
    {
        var item = _items.FirstOrDefault(i => i.Color == myColor);
        return item?.Obj;
    }
}

相关问题