Студопедия

КАТЕГОРИИ:

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


Синтаксис объявления класса TQueue




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



Поделиться:

Дата добавления: 2015-08-05; просмотров: 59; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты