На этом шаге мы рассмотрим создание и работу со стеком и очередью.
Есть и другие классы, предназначенные для работы с коллекциями. Например, классы Stack и Queue предназначены для создания стека и очереди соответственно.
Классы Stack и Queue реализуют интерфейсы ICollection, IEnumerable и ICloneable. При работе со стеком для добавления элемента в стек используется метод Push(). С помощью метода Pop() из стека извлекается (удаляется) последний элемент, а значение элемента возвращается результатом метода. При работе с очередью новый элемент в очередь можно добавить с помощью метода Enqueue(). Метод Dequeue() извлекает (удаляет) первый элемент из очереди и результатом возвращает значение этого элемента. У классов Stack и Queue также есть метод Peek(), который результатом возвращает последний элемент для стека и первый элемент для очереди. При этом элемент из стека/очереди не удаляется.
Пример использования классов Stack и Queue представлен в примере ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace pr298_1 { // Главный класс: class Program { // Метод для отображения содержимого коллекции: static void show(ICollection s) { Console.WriteLine("Содержимое коллекции:"); foreach (object obj in s) { Console.Write("|" + obj); } Console.WriteLine("|"); } // Главный метод: static void Main() { // Создание стека: Stack mystack = new Stack(); // Добавление элементов в стек: mystack.Push("Первый"); mystack.Push("Bтopoй"); mystack.Push("Третий"); // Отображение содержимого стека: show(mystack); // Считывание элемента из стека: Console.WriteLine("Прочитано: " + mystack.Peek()); // Отображение содержимого стека: show(mystack); // Извлечение элемента из стека: Console.WriteLine("Извлечено: " + mystack.Pop()); // Отображение содержимого стека: show(mystack); // Создание очереди: Queue myqueue = new Queue(); // Добавление элементов в очередь: myqueue.Enqueue("Один"); myqueue.Enqueue("Два"); myqueue.Enqueue("Три"); // Отображение содержимого очереди: show(myqueue); // Считывание элемента из очереди: Console.WriteLine("Прочитано: " + myqueue.Peek()); // Отображение содержимого очереди: show(myqueue); // Извлечение элемента из очереди: Console.WriteLine("Извлечено: " + myqueue.Dequeue()); // Отображение содержимого очереди: show(myqueue); // Задержка: Console.ReadLine(); } } }
Результат выполнения программы представлен ниже:
Рис.1. Результат работы приложения
В программе описан статический метод show(), который предназначен для отображения содержимого коллекции, переданной аргументом методу. Аргумент метода описан как относящийся к типу ICollection. В этом случае мы учли, что классы Stack и Queue реализуют интерфейс ICollection, и поэтому объекты этих классов могут передаваться методу в качестве аргумента.
В методе Main() создаются стек (команда
Stack mystack = new Stack();
Queue myqueue = new Queue();
На следующем шаге мы рассмотрим ассоциативные коллекции.