Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка2.doc
Скачиваний:
34
Добавлен:
13.02.2015
Размер:
1.4 Mб
Скачать

Синтаксис объявления класса 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, осуществляется обмен сообщениями между операционной системой и приложениями. Она применяется при построении алгоритмов прохождения деревьев и сортировки данных, а обслуживание покупателей в магазине и буферизация задач печати документов в системе входных потоков принтера являются классическими примерами её использования.