Implement Stack

Implementowanie Stosu

Podstawowe operacje wykonywane na stosie to Push i Pop.
Dane są dodawane do stosu za pomocą metody Push.
Dane są usuwane ze stosu za pomocą metody Pop.
Można zajrzeć do następnego elementu, który wyjdzie ze stosu i służy do tego metoda Peek.

Utworzymy teraz nasz własny stos.

Rozpoczniemy od zdefiniowania interface.

namespace MyStack
{
    interface IStack 
    {
        void Push(object element);
        object Pop();
        object Peek();
        bool isEmpty();
        void Display();
    }
}

Teraz zaimplementujemy nasz stos.

using System;

namespace MyStack
{
    public class MyStack : IStack
    {
        private int stackSize;
        public int top;
        public object[] item;

        public int StackSize
        {
            get { return stackSize; }
            set { stackSize = value; }
        }
        public MyStack()
        {
            StackSize = 10;
            item = new object[StackSize];
            top = -1;
        }
        public MyStack(int capacity)
        {
            StackSize = capacity;
            item = new object[StackSize];
            top = -1;
        }
        public bool isEmpty()
        {
            if (top == -1) return true;

            return false;
        }
        public void Push(object element)
        {
            if (top == (stackSize - 1))
                Console.WriteLine("Stos jest pełny!");
            else
            {
                item[++top] = element;
                Console.WriteLine("Element został pomyślnie dodany!");
            }
        }
        public object Pop()
        {
            if (isEmpty())
            {
                Console.WriteLine("Stos jest pusty!");
                return "Bez elementów";
            }
            else
                return item[top--];
        }
        public object Peek()
        {
            if (isEmpty())
            {
                Console.WriteLine("Stos jest pusty!");
                return "Bez elementów";
            }
            else
                return item[top];
        }
        public void Display()
        {
            if (top == -1)
                Console.WriteLine("Brak elementów do wyświetlenia");

            for (int i = top; i > -1; i--)
                Console.WriteLine("Element{0}: {1}", (i + 1), item[i]);
        }
    }
}

I teraz skorzystamy z naszego stosu w aplikacji.

using System;

namespace MyStack
{
    public class Program
    {
        static void Main(string[] args)
        {
            MyStack stack = new MyStack();

            while (true)
            {
                int choice = DisplayMenu();

                WorkWithAChoice(stack, choice);

                BackToMenu();
            }
        }

        private static int DisplayMenu()
        {
            Console.Clear();
            Console.WriteLine("\nStos MENU (rozmiar -- 20)");
            Console.WriteLine();
            Console.WriteLine("1. Dodaj element.");
            Console.WriteLine("2. Usuń element.");
            Console.WriteLine("3. Zobacz element.");
            Console.WriteLine("4. Wyświetl elementy stosu.");
            Console.WriteLine("5. Koniec programu");
            Console.WriteLine();
            Console.Write("Dokonaj wyboru co chcesz zrobić: ");
            int.TryParse(Console.ReadLine(), out int result);

            return result;
        }

        private static void WorkWithAChoice(MyStack stack, int choice) 
        {
            switch (choice)
            {
                case 1:
                    Console.WriteLine("Wpisz element: ");
                    stack.Push(Console.ReadLine());
                    break;
                case 2:
                    Console.WriteLine("Element usunięty: {0}", stack.Pop());
                    break;
                case 3:
                    Console.WriteLine("Element na szczycie stosu to: {0}", stack.Peek());
                    break;
                case 4:
                    stack.Display();
                    break;
                case 5:
                    Environment.Exit(1);
                    break;
                default:
                    Console.WriteLine("Dokonałeś niewłaściwego wyboru!");
                    break;
            }
        }
        private static void BackToMenu()
        {
            Console.WriteLine("Nacisnij Enter aby przejsc do Menu");
            Console.ReadKey();
        }
    }
}

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *