- •Лабораторная работа № 1 рациональные числа
- •Теоретические сведения
- •Синтаксис объявления класса tRational
- •Программа работы
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 2 комплексные числа
- •Теоретические сведения
- •Синтаксис объявления класса tComplex
- •Программа работы
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 3 векторы
- •Теоретические сведения
- •Синтаксис объявления класса tVector
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 4 матрицы
- •Теоретические сведения
- •Арифметические операции с матрицами
- •Синтаксис объявления класса tMatrix
- •Основные свойства и методы компонента StringGrid
- •Программа работы
- •Исходные данные
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 5 строки
- •Теоретические сведения
- •Программа работы
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 6 стек
- •Теоретические сведения
- •Синтаксис объявления класса tStack
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 7 очередь
- •Теоретические сведения
- •Синтаксис объявления класса tQueue
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 8 деревья
- •Теоретические сведения
- •Синтаксис объявления класса tTreeNode
- •Синтаксис объявления класса tTree
- •Программа работы
- •Контрольные вопросы
- •Библиографический список
- •Содержание
Синтаксис объявления класса tQueue
template <class T>
classTQueue
{
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();
voidClear();
};
Класс 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, осуществляется обмен сообщениями между операционной системой и приложениями. Она применяется при построении алгоритмов прохождения деревьев и сортировки данных, а обслуживание покупателей в магазине и буферизация задач печати документов в системе входных потоков принтера являются классическими примерами её использования.