Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб8.doc
Скачиваний:
5
Добавлен:
23.11.2019
Размер:
198.66 Кб
Скачать

Динамические структуры данных: двунаправленные списки

Двунаправленный список обрабатывается аналогично однонаправленному.

Выделим типовые операции:

  • добавление звена в начало списка;

  • удаление звена из начала списка;

  • добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан);

  • удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан);

  • проверка, пуст ли список;

  • очистка списка;

  • печать списка;

  • формирование списка.

Задания

Задание 1. Наследование. Требуется создать базовый класс и определить общие и специфические методы для данного класса. Создать производные классы, в которые добавить свойства и методы. Часть методов переопределить. Создать массив объектов базового класса и заполнить объектами производных классов. Предусмотреть передачу аргументов конструкторам базового класса, использовать виртуальные и перегруженные функции.

Задание 2. Создать шаблон класса согласно варианту.

Номер варианта

Задание

1

  1. Создать базовый класс «Транспортное средство» и производные классы «Автомобиль», «Велосипед», «Повозка». Подсчитать время и стоимость перевозки пассажиров и грузов каждым транспортным средством.

  2. Разработать шаблон класса для работы с однонаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая в списке L заменяет первое вхождение списка L1 (если такое есть) на список L2.

2

  1. Создать базовый класс «Грузоперевозчик» и производные классы «Самолет», «Поезд», «Автомобиль». Определить время и стоимость перевозки для указанных городов и расстояний.

  2. Разработать шаблон класса для работы с однонаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая удаляет из списка L за каждым вхождением элемента E один элемент, если такой есть и он отличен от E.

3

  1. Создать абстрактный класс «Работник фирмы» и производные классы «Менеджер», «Администратор», «Программист».

  2. Разработать шаблон класса для работы с однонаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая удаляет из списка L все элементы с указанным значением.

4

  1. Смоделировать базу данных клиентов бензоколонки. Каждый клиент имеет индивидуальный код, имя. База должна хранить код клиента, дату и время заправки, количество заправленного топлива. Требуется выдавать информацию о заправках как по дате, так и по клиенту.

  2. Разработать шаблон класса для работы с однонаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая вставляет в список L за первым вхождением элемента E все элементы списка L, если E входит в L.

5

  1. Создать базовый класс «Учащийся» и производные классы «Школьник» и «Студент». Создать массив объектов базового класса и заполнить этот массив объектами. Показать отдельно студентов и школьников.

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая печатает в обратном порядке элементы непустого списка L.

6

  1. Создать базовый класс «Музыкальный инструмент» и производные классы «Ударный», «Струнный», «Духовой». Создать массив объектов «Оркестр». Выдать состав оркестра, переопределив метод.

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая сортирует элементы списка по возрастанию.

7

  1. Создать базовый класс «Садовое дерево» и производные классы «Яблоня», «Вишня», «Груша» и др. С помощью конструктора автоматически установить номер каждого дерева. Принять решение о пересадке каждого дерева в зависимости от возраста и плодоношения.

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая подсчитывает количество элементов списка L, у которых равные «соседи».

8

  1. Создать базовый класс «Пассажироперевозчик» и производные классы «Самолет», «Поезд», «Автомобиль». Определить время и стоимость передвижения.

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая определяет, есть ли в списке L хотя бы один элемент, который равен следующему за ним (по кругу) элементу (первый элемент считать следующим для последнего).

9

  1. Создать базовый класс «Домашнее животное» и производные классы «Собака», «Кошка», «Попугай» и др. С помощью конструктора установить имя каждого животного и его характеристики.

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая в списке L переставляет в обратном порядке все элементы между первым и последним вхождениями элемента E, если E входит в L не менее двух раз.

10

  1. Создать базовый класс «Садовое дерево» и производные классы «Яблоня», «Вишня», «Груша» и др. С помощью конструктора автоматически установить номер каждого дерева. Принять решение о пересадке каждого дерева в зависимости от возраста и плодоношения.

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая удаляет из списка L первое вхождение заданного элемента, если такой есть.

11

  1. Создать класс Item (единица хранения в библиотеке), содержащий данные-члены: invNumber – инвентарный номер и taken – взято на руки или имеется в наличии, а также методы:

virtual void Show(); //показать информацию о единице хранения

bool isAvailable(); // есть ли единица хранения в наличии ?

int GetinvNumber(); //возвращает инвентарный номер

void Take(); // операция «взять»

void Return(); // операция «вернуть»

Построить производные классы Book и Magazin. Класс Book содержит данные-члены: author, title, publisher, year и методы: Author();

Title(); Publisher(); YearOf Publishing(); Show().

Класс Magazin включает данные-члены: volume; number; year; title и методы: Volume(); Title(); Number(); Year(); Show().

  1. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая из списка L, содержащего не менее двух элементов, удаляет все элементы, у которых одинаковые «соседи» (первый и последний элементы считать соседями).

12

  1. Смоделировать процесс сортировки ж/д состава на Т-образном сортировочном узле. Программа должна разделять на 2 направления состав, состоящий из вагонов двух типов (на каждое направление фор-мируется состав из вагонов одного типа).

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая добавляет в начало и конец списка L новый элемент E.

