 
        
        Министерство образования Российской Федерации
Тверской государственный технический университет
 
Кафедра электронных вычислительных машин
Стеки, очереди и хэш-таблицы
Методические указания
к лабораторной работе №3 по дисциплине
«Программирование на языках высокого уровня»
для студентов специальности 220100 (ВМКСС)
Тверь, 20010 Цель работы
Научиться создавать и использовать динамические структуры данных на основе линейных списков – стеки, очереди и хэш-таблицы.
Содержание отчета
Отчет по работе должен содержать:
- Цель работы 
- Вариант задания на выполнение работы 
- Алгоритм программы в виде псевдокода. 
- Исходный текст программы. 
- Результаты выполнения программы. 
Варианты выполнения работы
Варианты 1-10 (Сложность 1)
- Использовать контейнер Stack для создания стека, хранящего символы. В созданном стеке найти и удалить первый от вершины гласный символ. 
- Использовать контейнер Queue для хранения целых чисел. В созданной очереди удалить все отрицательные элементы, оставив остальные в том же порядке. 
- Использовать контейнер HashTable для создания русско-английского словаря. Ввести в цикле несколько английских слов и для них определить, у какого слова самый длинный русский эквивалент. 
- … 
- … 
- … 
- … 
- … 
- … 
- … 
Варианты 11-20 (Сложность 2)
- Использовать контейнер Stack для создания стека, хранящего символы. В созданном стеке найти и поместить на вершину самый последний по алфавиту символ. Порядок остальных символов оставить прежним. 
- Использовать контейнер Queue для хранения дробных чисел. В созданной очереди определить сумму дробных частей всех ее элементов и поместить эту сумму в начало очереди, оставив остальные в том же порядке. 
- Использовать контейнер HashTable для создания русско-английского словаря. Ввести в цикле несколько английских слов и для них определить, русский эквивалент самого длинного английского слова. Если таких слов несколько, найти все их эквиваленты. 
- Использовать контейнер HashTable для создания русско-английского словаря. Ввести предложение, состоящее из нескольких английских слов и для них определить русский эквивалент этого предложения. Вместо отсутствующих слов добавить в получившуюся фразу словосочетание «нет в словаре». 
- … 
- … 
- … 
- … 
- … 
Варианты 21-30 (Сложность 3)
- Использовать контейнер Stack для создания стека, хранящего слова. В созданном стеке найти и разобрать на буквы слово минимальной длины. Порядок остальных слов оставить прежним. Для временного хранения слов использовать второй стек. 
- Использовать контейнер Queue для хранения структур, содержащих координаты точки. В созданной очереди найти точку, ближе всех находящуюся к началу координат, и поместить эту точку (или точки, если их несколько) в начало очереди, остальные разместив в обратном порядке. Для временного хранения точек использовать стек. 
- Использовать контейнер HashTable для создания двух словарей: русско-английского и англо-русского. Для созданных словарей проверить, совпадают ли в них слова. Вместо отсутствующих слов добавить в получившуюся фразу словосочетание «нет в словаре:» + название словаря («русско-английский» или «англо-русский»). 
- . 
- … 
- … 
- … 
- … 
- … 
Варианты 31-40 (Сложность 4)
- Разработать собственный класс MyStack для создания стека, хранящего символы. В созданном стеке найти и удалить первый от вершины гласный символ. 
- Разработать собственный класс MyStack для создания стека. Стек хранит символьные строки и организован с использованием однонаправленного списка. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyStack для создания стека. Стек хранит символьные строки и организован с использованием двунаправленного списка. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyStack для создания стека. Стек хранит заданные программистом структуры данных и организован с использованием динамического массива. Продемонстрировать работу всех функций созданного класса. 
- … 
- … 
- … 
- … 
Варианты 41-50 (Сложность 5)
- Разработать собственный класс MyQueue для хранения целых чисел. В созданной очереди удалить все отрицательные элементы, оставив остальные в том же порядке. 
- Разработать собственный класс MyQueue для хранения целых чисел. В созданной очереди поменять местами все рядом стоящие пары элементов одного знака, оставив остальные в том же порядке. 
- Разработать собственный класс MyQueue для хранения символьных строк. В созданной очереди объединить все рядом расположенные строки, суммарная длина которых не превышает М символов, оставив остальные в том же порядке. 
- Разработать собственный класс MyQueue для хранения символьных строк. В созданной очереди найти строку, имеющую наибольшее количество гласных символов и переместить ее в начало очереди, оставив остальные в том же порядке. 
- … 
- … 
- … 
- … 
- … 
Варианты 51-60 (Сложность 6)
- Разработать собственный класс MyQueue для работы с приоритетной очередью. Запрос в очереди реализовать через структуру, хранящую приоритет и текстовое поле. Постановка запросов в очередь выполняется по приоритету, снятие - подряд из младших адресов (начала очереди). Очередь организована на массиве со сдвигом после каждого чтения. Приоритет: мin значение числового параметра, при совпадении параметров – LIFO. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyQueue для работы с приоритетной очередью. Запрос в очереди реализовать через структуру, хранящую приоритет и текстовое поле. Постановка запросов в очередь выполняется по приоритету, снятие - подряд из младших адресов (начала очереди). Очередь организована на массиве со сдвигом после достижения границы памяти, которая выделена для очереди. Приоритет: max значение числового параметра, при совпадении параметров – LIFO. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyQueue для работы с приоритетной очередью. Запрос в очереди реализовать через структуру, хранящую приоритет и текстовое поле. Постановка запросов в очередь выполняется подряд в старшие адреса (конец очереди), снятие - по приоритету. Очередь организована на массиве со сдвигом после каждого чтения. Приоритет: мin значение числового параметра, при совпадении параметров – LIFO. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyQueue для работы с приоритетной очередью. Запрос в очереди реализовать через структуру, хранящую приоритет и текстовое поле. Постановка запросов в очередь выполняется подряд в старшие адреса (конец очереди), снятие - по приоритету. Очередь организована на списке. Приоритет: мах значение числового параметра, при совпадении параметров – LIFO. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyQueue для работы с приоритетной очередью. Запрос в очереди реализовать через структуру, хранящую приоритет и текстовое поле. Постановка запросов в очередь выполняется подряд в старшие адреса (конец очереди), снятие - по приоритету. Очередь организована на массиве с циклическим заполнением. Приоритет: мin значение числового параметра, при совпадении параметров – LIFO. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyQueue для работы с приоритетной очередью. Запрос в очереди реализовать через структуру, хранящую приоритет и координаты точки. Постановка запросов в очередь выполняется по приоритету, снятие - подряд из младших адресов (начала очереди). Очередь организована на массиве со сдвигом после каждого чтения. Приоритет: мin значение числового параметра, при совпадении параметров – FIFO. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyQueue для работы с приоритетной очередью. Запрос в очереди реализовать через структуру, хранящую приоритет и координаты точки. Постановка запросов в очередь выполняется по приоритету, снятие - подряд из младших адресов (начала очереди). Очередь организована на массиве со сдвигом после достижения границы памяти, которая выделена для очереди. Приоритет: max значение числового параметра, при совпадении параметров – FIFO. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyQueue для работы с приоритетной очередью. Запрос в очереди реализовать через структуру, хранящую приоритет и координаты точки. Постановка запросов в очередь выполняется подряд в старшие адреса (конец очереди), снятие - по приоритету. Очередь организована на массиве со сдвигом после каждого чтения. Приоритет: мin значение числового параметра, при совпадении параметров – FIFO. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyQueue для работы с приоритетной очередью. Запрос в очереди реализовать через структуру, хранящую приоритет и координаты точки. Постановка запросов в очередь выполняется подряд в старшие адреса (конец очереди), снятие - по приоритету. Очередь организована на списке. Приоритет: мах значение числового параметра, при совпадении параметров – FIFO. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyQueue для работы с приоритетной очередью. Запрос в очереди реализовать через структуру, хранящую приоритет и координаты точки. Постановка запросов в очередь выполняется подряд в старшие адреса (конец очереди), снятие - по приоритету. Очередь организована на массиве с циклическим заполнением. Приоритет: мin значение числового параметра, при совпадении параметров – FIFO. Продемонстрировать работу всех функций созданного класса 
Варианты 61-70 (Сложность 7)
- Разработать собственный класс MyDeck для работы с деком. Дек организован на массиве с циклическим заполнением. Операции выполняются с обоих концов Дека. Запрос в деке реализовать через структуру, хранящую координаты точки. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyDeck для работы с деком. Дек организован на двунаправленном списке. Операции выполняются с обоих концов Дека. Запрос в деке реализовать через структуру, хранящую координаты точки. Продемонстрировать работу всех функций созданного класса. 
- .. 
- .. 
- .. 
- .. 
- .. 
- .. 
- .. 
Варианты 71-80 (Сложность 8)
- Разработать собственный класс MyHashTable для создания русско-английского словаря. Способ хранения пар «ключ-значение» выбрать самостоятельно. Ввести в цикле несколько английских слов и для них определить, у какого слова самый длинный русский эквивалент. 
- Разработать собственный класс MyHashTable для создания двух словарей: русско-английского и англо-русского. Для созданных словарей проверить, совпадают ли в них слова. Вместо отсутствующих слов добавить в получившуюся фразу словосочетание «нет в словаре:» + название словаря («русско-английский» или «англо-русский»). 
- Разработать собственный класс MyHashTable для создания русско-английского словаря. Ввести в цикле несколько английских слов и для них определить, русский эквивалент самого длинного английского слова. Если таких слов несколько, найти все их эквиваленты. 
- Разработать собственный класс MyHashTable для создания русско-английского словаря. Ввести предложение, состоящее из нескольких английских слов и для них определить русский эквивалент этого предложения. Вместо отсутствующих слов добавить в получившуюся фразу словосочетание «нет в словаре». 
- Разработать собственный класс MyHashTable для хранения структур, каждая из которых хранит информацию о поезде дальнего следования (4-5 полей). В качестве ключевого поля использовать номер поезда. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyHashTable для хранения структур, каждая из которых хранит информацию о маршруте городского транспорта (4-5 полей). В качестве ключевого поля использовать номер маршрута + вид транспорта. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyHashTable для хранения структур, каждая из которых хранит информацию об авиарейсе (4-5 полей). В качестве ключевого поля использовать номер рейса. Продемонстрировать работу всех функций созданного класса. 
- Разработать собственный класс MyHashTable для хранения структур, каждая из которых хранит информацию об автомобиле (4-5 полей). В качестве ключевого поля использовать номер государственной регистрации автомобиля. Продемонстрировать работу всех функций созданного класса. 
- .. 
- .. 
Варианты 81-90 (Сложность 9)
- Описать структуру point для хранения координат точки. Использовать контейнер Stack<point> для реализации алгоритма закраски замкнутого контура по известной точке внутри него. 
- Использовать Stack<char> для реализации алгоритма, проверяющего правильность расстановки скобок различного типа в скобочном выражении. 
- Использовать Stack<char> и Stack<int> для реализации алгоритма вычисления значения арифметического выражения, содержащего целые числа и знаки арифметических операции. 
- … 
- … 
- … 
- … 
- … 
- … 
- … 
Варианты 91-100 (Сложность 10)
- Использовать Stack<char> и Stack<int> для реализации алгоритма вычисления значения арифметического выражения, содержащего целые числа, знаки арифметических операции, а также круглые скобки. 
