|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Count - свойство содержащее количество объектовNET framework предоставляет нам готовый класс Queue (очередь). Класс Queue находится в пространстве имен System.Collections, поэтому перед тем, как использовать его, желательно подключить это пространство, чтобы в дальнейшем не использовать записи вида System.Collections.Queue: using System.Collections; Для работы с очередью необходимы следующие методы: Enqueue() - помещает элемент в конец очереди Dequeue() - достает из очереди первый элемент В принципе этого вполне достаточно. У класса Queue есть еще несколько полезных методов: Contains() - проверяет имеется ли данный объект в очереди Count - свойство, содержащее количество элементов в очереди Peek() - возвращает первый элемент в очереди, но не удаляет его Рассмотрим пример: static void Main(string[] args) { Queue q = new Queue(3);
q.Enqueue(3); //помещаем в очередь тройку q.Enqueue(4); //помещаем в очередь четверку q.Enqueue(5); //помещаем в очередь пятерку
//наша очередь выглядит так: 5 4 3
Console.WriteLine("В очереди содержится " + q.Count + " объекта"); //выведет 3
Console.WriteLine("Первый элемент: " + q.Peek()); //выведет 3
Console.WriteLine((int)q.Dequeue()+ (int)q.Dequeue() - (int)q.Dequeue()); //3+4-5=2
} Сначала мы создаем экземпляр класса Queue. После этого помещаем в очередь 3 элемента. В нашем случае это объекты типа int. Обратите внимание на очередность. Тройка заняла очередь первой, а пятерка последней. Далее мы узнаем, сколько элементов содержится в очереди. Узнаем, какой первый. Далее мы извлекаем элементы из очереди и сразу выполняем простые расчеты. Приведение к типу int обязательно, т.к. в очереди хранятся объекты типа object вне зависимости от того, что в очередь было помещено. Нужно помнить, что невозможно узнать, кто в очереди второй или третий, пока не "достать" из очереди соответствующее количество элементов. Если вам такая функция необходима, то скорее всего придется отказаться от использования класса Queue и реализовать очередь самому, на основе массива или ArrayList Обратим внимание на то, что очередь не является типизированной, т.е. в ней могут содержаться объекты разных типов. q.Enqueue("строка"); //помещаем в очередь строку q.Enqueue(3); //помещаем в очередь тройку q.Enqueue(4); //помещаем в очередь четверку q.Enqueue(5); //помещаем в очередь пятерку стек в C#
В NET framework существует класс Stack, который содержит все необходимые методы: Push() - помещает элемент в стек Pop() - достает элемент из стека Peek() - возвращает верхний элемент стека Contains() - проверяет содержится ли элемент в стеке Count - свойство содержащее количество объектов Методы практически аналогичны методам очереди. Рассмотрим следующую задачу: Пусть у нас имеется арифметическое выражение, поддерживающее 3 вида скобок: (), [], {}. Наша задача - проверить правильность расположения скобок в выражении. Примеры: {(5-[3+9])-4} - правильное выражение {(5-[3+)9]-4} - неверное выражение Эту задачу очень легко решить с помощью стека. Алгоритм следующий: пробегаем по выражению слева направо. Если мы встретим открывающую скобку, то помещаем ее в стек. Если встретим закрывающую скобку, то достаем элемент из стека и проверяем форму скобки. Если формы разные или стек пуст, то это значит, что выражение неверное. Если к концу работы программы стек оказался не пуст, то это также означает, что выражение неверно. Рассмотрим реализацию этого алгоритма: static void Main(string[] args) { string str; char c; Stack s = new Stack(); str=Console.ReadLine();
for (int i = 0; i < str.Length; i++) {
if ((str[i] == ′(′) || (str[i] == ′[′) || (str[i] == ′{′)) { //если это открывающая скобка, то s.Push(str[i]); //помещаем скобку в стек } else if ((str[i] == ′)′) || (str[i] == ′]′) || (str[i] == ′}′)) { //если это закрывающая скобка if (s.Count == 0) { //если стек путстой Console.WriteLine("Не хватает скобки"); break; }
c = (char)s.Pop(); //проверяем соответствие форм if (((c == ′{′) && (str[i] == ′}′)) || ((c == ′[′) && (str[i] == ′]′)) || ((c == ′(′) && (str[i] == ′)′))) { continue; } else { Console.WriteLine("Неверный тип скобки"); break; } } else { //если это другой символ continue; } }
if (s.Count > 0) { //в стеке остались скобки Console.WriteLine("Не хватает закрывающей скобки"); } } Прокомментируем программный код. Сначала мы создаем 3 переменные: типа string (строка), сhar (символ), Stack (стек). После чего считываем строку с экрана (ее должен ввести пользователь). Далее в цикле for мы пробегаем по всем символам введенной строки. Далее выполняются действия по алгоритму описанному выше.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |