Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
230105_ЛабораторныйПрактикум_Задания_New.doc
Скачиваний:
14
Добавлен:
07.12.2018
Размер:
5.07 Mб
Скачать

Лабораторная работа №7 Абстрактные типы данных (атд): список, стек, очередь. Реализация атд на базе линейного однонаправленного списка.

Цель работы

Целью работы является получение навыков организации данных и их обработки в динамической памяти.

Требования к разрабатываемой программе:

Все операции для работы со списком, очередью и стеком должны быть реализованы в отдельно скомпилированных модулях (одноименное_название.tpu).

Для удобства работы в программе должно быть реализовано меню с выпадающим подменю. В меню пользователю должен предоставляться выбор структуры данных, в подменю – выбор операций для работы с выбранной структурой данных.

В качестве базовой динамической структуры должен рассматриваться линейный однонаправленный список.

Требования к функциональному составу - выполнение программы должно демонстрировать выполнение операций, приведенных в таблице 3.

Таблица 3

Структура данных

Операции

Линейный однонаправленный список

  1. Проверка списка (пуст / не пуст);

  2. Формирование списка

  • Упорядоченного

  • Неупорядоченного

  1. Поиск элемента списка (есть или нет в списке)

  2. Добавить элемент в список

  • В начало списка

  • В конец списка

  • До элемента с определенным значением информационного поля

  • После элемента с определенным значением информационного поля

  1. Удалить

  • Первый элемент списка

  • Последний элемент списка

  • Элемент с определенным значением информационного поля

  • весь список

  1. Взять элемент списка (просмотреть значение и удалить)

  • Первый элемент

  • Последний элемент

  • Элемент с определенным значением информационного поля

  1. Просмотр элемента списка

  1. Первого элемента списка

  2. Последнего элемента списка

  3. Всего списка

  1. Индивидуальное задание

Очередь на базе линейного однонаправленного списка

  1. Проверка очереди (пуста / не пуста);

  2. Сформировать очередь

  3. Поиск элемента очереди (есть или нет в очереди)

  4. Добавить элемент в очередь

  5. Удалить

  • элемент очереди

  • всю очередь

  1. Взять (просмотреть значение и удалить)

  • элемент очереди

  • всю очередь

  1. Просмотр

  • Первого элемента очереди

  • Последнего элемента очереди

  • Всей очереди

  1. Индивидуальное задание

Стек на базе линейного однонаправленного списка

Основные операции, которые должны быть реализованы в программе:

  1. Проверка стека на пустоту;

  2. Формирование стека;

  3. Поиск элемента в стеке (есть или нет);

  4. Добавить элемент в стек;

  5. Взять (просмотреть значение и удалить)

  • Элемент из стека;

  • Весь стек

  1. Удалить

  • Элемент из стека;

  • Весь стек

  1. Просмотреть значение

  • Вершины стека

  • Содержимое стека

  1. Индивидуальное задание

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

Не забывайте освобождать память. Первым оператором подпрограммы, организующей работу программы вцелом, должен быть вызов процедуры Mark(p), а Release(p) – последним, где р - переменная типа Pointer. Проследить правильность выделения и высвобождения памяти можно, используя стандартные функции MaxAvail, MemAvail.

Набор тестовых заданий приведен в таблице 4.

Таблица 4

теста

Операция для работы со списком

Значения входных данных

Просмотр содержимого списка после выполнения операции

Создать упорядоченный список, вводя элементы со значением

9

1

5

9

5

1

Добавить в начало списка элемент со значением

-1

-1

1

5

9

Добавить в конец списка элемент со значением

13

-1

1

5

9

13

Добавить элемент со значением х до элемента списка со значением info

x

info

-3

-1

0

1

3

5

7

9

11

13

-3

-1

0

1

3

5

7

9

11

13

Добавить элемент со значением х после элемента списка со значением info

x

info

-3

-2

-1

0

1

2

3

4

5

7

9

11

13

14

-2

-3

2

1

4

3

14

13

Найти элемент в списке со значением

-3

Элемент найден

14

0

24

Такого элемента в списке нет

Удалить элемент списка со значением

-3

-2

-1

0

1

2

3

4

5

7

