![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Класс Queue
Очередь – это частный случай однонаправленного списка, добавление элементов в который выполняется в один конец (хвост), а выборка производится с другого конца (головы). Другие операции с очередью не определены. При выборке элемент исключается из очереди. Говорят, что очередь реализует принцип обслуживания FIFO (fist in – fist out, первым пришел – первым вышел). Очередь проще всего представить в виде узкой трубы, в один конец которой бросают мячи, а с другого конца которой они вылетают (см. рисунок 3.6). Понятно, что мяч, который был брошен в трубу первым, первым и вылетит с другого конца. Рисунок 3.6 – Визуальный пример очереди
В С# реализацию очередь представляет класс Queue, который также как и стек реализует интерфейсы ICollection, IEnumerable и ICloneable. Queue – это динамическая коллекция, размер которой изменяется. При необходимости увеличение вместимости очереди происходит с коэффициентом роста по умолчанию равным 2.0. В классе Queue определены следующие конструкторы: public Queue(); //создает пустую очередь, начальная вместимость которой равна 32 public Queue (int capacity); // создает пустую очередь, начальная вместимость которой равна capacity public Queue (int capacity, float n); //создает пустую очередь, начальная вместимость которой равна capacity, и коэффициент роста устанавливается параметром n public Queue (ICollection c); //создает очередь, которая содержит элементы коллекции, заданной параметром с, и аналогичной вместимостью Кроме методов, определенных в интерфейсах, реализуемых классом Queue, в этом классе определены собственные методы, представленные в приложении 11 Пример 1. Для заданного значения n запишем в очередь все числа от 1 до n, а затем извлечем их из очереди: using System; using System.Collections; namespace MyProgram { class Program { public static void Main() { Console.Write(" n= "); int n=int.Parse(Console.ReadLine()); Queue intQ = new Queue(); for (int i = 1; i < = n; i++) intQ.Enqueue(i); Console.WriteLine(" Размерность очереди " + intQ.Count); Console.WriteLine(" Верхний элемент = " + intQ.Peek()); Console.WriteLine(" Размерность очереди = " + intQ.Count); Console.Write(" Содержимое очереди = "); while (intQ.Count! =0) Console.Write(" {0} ", intQ.Dequeue()); Console.WriteLine(" \nНовая размерность = " + intQ.Count); } } } Пример 2. В текстовом файле записана информация о людях (фамилия, имя, отчество, возраст, вес через пробел). Вывести на экран вначале информацию о людях младше 40 лет, а затем информацию о всех остальных. using System; using System.Collections; using System.IO; using System.Text; namespace MyProgram { class Program { //структура для хранения данных об одном человеке public struct one { public string f; public string i; public string o; public int age; public float massa; }
public static void Main() { StreamReader fileIn = new StreamReader(" t.txt", Encoding.GetEncoding(1251)); string line; Queue people = new Queue(); one a; Console.WriteLine(" ВОЗРАСТ МЕНЕЕ 40 ЛЕТ"); while ((line = fileIn.ReadLine())! = null) //читаем до конца файла { //разбиваем строку на составные элементы заполняем структуру string [] temp = line.Split(' '); a.f = temp[0]; a.i = temp[1]; a.o = temp[2]; a.age = int.Parse(temp[3]); a.massa = float.Parse(temp[4]); // если возраст меньше 40 лет, то выводим данные на экран, иначе помещаем их в очередь для временного хранения if (a.age< 40) Console.WriteLine(a.f + " \t" + a.i + " \t" + a.o + " \t" +a.age + " \t" + a.massa); else people.Enqueue(a); } fileIn.Close(); Console.WriteLine(" ВОЗРАСТ 40 ЛЕТ И СТАРШЕ"); while (people.Count! = 0) //извлекаем из очереди данные { a = (one)people.Dequeue(); Console.WriteLine(a.f + " \t" + a.i + " \t" + a.o + " \t" +a.age + " \t" + a.massa); } } } }
|