Как использовать очередь C ++

How Use C Queue



Вступление

Очередь - это набор элементов, где первый элемент, добавленный в список, должен быть первым элементом, который будет удален следующим. По мере того, как предметы добавляются в коллекцию, она увеличивается в размере, то есть в длину. Всякий раз, когда какой-либо элемент должен быть удален, он должен быть добавлен первым. Если элементы удаляются непрерывно, то следующий удаляемый является вторым элементом; третий потом удаляется и т. д.

После удаления первого элемента исходного списка второй становится первым элементом. После удаления второго элемента третий становится первым и так далее.







Хороший пример очереди из реальной жизни - это когда люди выстраиваются в очередь, чтобы дождаться обслуживания или товара. Первый человек обслуживается первым перед последним. Однако очередь, о которой говорилось в этом руководстве, - это программная очередь, разработанная на C ++.



ФИФО

FIFO означает «первым пришел - первым ушел». Это еще один способ оценить очередь. Это означает, что первый элемент, который входит в список, является первым элементом, который нужно удалить, когда удаление должно произойти. Начало списка называется головным или передним; конец списка называется спиной или хвостом.



Основные операции

Программная очередь должна иметь как минимум следующие операции:





толкать

Эта операция добавляет новый элемент в конец очереди. Эта операция официально называется enqueue.



сдвиг

Эта операция удаляет первый элемент очереди, а второй элемент становится новым первым элементом. Эта операция официально называется удалением из очереди. В C ++ это называется pop.

В этой статье объясняется, как использовать структуру данных очереди C ++. Вы должны знать указатели и ссылки C ++, чтобы понять остальную часть этой статьи.

Класс и объекты

Класс - это набор переменных и функций, которые работают вместе, где переменным не присвоены значения. Когда переменным присваиваются значения, класс становится объектом. Различные значения, присвоенные одному и тому же классу, приводят к разным объектам; то есть разные объекты относятся к одному классу с разными значениями. Считается, что создание объекта из класса создает экземпляр объекта.

Имя, очередь, это класс. Объект, созданный из класса очереди, имеет имя, выбранное программистом.

Функция, принадлежащая классу, необходима для создания экземпляра объекта из класса. В C ++ эта функция имеет то же имя, что и имя класса. Объекты, созданные (экземпляры) из класса, имеют разные имена, данные им программистом.

Создание объекта из класса означает создание объекта; это также означает создание экземпляра.

Программа на C ++, использующая класс очереди, начинается со следующих строк вверху файла:

#включают
#включают
используя пространство имен std;

Первая строка предназначена для ввода / вывода. Вторая строка позволяет программе использовать все функции класса очереди. Третья строка позволяет программе использовать имена в стандартном пространстве имен.

Перегрузка функции

Когда две или более разных сигнатур функций имеют одно и то же имя, это имя считается перегруженным. Когда вызывается одна функция, количество и тип аргументов определяют, какая функция фактически выполняется.

Строительство

очередь<тип>имя()

Следующее объявление создает экземпляр очереди с именем que типа int.

очередь<int>что;

Очередь пуста. Объявление начинается с зарезервированного слова 'очередь', за которым следуют угловые скобки с типом данных. Затем у вас есть имя программиста для очереди.

Конструирование с использованием списка инициализаторов

Следующее определение показывает, как создать очередь со списком инициализаторов:

очередь<плавать>что({1.1, 2.2, 3.3, 4.4});

Уничтожение очереди

Чтобы уничтожить очередь, просто отпустите ее.

Доступ к элементу очереди

push (значение)

Очередь - это список «первым пришел - первым обслужен». Итак, каждое значение добавляется с обратной стороны. Следующий сегмент кода создает пустую очередь, после которой сзади добавляются пять значений с плавающей запятой:

очередь<плавать>что;

что.толкать(1.1);
что.толкать(2.2);
что.толкать(3.3);
что.толкать(4.4);
что.толкать(5.5);

size () const

Это возвращает количество элементов в очереди. Следующий код иллюстрирует:

очередь<плавать>что;
что.толкать(1.1);что.толкать(2.2);что.толкать(3.3);что.толкать(4.4);что.толкать(5.5);
Стоимость<<что.размер() << ' п';

Выход 5.

передний()

Это возвращает ссылку на первый элемент очереди без удаления элемента. На выходе следующего кода будет 1.1.