13

  1. Смоделировать процесс наличия автобусов в автобусном парке. В начальный момент формируются данные о всех автобусах в парке. При работе программы формируются 2 списка: 1 – об автобусах, находящихся в парке, 2 – об автобусах, находящихся на маршруте. При выезде автобуса вводится его номер и программа удаляет его запись из списка автобусов, находящихся в парке, и добавляет его в список автобусов, находящихся на маршруте. При въезде в парк производится обратная операция. По запросу выводится информация об автобусах, находящихся на маршруте и в парке с указанием времени выезда и заезда соответственно.

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая в списке L справа и слева от элемента E вставляет элемент F.

14

  1. Смоделировать процесс заполнения диска емкостью 360К. В процессе работы файлы произвольной длины от 16К до 32К (выбираются случайным образом) записываются на диск или удаляются с него. При попытке записать файл длиной более длины непрерывного свободного участка файл не записывается и выдается сообщение. По запросу выдается информация о свободных и занятых участках.

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая строит двунаправленный список L по однонаправленному списку L1.

15

  1. Написать класс одномерного массива строк, каждая строка может иметь произвольную длину. Определить операции индексации, операции + и – с правым операндом типа char* для добавления и удаления строки в массив.

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая в конец непустого списка L добавляет все его элементы, располагая их в обратном порядке (например, по списку из элементов 1, 2, 3 требуется построить список из элементов 1, 2, 3, 3, 2, 1).

16

  1. Смоделировать процесс выдачи книг из библиотеки. Каждая книга характеризуется автором (одним), названием, годом издания и общим количеством экземпляров. Кроме списка книг требуется создать список читателей. Для каждого читателя и книги требуется хранить информацию о соответственно книгах, которые читатель взял, и читателях, взявших книгу. Требуется выдавать информацию: по книге - о возможности выдачи, списке читателей, взявших книгу; по читателю – о книгах у читателя.

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая проверяет симметричность участка списка с i-го по j-й элемент (i < j).

17

  1. Смоделировать базу данных клиентов бензоколонки. Каждый клиент имеет индивидуальный код, имя. База должна хранить код клиента, дату и время заправки, количество заправленного топлива. Требуется выдавать информацию о заправках как по дате, так и по клиенту.

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая удаляет все элементы между минимальным и максимальным элементами.

18

  1. Определить класс «Строка» – String длины n. Написать несколько конструкторов, в том числе конструктор копирования. Реализовать методы для выполнения конкатенации строк, извлечения символа из заданной позиции, сравнения строк. Перегрузить операции сложения, индексирования, отношения, добавления (+ =) , присваивания для данного класса. Создать массив объектов и передать его в функцию, которая выполняет сортировку строк.

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая, если у элемента со значением E "соседи" не равны, меняет их местами.

19

  1. Создать базовый класс «Грузоперевозчик» и производные классы «Самолет», «Поезд», «Автомобиль». Определить время и стоимость перевозки для указанных городов и расстояний.

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая, если у элемента со значением E "соседи" не равны, заменяет их на элемент F.

20

  1. Создать базовый класс «Пассажироперевозчик» и производные классы «Самолет», «Поезд», «Автомобиль». Определить время и стоимость передвижения.

  2. Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая меняет местами фрагменты списка между минимальным и максимальным элементами.

21

  1. «Комплексное число» – Complex. Класс должен содержать несколько конструкторов и операции для сложения, вычитания, умножения, деления, присваивания. Создать два вектора размерности n из комплексных координат. Передать их в функцию, которая выполняет сложение комплексных векторов.

  2. Разработать шаблон класса для работы с однонаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая определяет количество различных элементов списка.

22

  1. Создать базовый класс «Учащийся» и производные классы «Школьник» и «Студент». Создать массив объектов базового класса и заполнить этот массив объектами. Показать отдельно студентов и школьников.

  2. Разработать шаблон класса для работы с однонаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая повторяет дважды каждое вхождение элемента Е в список L

23

  1. Создать базовый класс «Музыкальный инструмент» и производные классы «Ударный», «Струнный», «Духовой». Создать массив объектов «Оркестр». Выдать состав оркестра, переопределив метод.

  2. Разработать шаблон класса для работы с однонаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая формирует список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2.

24

  1. Определить класс «Дробь» – Fraction в виде пары (m,n). Класс должен содержать несколько конструкторов. Реализовать методы для сложения, вычитания, умножения и деления дробей. Перегрузить операции сложения, вычитания, умножения, деления, присваивания и операции отношения. Создать массив объектов и передать его в функцию, которая изменяет каждый элемент массива с четным индексом путем добавления следующего за ним элемента массива.

  2. Разработать шаблон класса для работы с однонаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в список L2.

25

  1. Разработать класс «Вектор» – Vector размерности n . Определить несколько конструкторов, в том числе конструктор копирования. Реализовать методы для вычисления модуля вектора, скалярного произведения, сложения, вычитания, умножения на константу. Перегрузить операции сложения, вычитания, умножения, инкремента, декремента, индексирования, присваивания для данного класса. Создать массив объектов. Написать функцию, которая для заданной пары векторов будет определять, являются ли они коллинеарными или ортогональными.

  2. Разработать шаблон класса для работы с однонаправленным некольцевым списком. Реализовать следующие действия: добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); проверка, пуст ли список; очистка списка; формирование списка; печать списка. Решить задачу: составить программу, которая определяет количество различных элементов списка.

15

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