C#: Реализация стека (списка)

Сегодня я приведу пример как можно реализовать стек с использованием языка программирования C#.

Для тех кто не знает, что такое стек (или список) — стек это способ хранения данных (некий аналог массива). При котором каждый новый элемент добавляется в начало списка и тем самым становится первым для извлечения. Простыми словами — стек это стакан, в который вы кладете объекты. Чем раньше вы положите объект в стакан, тем больше Вы его завалите при добавлении новых объектов. Так же, данный механизм можно описать фразой «Последний зашел — Первый вышел».

Первым делом нам понадобиться класс «обертка» для хранения элементов списка

class ListItem<T>
{
  public T Data { get; private set; } //Данные для хранения
  public ListItem<T> Next { get; set; } //Указатель на следующий элемент

  public ListItem(T item)
  {
      this.Data = item;
  }
}

А вот сам список. Заметим что класс ListItem описан внутри класса MyList. Делать это не обязательно, однако так сразу становиться понятно для класс ListItem вспомогательный класс для класса MyList.

class MyList<T>
{
        class ListItem<T>
       {
          public T Data { get; private set; } //Данные для хранения
          public ListItem<T> Next { get; set; } //Указатель на следующий элемент

          public ListItem(T item)
          {
            this.Data = item;
          }
       }

        public void PrintAll() //Печать всего списка
        {
            while (current != null)
            {
                Console.WriteLine(current.Data);
                current = current.Next;
            }
            current = first;
        }

        public void Add(T item) //Добавление элемента в список
        {
            ListItem<T> I = new ListItem<T>(item);

            if (first == null)
            {
                I.Next = null;
            }
            else
            {
                I.Next = first;

            }
            first = I;
            current = I;
        }

        private ListItem<T> first;
        private ListItem<T> current;
    }

Пример использования

MyList<int> R =  new MyList<int>();
R.AddBeforeFirst(1);
R.AddBeforeFirst(2);
R.AddBeforeFirst(3);
R.AddBeforeFirst(4);
R.AddBeforeFirst(5);         
Запись опубликована в рубрике C# с метками , , , , , , , , , . Добавьте в закладки постоянную ссылку.