- •Лабораторная работа № 1 рациональные числа
- •Теоретические сведения
- •Синтаксис объявления класса tRational
- •Программа работы
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 2 комплексные числа
- •Теоретические сведения
- •Синтаксис объявления класса tComplex
- •Программа работы
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 3 векторы
- •Теоретические сведения
- •Синтаксис объявления класса tVector
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 4 матрицы
- •Теоретические сведения
- •Арифметические операции с матрицами
- •Синтаксис объявления класса tMatrix
- •Основные свойства и методы компонента StringGrid
- •Программа работы
- •Исходные данные
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 5 строки
- •Теоретические сведения
- •Программа работы
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 6 стек
- •Теоретические сведения
- •Синтаксис объявления класса tStack
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 7 очередь
- •Теоретические сведения
- •Синтаксис объявления класса tQueue
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 8 деревья
- •Теоретические сведения
- •Синтаксис объявления класса tTreeNode
- •Синтаксис объявления класса tTree
- •Программа работы
- •Контрольные вопросы
- •Библиографический список
- •Содержание
Синтаксис объявления класса tStack
namespace MyStack
{
#include <vector>
#include <SysUtils.hpp>
using namespace std;
#define EStackError Exception
#define EStackOverflow EStackError
#define EStackEmpty EStackError
template <class T>
classTStack
{
private:
int Top;
int Size;
vector<T> Items;
public:
TStack(int MaxSize = 2147483647);
void Push(T Value);
T Pop();
T Peek();
bool Empty();
boolFull();
voidClear();
};
};
Класс TStackявляется шаблонным классом и содержит три поля для хранения вершины стекаTop, его размераSizeи списка элементовItems, конструкторTStack, который задает максимальный размер списка элементов, три метода для работы со стекомPush,PopиPeek, процедуру очистки списка элементовClear, а также две функции проверки пустого стека Emptyи полностью заполненногоFull.
В модуле с данным классом можно определить три класса исключительных ситуаций EStackError, EStackOverflowиEStackEmptyдля обработки ошибок, которые могут возникать при работе со стеком.
#define EStackError Exception
#define EStackOverflow EStackError
#define EStackEmpty EStackError
Чтобы использовать эти классы, в заголовочном разделе модуля с расширением hнеобходимо подключить модульSysUtils.hpp, в котором хранить базовый класс исключительных ситуацийException.
После объявления класса TStackнеобходимо определить все его методы в заголовочном разделе модуля с расширениемh в соответствии сADT– форматом, поместив их и сам класс в новое пространство именMyStackтак, какимя классаTStack пересекается со стандартным классом среды Code Gear.
template <class T>
TStack<T>::TStack(int MaxSize)
{
if (MaxSize < 1)
throw EStackError("Размер стека меньше единицы");
Size = MaxSize;
Top = -1;
}
template <class T>
voidTStack<T>::Push(T Value)
{
if (Full())
throw EStackOverflow("Переполнение стека");
Top++;
Items.push_back(Value);
}
template <class T>
T TStack<T>::Pop()
{
if (Empty())
throw EStackEmpty("Стек пустой");
T Result = Items[Top];
Items.pop_back();
Top--;
return Result;
}
template <class T>
T TStack<T>::Peek()
{
if (Empty())
throw EStackEmpty("Стек пустой");
return Items[Top];
}
template<class T>
boolTStack<T>::Empty()
{
return Top == -1;
}
template<class T>
boolTStack<T>::Full()
{
return Top == Size - 1;
}
template<class T>
voidTStack<T>::Clear()
{
Items.сlear();
Top= -1;
}
После того, как определен класс TStack в пространстве именMyStack, его можно использовать в любом месте программы, подключив соответствующий модуль.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MyStack::TStack<char> Stack;
Stack.Push('К');
Stack.Push('О');
Stack.Push('Т');
Edit1->Text = "";
while (!Stack.Empty())
Edit1->Text = Edit1->Text + Stack.Pop(); //Text=ТОК
}
Стек является одной из широко используемых структур данных во всех языках программирования. С его помощью осуществляется вызов функций и методов, передача им значений переменных, объявленных в списке параметров и возвращение результата выполнения функции. Он применяется для упорядочивания элементов массивов, построения способов прохождения деревьев, приведения десятичного числа к заданной системе счисления и т.д.
Наиболее ярким примером использования стека является нахождение палиндромов – последовательности символов, одинаково читаемой как слева на право, так и наоборот. Алгоритм этого процесса организуется следующим образом:
Из исходной строки удаляются все служебные символы и знаки препинания.
Все символы очищенной строки приводится к одному регистру.
Преобразованная строка помещается в стек.
Последовательно извлекая символы из стека, сравнивают их с символами преобразованной строки. Если они все совпали, то исходная строка является палиндромом, в противном случае – нет.
Например,
А роза упала на лапу Азора. // Исходная строка
Арозаупаланалапуазора // Очищенная строка
арозаупаланалапуазора // Преобразованная строка к нижнему регистру
арозаупаланалапуазора // Строка из стека