public class Verem<T>
{
    private T[] elemek;
    private int meret;
    private int teteje;

    public Verem(int kapacitas)
    {
        elemek = new T[kapacitas];
        meret = kapacitas;
        teteje = -1;
    }

    public void Push(T adat)
    {
        if (teteje == meret - 1)
        {
            Console.WriteLine("A verem tele van");
            return;
        }

        elemek[++teteje] = adat;
    }

    public T Pop() {
        if (Ures())
        {
            Console.WriteLine("A verem üres, nincs mit eltávolítani.");
            return default;
        }

        return elemek[teteje--];
    }

    public T Peek()
    {
        if (Ures())
        {
            Console.WriteLine("A verem üres");
            return default;
        }

        return elemek[teteje];
    }

    public bool Ures()
    {
        return teteje == -1;
    }

    public void Kiir()
    {
        if (Ures())
        {
            Console.WriteLine("A verem üres");
            return;
        }

        Console.WriteLine("A verem elemei csúcstól lefelé: ");
        for(int i = teteje; i >= 0; i--)
        {
            Console.WriteLine(elemek[i]);
        }
    }
}

internal class Program
{
    static void Main(string[] args)
    {
        Verem<int> verem = new Verem<int>(5);

        verem.Push(10);
        verem.Push(20);
        verem.Push(30);
        verem.Push(40);

        verem.Kiir();

        verem.Pop();
        verem.Kiir();

        
    }
}