9

11

13

14

13

-2

-1

0

1

2

3

4

5

7

9

11

14

Удалить голову списка

-1

0

1

2

3

4

5

7

9

11

14

Удалить последний элемент списка

-1

0

1

2

3

4

5

7

9

11

Удалить голову списка

0

1

2

3

4

5

7

9

11

Удалить последний элемент списка

0

1

2

3

4

5

7

9

0

1

2

3

4

5

7

0

1

2

3

4

5

0

1

2

3

4

0

1

2

3

0

1

2

0

1

0

Операция невыполнима. Список пуст

Варианты индивидуального задания

1

1. Написать процедуру(ы), необходимые для реализации операции объединения двух упорядоченных линейных списков в один список, чтобы упорядоченность не нарушалась.

2. Написать процедуру(ы), которая подсчитывает количество элементов стека, у которых равные «соседи» (следующий и предыдущий элементы).

3. Составить процедуру(ы), которая из одной очереди Queue строит две новых: Queue1 из положительных элементов и Queue2 – из остальных элементов очереди (тип элементов очереди – real).

2

1. Написать процедуру(ы), которая находит среднее арифметическое всех элементов непустого списка L (тип элементов - real).

2. Написать процедуру(ы), которая находит минимальный элемент в стеке.

3. Написать процедуру(ы), которая формирует очередь Queue, включив в нее по одному разу элементы, которые входят в одну из очередей Queue1 и Queue2.

3

1. Написать процедуру(ы), которая удаляет из списка все отрицательные элементы.

2. Написать процедуру(ы), необходимую для того, чтобы сделать копию стека St1. Результат – стек St2.

3. Написать процедуру(ы), которая определяет, есть ли в очереди хотя бы один элемент, который равен следующему за ним элементу.

4

1. Написать процедуру(ы), которая удваивает каждое вхождение элемента Е в списке.

2. Написать процедуру(ы), которая определяет, есть ли в стеке хотя бы один элемент, который равен следующему за ним элементу.

3. Написать процедуру(ы), необходимые для определения среднего арифметического элементов очереди Queue (тип элементов - real) между первым и последним вхождением элемента Е, если элемент Е входит в очередь не менее двух раз.

5

1. Написать процедуру(ы) проверки равенства двух линейных односвязных списков.

2. Написать процедуру(ы), которая формирует стек St, включив в него по одному разу элементы, которые входят хотя бы в один из стеков St1 или St2.

3. Написать процедуру(ы), которая находит в очереди минимальный элемент

6

1. Написать процедуру(ы), необходимые для того, чтобы переставить в обратном порядке все элементы в списке между первым и последним вхождением элемента Е, если элемент Е входит в список не менее двух раз.

2. Написать процедуру(ы), которая определяет, есть ли в стеке St1 элементы, которые не входят в стек St2.

3. Написать процедуру(ы), которая в очереди, содержащей не менее двух элементов, определяет количество элементов, у которых одинаковые «соседи» (следующий и предыдущий элементы)

7

1. Написать процедуру(ы), необходимые для реализации операции добавления в линейный односвязный список новый элемент L за каждым вхождением элемента Е, если такой элемент есть в списке.

2. Написать процедуру(ы), которая находит максимальный элемент в стеке.

3. Написать процедуру(ы), которая формирует очередь Queue, включив в него по одному разу элементы, которые входят хотя бы в одну из очередей Queue1 или Queue2.

8

1. Написать процедуру(ы), которая в конец непустого списка L добавляет все его элементы, располагая их в обратном порядке (например, по списку из элементов 1, 2, 3 требуется построить список из элементов 1, 2, 3, 3, 2, 1);

2. Написать процедуру(ы), которая находит минимальный элемент в стеке.

3. Написать процедуру(ы), которая проверяет, есть ли в очереди Queue1 элементы, которые входят в очередь Queue2.

9

1.Написать процедуру(ы), необходимые для реализации операции разбиения одного линейного односвязного списка List на два списка:

  • в List1 занести элементы, меньшие введенного с клавиатуры Х;

  • в List2 - элементы, большие Х.

2. Написать процедуру(ы), которая подсчитывает количество элементов стека, у которых равные «соседи» (следующий и предыдущий элементы).

