Индивидуальные задания

Написать программу по созданию, добавлению, просмотру и решению поставленной задачи (в рассмотренных примерах это действие отсутствует) для однонаправленного линейного списка типа СТЕК. Реализовать сортировку стека двумя рассмотренными выше методами.

Решение поставленной задачи описать в виде блок-схемы.

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

1. Разделить созданный список на два: в первом – положительные числа, во втором – отрицательные.

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

3. Удалить из созданного списка отрицательные элементы.

4. В созданном списке поменять местами крайние элементы.

5. Из созданного списка удалить элементы, заканчивающиеся на цифру 5.

6. В созданном списке поменять местами элементы, содержащие максимальное и минимальное значения.

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

8. Перенести из созданного списка в новый список все элементы, находящиеся между вершиной и элементом с минимальным значением.

9. В созданном списке определить количество и удалить все элементы, находящиеся между минимальным и максимальным элементами.

10. В созданном списке определить количество элементов, имеющих значения, меньше среднего значения от всех элементов, и удалить эти элементы.

11. В созданном списке вычислить среднее арифметическое и заменить им первый элемент.

12. Созданный список разделить на два: в первый поместить четные, а во второй – нечетные числа.

13. В созданном списке определить максимальное значение и удалить его.

14. Из созданного списка удалить каждый второй элемент.

15. Из созданного списка удалить каждый нечетный элемент.

16. В созданном списке вычислить среднее арифметическое и заменить им все четные значения элементов.

Лабораторная работа №4. Динамическая структура ОЧЕРЕДЬ

Цель работы: изучить возможности работы со списками, организованными в виде очереди.

Краткие теоретические сведения

Очередь – линейный список, в котором извлечение данных происходит из начала, а добавление – в конец, т.е. это структура, организованная по принципу FIFO (First In, First Out) – первым вошел, первым выйдет.

При работе с очередью используют два указателя – на первый элемент (начало – begin) и на последний (конец – end). Очереди организуются в виде односвязных или двухсвязных списков, в зависимости от количества связей (указателей) в адресной части элемента структуры.

Односвязные списки

Шаблон элемента структуры, информационной частью которого является целое число (аналогично стеку), будет иметь следующий вид:

struct Spis1 {

int info;

Spis1 *next;

} *begin, *end; // Указатели на начало и на конец

Основные операции с очередью следующие:

– формирование очереди;

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

– освобождение занятой памяти.

Формирование очереди состоит из двух этапов: создание первого элемента и добавление нового элемента в конец очереди.

Функция формирования очереди из данных объявленного выше типа Spis 1 с добавлением новых элементов в конец может иметь следующий вид (b – начало очереди, e – конец):

void Create(Spis1 **b, Spis1 **e, int in) { // in – переданная информация

Spis1 *t = new Spis1;

t -> info = in; // Формирование информационной части

t -> next = NULL; // Формирование адресной части

if(*b == NULL) // Формирование первого элемента

*b = *e = t;

else { // Добавление элемента в конец

(*e) -> next = t;

*e = t;

}

}

Обращение к функции Create(&begin, &end, in);

Алгоритмы просмотра и освобождения памяти выполняются аналогично рассмотренным ранее для Стека (см. л.р. 3).

Двухсвязные списки

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

Зададим структуру, в которой адресная часть состоит из указателей на предыдущий (prev) и следующий (next) элементы:

struct Spis2 {

int info;

Spis2 *prev, *next;

} *begin, *end;

Формирование двунаправленного списка проводится в два этапа – формирование первого элемента и добавление нового, причем добавление может выполняться как в начало (begin), так и в конец (end) списка.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: