Динамические структуры: списки

  • docx
  • 11.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-00662.docx

мДиДинамические структуры: списки

Базовый уровень

Задание: написать программу в соответствии с индивидуальным зада-


вар.

Задача

1

Создать линейный однонаправленный список из целых чисел. Опреде-

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

2

Создать линейный однонаправленный список из целых чисел. Опреде-

лить сумму значений элементов списка, кратных 5.

3

Создать линейный однонаправленный список из вещественных чисел.

Определить количество элементов списка со значениями больше 7.

4

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

в список число 10 после первого элемента с отрицательным значением.

 

5

Создать линейный однонаправленный список из вещественных чисел.

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

6

Создать линейный однонаправленный список из вещественных чисел.

Удалить из списка элемент перед первым элементом со значением 55.

7

Создать линейный однонаправленный список из целых чисел. Удалить

из списка первый элемент со значением 10.

8

Создать линейный однонаправленный список из вещественных чисел.

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

9

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

в список число 10 после каждого элемента с отрицательным значением.

 

10

Создать линейный однонаправленный список из вещественных чисел. Удалить из списка элемент после каждого элемента с положительным

значением.

 

11

Создать линейный однонаправленный список из целых чисел. Опреде- лить среднее арифметическое значений элементов списка, начиная с 5-

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


вар.

Задача

12

Создать линейный однонаправленный список из целых чисел. Удалить

из списка первый элемент со значением 10.

13

Создать линейный однонаправленный список из вещественных чисел.

Вставить в список число 0.99 перед каждым элементом со значением 55.

14

Создать линейный однонаправленный список из вещественных чисел.

Удалить из списка элемент перед положительным первым элементом.

15

Создать линейный однонаправленный список из целых чисел. Удалить

из списка первый элемент со значением меньше -10.

16

Создать линейный однонаправленный список строк. Вывести все стро-

ки списка, начинающиеся на заглавную латинскую букву.

17

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

в список число 15 после каждого элемента, по модулю меньшего 2.

18

Создать линейный однонаправленный список из целых чисел. Удалить

из списка два элемента после каждого элемента с нечетным значением.

 

19

Создать линейный однонаправленный список из целых чисел. Опреде-

лить среднее арифметическое значений всех элементов списка, кроме второго и третьего.

20

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

в список два числа 111 и 222 перед первым элементом со значением 0.

21

Создать линейный однонаправленный список строк. Удалить из списка

первую строку, заканчивающуюся на цифру.

22

Создать линейный однонаправленный список строк. Посчитать общее

количество латинских букв во всех строках.

23

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

в список число 12 после первого элемента большего 10.

 

24

Создать линейный однонаправленный список из вещественных чисел. Удалить из списка начальный (первый) элемент и конечный элемент.

Учесть возможность пустого списка и списка из одного элемента (тогда результат пустой список).

 

25

Создать линейный однонаправленный список из целых чисел. Удалить

из списка два последних элемента. Учесть возможность пустого списка и списка из одного элемента (тогда результат – пустой список).

26

Создать линейный однонаправленный список строк. Удалить первую

строку-дубликат (совпадающую с предыдущей строкой).

27

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

в список число 12 перед первым элементом, равным 7.

 

28

Создать линейный однонаправленный список из вещественных чисел. Удалить из списка первый элемент, равный 10. Учесть возможность пустого

списка и списка из одного элемента (тогда результат пустой список).

 

29

Создать линейный однонаправленный список из символов. Удалить из

списка элемент, после символа @. Учесть возможность пустого списка и списка из одного элемента (тогда результат – пустой список).


вар.

Задача

30

Создать линейный однонаправленный список строк. Удалить строку с

минимальной длиной.

 


 

 

 

нием.


Средний уровень

Задание: написать программу в соответствии с индивидуальным зада-


 

вар.

Задача

1

Создать линейный однонаправленный список из вещественных чисел.

Удалить из списка элемент перед каждым элементом со значением 55.

 

2

Создать линейный двунаправленный список из вещественных чисел.

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

 

3

Создать линейный однонаправленный список из вещественных чисел. Вставить в список число 1.5 после каждого элемента с отрицательным

значением.

 

4

Создать линейный однонаправленный список из вещественных чисел. Определить сумму элементов списка   со   значениями  больше  либо

равными 15.

5

Создать линейный однонаправленный список из вещественных чисел.

Удалить из списка первый элемент меньший по модулю 5.

 

6

Создать линейный однонаправленный список из вещественных чисел.

Продублировать в списке первый положительный элемент (если такого нет, оставить список без изменения).

7

Создать линейный однонаправленный список из целых чисел. Удалить

из списка первый четный элемент, стоящий на нечетной позиции.

8

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

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

 

9

Создать линейный однонаправленный список из вещественных чисел. Удалить из списка элемент перед каждым элементом со значением -2.