очередь<плавать>что;
что.толкать(1.1);что.толкать(2.2);что.толкать(3.3);что.толкать(4.4);что.толкать(5.5);
Стоимость<<что.передний() << ' п';

Элемент не удаляется из очереди.

фронт () const

Когда конструкции очереди предшествует const, выражение front () const выполняется вместо front (). Например, он используется в следующем коде.

constочередь<плавать>что({1.1, 2.2, 3.3, 4.4, 5.5});
Стоимость<<что.передний() << ' п';

Возвращается постоянная ссылка. Элемент не удаляется из вектора. Элементы очереди изменить нельзя.

назад()

Это возвращает ссылку на последний элемент очереди, не удаляя элемент. Результатом следующего кода будет 5.5.

очередь<плавать>что;
что.толкать(1.1);что.толкать(2.2);что.толкать(3.3);что.толкать(4.4);что.толкать(5.5);
Стоимость<<что.назад() << ' п';

назад () const

Когда конструкции очереди предшествует const, выражение back () const выполняется вместо back (). Например, он используется в следующем коде.

constочередь<плавать>что({1.1, 2.2, 3.3, 4.4, 5.5});
Стоимость<<что.назад() << ' п';

Возвращается постоянная ссылка. Элемент не удаляется из очереди. С предыдущей константой для построения очереди элементы в очереди не могут быть изменены.

Емкость очереди

size () const

- см. Выше

пустой () const

Это возвращает 1 для истины, если в очереди нет элементов, или 0 для false, если очередь пуста. Следующий код иллюстрирует это:

очередь<плавать>это1({1.1, 2.2, 3.3, 4.4, 5.5});
Стоимость<<это1.пустой() << ' п';
очередь<плавать>это2;
Стоимость<<это2.пустой() << ' п';

Результат:

0
1

Модификаторы очереди

поп ()

Очередь - это FIFO, поэтому любой элемент, который необходимо удалить, должен быть удален из верхней части (заголовка) очереди. Эта функция-член удаляет первый элемент, не возвращая его. Следующий код иллюстрирует это:

очередь<плавать>что({1.1, 2.2, 3.3, 4.4, 5.5});
Стоимость<<что.передний() << ' п';
что.поп();
Стоимость<<что.размер() << ' п';

Результат:

1.1
4

a.swap (b)

Две очереди можно поменять местами, как показано в этом сегменте кода:

очередь<плавать>это1({1.1, 2.2, 3.3, 4.4, 5.5});
очередь<плавать>это2({10, двадцать});
это1.поменять местами(это2);
Стоимость<< 'Первый элемент и размер que1:
'
<<это1.передний() <<','<<это1.размер() << ' п';
Стоимость<< 'Первый элемент и размер que2'<<
это2.передний() <<','<<это2.размер() << ' п';

Результат:

Первый элемент и размер que1: 10, 2

Первый элемент и размер que2: 1.1, 5

Обратите внимание, что при необходимости длина очереди увеличивается. Кроме того, значения, у которых не было замен, заменяются некоторым значением по умолчанию. Типы данных должны быть одного типа.

Операторы равенства и отношения для очередей

Для обычных символов в C ++ в возрастающем порядке числа идут перед прописными буквами, которые идут перед строчными буквами. Пробел стоит перед нулем и всеми ними.

Операторы равенства

Возвращает 1 для истины и 0 для ложи.

Оператор ==

Возвращает 1, если две очереди имеют одинаковый размер и соответствующие элементы равны; в противном случае возвращается 0. Пример:

очередь<const char*>это1({'Добрый', 'что-то другое'});
очередь<const char*>это2({'безнравственный'});
intна однойзнак равноэто1==это2;
Стоимость<<на одной<< ' п';

Результат: 0.

Оператор! =

- противоположное вышеуказанному. Пример:

очередь<const char*>это1({'Добрый', 'что-то другое'});
очередь<const char*>это2({'безнравственный'});
intна однойзнак равноэто1знак равноэто2;
Стоимость<<на одной<< ' п';

Результат: 1.

Операторы отношения

Возвращает 1 для истины и 0 для ложи.

В

Возвращает 1, если первая очередь является начальным подмножеством второй очереди, причем элементы двух равных частей одинаковы и находятся в одном порядке. Если обе очереди имеют одинаковый или разные размеры и перемещаются слева направо, в первой очереди встречается элемент, который меньше соответствующего элемента во второй очереди, то все равно будет возвращено 1. В противном случае возвращается 0. Пример:

очередь<const char*>это1({'Добрый', 'что-то другое'});
очередь<const char*>это2({'безнравственный'});
intна однойзнак равноэто1<это2;
Стоимость<<на одной<< ' п';

Выход 1.

Оператор>

- противоположное вышеуказанному. Пример:

очередь<const char*>это1({'Добрый', 'что-то другое'});
очередь<const char*>это2({'безнравственный'});
intна однойзнак равноэто1>это2;
Стоимость<<на одной<< ' п';

Выход: 0

В<= Operator

- такой же как очередь<const char*>это1({'Добрый', 'что-то другое'});
очередь<const char*>это2({'безнравственный'});
intна однойзнак равноэто1<=это2;
Стоимость<<на одной<< ' п';

Выход: 1

Оператор> =

- противоположное вышеуказанному. Пример:

очередь<const char*>это1({'Добрый', 'что-то другое'});
очередь<const char*>это2({'безнравственный'});
intна однойзнак равноэто1> =это2;
Стоимость<<на одной<< ' п';

Выход: 0

Класс и его экземпляры

Значение относится к типу данных, как созданный объект относится к классу. Конструкция очереди также может принимать класс как тип данных. Следующая программа иллюстрирует это:

#включают
#включают
используя пространство имен std;
класс TheCla
{
общественный:
intна одной;
статический charch;
пустотафункция(charнет, const char *п)
{
Стоимость<< 'Есть ' <<на одной<< 'книги стоят' <<нет<<п<< ' в магазине.' << ' п';
}
статический пустотавеселье(charch)
{
если (ch== 'к')
Стоимость<< 'Официальная статическая функция-член' << ' п';
}
};
intглавный()
{
TheCla obj1;TheCla obj2;TheCla obj3;TheCla obj4;TheCla obj5;
очередь<TheCla>что;
что.толкать(obj1);что.толкать(obj2);что.толкать(obj3);что.толкать(obj4);что.толкать(obj5);
Стоимость<<что.размер() << ' п';
возвращение 0;
}

Выход 5.

Связанный список

Список очереди технически называется связанным списком. Для очереди существует два типа связанных списков: односвязный список и двусвязный список.

Элемент односвязного списка может быть реализован структурой из двух членов. Один член содержит указатель на следующий элемент, а другой элемент содержит данные (в единственном числе для данных).

Элемент двусвязного списка может быть реализован структурой из трех членов. Средний элемент содержит данные, а первый и третий элементы содержат указатели на свои смежные элементы.

Приложения очереди

Очередь - это структура данных, работающая в порядке очереди. В вычислениях бывают ситуации, когда данные поступают в виде очереди, что требует поведения «первым пришел - первым обслужен».

Совместное использование компьютерных ресурсов

Ресурс на компьютере - это любой физический или виртуальный компонент с ограниченной доступностью. К ним относятся ЦП, видеокарта, жесткий диск и память. Для совместного использования такого ресурса нужна очередь.

Обработка прерываний

Периферийные устройства компьютера должны время от времени прерывать работу компьютера. Прерывания должны обрабатываться так же, как они поступили. Для этого нужна очередь.

Управляйте информацией.

Очередь может использоваться, например, для управления файлами приложения для задания, если файлы хранятся на компьютере.

Заключение

Очередь - это структура данных списка, которая является либо односвязным списком, либо двусвязным списком. Как правило, первый элемент, который входит в список, выходит из него первым. C ++ предоставляет структуру данных очереди в своей стандартной библиотеке. Категории функций-членов и операторов, доступных для этой структуры, включают построение очереди, доступ к элементам очереди, емкость очереди, модификаторы очереди и операторы перегруженной очереди.

Любая структура данных очереди должна обеспечивать как минимум функции-члены push () и pop (). push () означает отправку нового элемента в конец очереди; а pop () означает удаление элемента, находящегося в начале очереди. К сожалению, в C ++ эти функции не возвращают выдаваемое или выталкиваемое значение. Итак, чтобы узнать последний элемент перед нажатием, необходимо использовать дополнительную функцию back (); и чтобы узнать первый элемент перед появлением, необходимо использовать дополнительную функцию front ().

Значение относится к типу данных, как созданный объект относится к классу. Таким образом, конкретный класс можно использовать в качестве типа данных для создания экземпляра шаблона очереди. Разные объекты класса становятся разными значениями класса.

В очереди есть приложения на компьютере. Его можно использовать, например, для управления файлами приложения для задания, если файлы хранятся на компьютере.

Chrys