КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Синтаксис объявления класса TQueuetemplate <class T> class TQueue { private: int Rear; int Size; vector<T> Items; public: TQueue(int MaxSize = 2147483647); void Insert(T Value); T Delete(); T Front(); bool Empty(); bool Full(); void Clear(); };
Класс TQueue является шаблонным классом и содержит: три поля для хранения конца очереди Rear, её размера Size и списка элементов Items, конструктор TQueue, который задает максимальный размер списка элементов, три метода для работы с очередью Insert, Delete и Front, процедуру очистки списка элементов Clear, а также две функции проверки пустой очереди Empty и полностью заполненной Full. В модуле с данным классом можно определить три класса исключительных ситуаций EQueueError, EQueueOverflow и EQueueEmpty для обработки ошибок, которые могут возникать при работе с очередью. #define EQueueError Exception #define EQueueOverflow EStackError #define EQueueEmpty EStackError Чтобы использовать эти классы, в заголовочном разделе модуля с расширением h необходимо подключить модуль SysUtils.hpp, в котором хранить базовый класс исключительных ситуаций Exception. После объявления класса TQueue необходимо определить все его методы в заголовочном разделе модуля с расширением h в соответствии с ADT – форматом, поместив их и сам класс в новое пространство имен MyQueue так, как имя класса TQueue пересекается со стандартным классом среды Code Gear. template <class T> TQueue<T>::TQueue(int MaxSize) { if (MaxSize < 1) throw EQueueError("Размер очереди меньше единицы"); Size = MaxSize; Rear = -1; }
template <class T> void TQueue<T>::Insert(T Value) { if (Full()) throw EQueueOverflow("Переполнение очереди"); Rear++; Items.push_back(Value); }
template <class T> T TQueue<T>::Delete() { if (Empty()) throw EQueueEmpty("Очередь пустая"); T Result = Items[0]; for (int i = 0; i < Rear; i++) Items[i] = Items[i + 1]; Items.pop_back(); Rear--; return Result; }
template <class T> T TQueue<T>::Front() { if (Empty()) throw EQueueEmpty("Очередь пустая"); return Items[0]; }
template <class T> bool TQueue<T>::Empty() { return Rear == -1; }
template <class T> bool TQueue<T>::Full() { return Rear == Size - 1; } template <class T> void TQueue<T>::Clear() { Items.erase(); Rear = -1; } После того, как определен класс TQueue,в пространстве имен MyQueue, его можно использовать в любом месте программы, подключив соответствующий модуль. void __fastcall TForm1::Button1Click(TObject *Sender) { MyQueue::TQueue<char> Queue; Queue.Insert('Q'); Queue.Insert('U'); Queue.Insert('E'); Queue.Insert('U'); Queue.Insert('E'); Edit1->Text = ""; while (!Queue.Empty()) Edit1->Text = Edit1->Text + Queue.Delete(); } Очередь, как и стек, является одной из широко используемых структур данных во всех языках программирования. С ее помощью организуется многозадачность в среде Windows, осуществляется обмен сообщениями между операционной системой и приложениями. Она применяется при построении алгоритмов прохождения деревьев и сортировки данных, а обслуживание покупателей в магазине и буферизация задач печати документов в системе входных потоков принтера являются классическими примерами её использования.
|