3.Написать процедуру(ы), которая определяет, есть ли в очереди Queue хотя бы один элемент, который равен следующему за ним элементу.

10

01. Написать процедуру(ы), которая определяет, есть ли в списке хотя бы один элемент, который равен следующему за ним элементу.

2. Написать процедуру(ы) для определения среднего арифметического элементов стека (тип элементов - real), находящихся между первым и последним вхождением элемента Е (если элемент Е входит в очередь не менее двух раз).

3. Написать процедуру(ы), которая проверяет равенство двух очередей Queue1 и Queue2.

11

11. Написать процедуру(ы), необходимые для того, чтобы переставить в обратном порядке все элементы в списке между первым и последним вхождением элемента Е, если элемент Е входит в список не менее двух раз.

2. Написать процедуру(ы), необходимые для реализации операции разбиения одного стека St на два:

  • в St1 занести элементы, меньшие введенного с клавиатуры Х;

  • в St2 - элементы, большие Х.

3. Написать процедуру(ы), которая находит минимальный элемент в очереди.

12

1. Написать процедуру(ы), которая находит максимальный элемент в списке.

2. Написать процедуру(ы), необходимые для реализации операции объединения двух стеков в один.

3. Написать процедуру(ы), которая проверяет, есть ли в очередях Queue1 и Queue2 одинаковые элементы.

13

1. Написать процедуру(ы), которая проверяет, есть ли в списке L хотя бы два одинаковых элемента.

2. Написать процедуру(ы), которая переносит в конец (на вершину) непустого стека его первый элемент.

3. Написать процедуру(ы), необходимые для реализации операции объединения двух упорядоченных очередей в одну очередь, чтобы упорядоченность не нарушалась.

14

1. Написать процедуру(ы), которая переворачивает список L, т.е. изменяет ссылки в этом списке так, чтобы его элементы оказались расположенными в обратном порядке;

2. Написать процедуру(ы), которая подсчитывает число вхождений элемента Е в стек St.

3. Написать процедуру(ы), которая находит среднее арифметическое всех элементов очереди (тип элементов - real).

15

1. Написать процедуру(ы), которая в списке L из каждой группы подряд идущих равных элементов оставляет только один.

2. Написать процедуру(ы), которая находит среднее арифметическое всех элементов непустого стека St (тип элементов - real).

3. Написать процедуру(ы), которая подсчитывает число вхождений элемента Е в очередь Queue.

16

1. Написать процедуру(ы), которая выводит в обратном порядке элементы непустого списка L;

2. Написать процедуру(ы), необходимые для реализации операции объединения двух стеков в один.

3. Написать процедуру(ы), которая находит в очереди, содержащей не менее двух элементов, все элементы, у которых одинаковые «соседи» (следующий и предыдущий элементы).

17

1. Написать процедуру(ы), необходимые для того, чтобы переставить в обратном порядке все элементы в списке между первым и последним вхождением элемента Е, если элемент Е входит в список не менее двух раз.

2. Написать процедуру(ы), необходимые для реализации операции разбиения одного стека St на два:

  • в St1 занести элементы, меньшие введенного с клавиатуры Х;

  • в St2 - элементы, большие Х.

3. Написать процедуру(ы), которая в очереди, содержащей не менее двух элементов, находит все элементы, у которых нет одинаковых «соседей» (следующий и предыдущий элементы).

18

1. Написать процедуру(ы), необходимые для того, чтобы переставить в обратном порядке все элементы в списке между первым и последним вхождением элемента Е, если элемент Е входит в список не менее двух раз.

2. Написать процедуру(ы), которая определяет, есть ли в стеке St1 элементы, которые не входят в стек St2.

3. Написать процедуру(ы), которая находит минимальный элемент в очереди.

19

1. Написать процедуру(ы), которая переворачивает список L, т.е. изменяет ссылки в этом списке так, чтобы его элементы оказались расположенными в обратном порядке;

2. Написать процедуру(ы), которая подсчитывает число вхождений элемента Е в стек St.

3. Написать процедуру(ы), которая находит среднее арифметическое всех элементов очереди (тип элементов - real).

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