Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ задания 2-3.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
76 Кб
Скачать
☆

1) Список строк (string list)

строка понимается в стиле Си: char *, на конце \0.

Выбрать: 1. Длина строки ограничена константой или объемом оперативной памяти (выбрать что-то одно)

2. Однонаправленный или двунаправленный

Обязательные возможности:

list( char* ) // конструктор списка из одного элемента

list + list // вернуть конкатенацию списков, операнды неизменны

list += list // присоединить к первому списку, второй неизменен

char* + list // добавить элемент в начало списка

list + char* // добавить элемент в конец списка

list - char* // удалить элемент, если есть

list[i] // получить копию i-го элемента

приведение к char* () // выписать все элементы через \n

Дополнительные возможности:

// реализовать независимость всех операций от пробелов в начале или в конце строк, т.е.

// можно добавить "abc ", затем успешно удалить " abc ".

list * list // для списков одной длины, построить список пар через \n, по одной строке из каждого списка

list[i] = char* // вставить элемент на i-е место, со сдвигом остальных вперед

2) Стек строк (string stack)

строка понимается в стиле Си: char *, на конце \0. Стек в обычном понимании (первый вошел -- последний вышел), в котором хранятся строки с владением, т.е. при уничтожении вся выделенная под них память освобождается. Для сравнения: хранение без владения означает, что хранятся и удаляются лишь указатели, а память управляется кем-то еще, тогда наш контейнер используется только для организации указателей.

Выбрать: 1. Длина строки ограничена константой или объемом оперативной памяти.

2. Емкость стека ограничена константой или параметром конструктора или

объемом оперативной памяти.

Обязательные операции:

stack::push( char* ) // положить копию строки

char* stack::pop() // вернуть верхний элемент с удалением из стека

char* stack::peek() // вернуть копию верхнего элемента без удаления

int stack::length() // текущий размер

int stack::maxsize() // максимальный размер (или -1, если "неограничен")

stack + char* // синоним push

stack - char*& // синоним pop, записывающий результат во второй операнд

3) Множество строк (string set)

строка понимается в стиле Си: char *, на конце \0. Выбрать: 1. Длина строки ограничена константой или объемом оперативной памяти.

Нужно реализовать эффективный тип данных: множество строк. Чаще всего в этом множестве будет осуществляться поиск, поэтому реализовать его нужно бинарным деревом поиска. Пользователя нужно избавить от деталей реализации, предоставив простой внешний интерфейс.

Обязательные операции:

set::add( char* ) // вставка с балансировкой

set::member( char* ) // проверка вхождения

set::delete( char* ) // удалить, если есть

int set::size() // число элементов

set + char* // синоним add

set ^ char* // синоним member

set - char* // синоним delete

Дополнительные операции:

// реализовать незаисимость всех операций от пробелов в начале или в конце строк, т.е.

// можно добавить "abc ", затем успешно удалить " abc ".

set::optimize() // перебалансировка дерева. Если это реализовано,

// то вставка всегда осуществляется быстрейшим способом,

// без балансировки.

// Периодически, когда время позволяет (например, нет

// запросов к системе), пользователь класса вызывает optimize

// для того, чтобы "утрясти" дерево и ускорить поиск.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]