using System;
using System.Collections.Generic;

namespace StackAndQueue
{
    class Program
    {
        static void Main(string[] args)
        {
            // Utwórz kolejkę i dodaj do niej cztery łańcuchy znaków.
            Queue<string> myQueue = new Queue<string>();
            myQueue.Enqueue("pierwszy w kolejce");
            myQueue.Enqueue("drugi w kolejce");
            myQueue.Enqueue("trzeci w kolejce");
            myQueue.Enqueue("ostatni w kolejce");

            // Metoda Peek „podgląda” pierwszy element bez usuwania go z kolejki.
            Console.WriteLine($"Metoda Peek() zwróciła:\n{myQueue.Peek()}");

            // Metoda Dequeue pobiera następny element z POCZĄTKU kolejki.
            Console.WriteLine(
                $"Pierwsze wywołanie Dequeue() zwróciło:\n{myQueue.Dequeue()}");
            Console.WriteLine(
                $"Drugie wywołanie Dequeue() zwróciło:\n{myQueue.Dequeue()}");

            // Metoda Clear usuwa wszystkie elementy z kolejki.
            Console.WriteLine($"Count przed wywołaniem Clear():\n{myQueue.Count}");
            myQueue.Clear();
            Console.WriteLine($"Count po wywołaniu Clear():\n{myQueue.Count}");


            // Tworzenie stosu i dodawanie do niego czterech łańcuchów znaków.
            Stack<string> myStack = new Stack<string>();
            myStack.Push("pierwszy na stosie");
            myStack.Push("drugi na stosie");
            myStack.Push("trzeci na stosie");
            myStack.Push("ostatni na stosie");

            // Metoda Peek działa dla stosu tak samo jak dla kolejki.
            Console.WriteLine($"Metoda Peek() zwróciła:\n{myStack.Peek()}");

            // Metoda Pop pobiera następny element z WIERZCHOŁKA stosu.
            Console.WriteLine(
                $"Pierwsze wywołanie Pop() zwróciło:\n{myStack.Pop()}");
            Console.WriteLine(
                $"Drugie wywołanie Pop() zwróciło:\n{myStack.Pop()}");

            Console.WriteLine($"Count przed wywołaniem Clear():\n{myStack.Count}");
            myStack.Clear();
            Console.WriteLine($"Count po wywołaniu Clear():\n{myStack.Count}");
        }
    }
}