Вставить число 33 в конец списка.

 

10

Создать линейный двунаправленный список из целых чисел. Удалить из списка элемент после каждого элемента, равного 4. Вставить число 0

перед каждым числом 1.

 

11

Создать линейный однонаправленный список из вещественных чисел. Вставить в список число 1.5 после каждого элемента с отрицательным

значением. Удалить из списка все числа от 2 до 5.

 

12

Создать линейный однонаправленный список из целых чисел. Опреде-

лить сумму элементов списка со значениями больше либо равными 15. Удалить из списка все значения, которые меньше 5.


вар.

Задача

 

13

Создать линейный однонаправленный список из символов. Удалить из

списка первый элемент, код которого меньше 48.   Вставить символ % после каждой цифры.

 

14

Создать линейный однонаправленный список из вещественных чисел. Вставить первый положительный элемент списка после каждого отри-

цательного числа (если такого нет, оставить список без изменения).

15

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

в список последний четный элемент после каждого нечетного элемента.

16

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

список число 11 после каждого элемента, равного 9.

 

17

Создать линейный однонаправленный список из вещественных чисел.

Удалить из списка элемент перед каждым элементом со значением в интервале от 10 до 20.

18

Создать линейный двунаправленный список из символов. Удалить из

списка элемент после каждого символа &.

 

19

Создать линейный однонаправленный список из вещественных чисел.

Вставить в список число 13.5 после первого элемента со значением большим 2.

 

20

Создать линейный однонаправленный список из вещественных чисел.

Определить среднее значение элементов списка со значениями меньше либо равными 15. Удалить из списка элементы, которые больше 25.

 

21

Создать линейный однонаправленный список из целых чисел. Удалить

из списка первый элемент, больший числа 4. Вставить в список число 10 перед каждым числом, равным 15.

 

22

Создать линейный однонаправленный список из вещественных чисел.

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

 

23

Создать линейный однонаправленный список из целых чисел. Удалить из списка каждый элемент, кратный трем. Вставить в список число 88

после каждой пары равных рядом стоящих чисел.

 

24

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

Удалить из списка все отрицательные числа.

 

25

Создать линейный однонаправленный список из символов. Удалить из списка элемент перед каждым символом ^. Определить количество

символов * в списке.

26

Создать линейный двунаправленный список из вещественных чисел.

Удалить из списка элементы, у которых дробная часть больше 0,5.

 

27

Создать линейный однонаправленный список из целых чисел. Вставить в список число 0 перед каждым числом от 2 до 7. Определить сумму чисел больших 7.


вар.

Задача

 

28

Создать линейный однонаправленный список из вещественных чисел.

Определить максимальное из элементов списка и вставить его после каждого элемента со значением 1.

 

29

Создать линейный однонаправленный список из целых чисел. Удалить из списка первый элемент кратный 5. Вставить число 44 перед каждым

числом кратным 7.

 

30

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

перед каждым числом, большим среднего значения.

 


 

 

нием.


Высокий уровень

Задание: написать программу в соответствии с индивидуальным зада-


вар.

Задача

1

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

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

2

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

из списка первый элемент со значением 10.

3

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

из списка последний элемент со значением меньшим 15.

 

4

Создать циклический однонаправленный список из вещественных чисел. Вставить в список число 2.5 перед каждым элементом с положительным

значением.

 

 

5

Дан указатель P1 на начало односвязного линейного списка. Преобразо- вать исходную (односвязную) цепочку в двусвязную, в которой каждый элемент связан не только с последующим элементом (с помощью поля Next), но и с предыдущим помощью поля Prev). Поле Prev первого

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

 

 

6

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

списка.

 

 

7

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

списка.

8

Дан указатель P1 на первый элемент двусвязного списка, содержащего

не менее двух элементов. Удалить из списка все элементы с нечетными


вар.

Задача

 

номерами и вывести   указатель на первый элемент преобразованного

списка. После удаления элементов из списка освобождать память, кото- рую они занимали.

 

 

9

Дан указатель P1 на первый элемент непустого двусвязного списка. Удалить из списка все элементы с нечетными значениями и вывести указатель на первый элемент преобразованного списка (если в результате удаления элементов список окажется пустым, то вывести nil). После удаления элементов из списка освобождать память, которую они занима-

ли.

 

 

10

Дано число K (> 0) и указатель P0 на один из элементов непустого дву- связного списка. Переместить в списке данный элемент на K позиций вперед (если после данного элемента находится менее K элементов, то переместить   его в конец   списка).    Вывести    указатели   на первый и последний элементы преобразованного списка. Операции выделения и освобождения памяти не использовать, поля с данными (Data)

не изменять.

 

 

11

