Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Класс 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);

}

}

}

}

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.