Дан указатель P1 на первый элемент непустого двусвязного списка. Перегруппировать его элементы, переместив все элементы с нечетными номерами в конец   списка   (в том же   порядке)   и вывести   указатель на первый   элемент   преобразованного   списка.   Операции   выделения и освобождения памяти не использовать, поля с данными (Data)

не изменять.

 

 

12

Даны два непустых двусвязных списка и связанные с ними указатели: PA и PB указывают на первый и последний элементы первого списка, PC на один из элементов второго. Объединить исходные списки, поместив все элементы первого списка (в том же порядке) после данного элемента второго списка, и вывести указатели на первый и последний элементы объединенного списка. Операции выделения и освобождения памяти

не использовать

 

 

 

13

Даны указатели PX и PY на два различных элемента двусвязного списка; элемент с адресом PX находится в списке перед элементом с адресом PY, но не обязательно рядом с ним. Переместить элементы, расположенные между данными элементами (не включая данные элементы) в новый список (в том же порядке). Вывести указатели на первые элементы преобразованного и нового списков. Если новый список окажется пус- тым, то связанный с ним указатель положить равным nil. Операции

выделения и освобождения памяти не использовать.

 

 

14

Даны указатели P1 и P2 на первый и последний элементы непустого двусвязного списка, содержащего четное количество элементов. Преоб- разовать список в два циклических списка, первый из которых содержит первую половину элементов исходного списка, а второй вторую

половину. Вывести указатели PA и PB на два средних элемента исходного


вар.

Задача

 

списка (элемент с адресом PA должен входить в первый циклический

список,   а элемент   с адресом PB —   во второй).  Операции   выделения и освобождения памяти не использовать.

 

 

 

15

Дано число K (> 0) и указатели P1 и P2 на первый и последний элементы непустого двусвязного списка. Осуществить циклический сдвиг элемен- тов списка на K позиций вперед (то есть в направлении от начала к концу списка) и вывести указатели на первый и последний элементы получен- ного списка. Для выполнения циклического сдвига преобразовать исход- ный список в циклический, после чего «разорвать» его в позиции, соответствующей данному значению K. Операции выделения

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

 

 

 

 

16

Даны указатели P1, P2 и P3 на первый, последний и текущий элементы двусвязного списка (если список является пустым, то P1 = P2 = P3 = nil). Также дано число N (> 0) и набор из N чисел. Описать тип TList запись с полями First, Last и Current типа PNode (поля указывают соответствен- но на первый, последний и текущий элементы списка) — и процедуру InsertLast(L, D),   которая    добавляет   новый    элемент   со значением D в конец списка L (L входной и выходной параметр типа TList, D входной параметр целого типа). Добавленный элемент становится теку- щим. С помощью этой процедуры добавить в конец исходного списка

данный набор чисел   (в том же   порядке)   и вывести   новые   адреса его первого, последнего и текущего элементов.

 

 

 

 

17

Даны указатели P1, P2 и P3 на первый, последний и текущий элементы

двусвязного списка (если список является пустым, то P1 = P2 = P3 = nil). Также дано число N (> 0) и набор из N чисел. Используя тип TList (см. задание 16), описать процедуру InsertFirst(L, D), которая добавляет новый    элемент    со значением D    в начало    списка L    (L –    входной и выходной параметр типа TList, D – входной параметр целого типа). Добавленный элемент становится текущим. С помощью этой процедуры добавить в начало исходного списка данный набор чисел (добавленные числа будут располагаться в списке в обратном порядке) и вывести новые адреса его первого, последнего и текущего элементов.

 

 

 

18

Дан непустой двусвязный список, первый, последний и текущий элемен- ты которого имеют адреса P1, P2 и P3. Также даны пять чисел. Используя тип TList (см. задание 16), описать процедуру InsertBefore(L, D), которая вставляет новый элемент со значением D перед текущим элементом списка L (L — входной и выходной параметр типа TList, D — входной параметр целого типа). Вставленный элемент становится текущим. С помощью этой процедуры вставить пять данных чисел в исходный список и вывести новые адреса его первого, последнего и текущего

элементов.

19

Дан непустой двусвязный список, первый, последний и текущий элемен-

ты которого имеют адреса P1, P2 и P3. Также даны пять чисел. Используя


вар.

Задача

 

тип TList (см. задание 16), описать процедуру InsertAfter(L, D), которая вставляет новый элемент со значением D после текущего элемента списка L (L входной и выходной параметр типа TList, D входной параметр целого типа). Вставленный элемент становится текущим. С помощью этой процедуры вставить пять данных чисел в исходный

список и вывести новые адреса его первого, последнего и текущего элементов.

 

20

Создать циклический двунаправленный список из целых чисел. Опреде- лить произведение чётных значений элементов списка и вставить эле-

мент со значением, равным вычисленному произведению в конец списка.